Всем привет! Сегодня я хочу открытьсерию статей по изучению FFmpeg libav с нуля.Сразу уточню, что в основном статьи направлены на программирование, используя библиотеки libav*, где в качестве языка выступит С++.Отмечу то, что я не являюсьпрофессионалом в данной теме и моей целью является просто облегчить жизнь тем, кто, как и я, делает первые шаги в данном направлении. Несколько месяцев назад у меня появилась необходимость познакомиться с основами работы с аудио и видео файлами посредством языка С++ и библиотек libav*. Под libav* я подразумеваю libavformat, libavcodec, libavutil и другие. За время, посвящённое изучению, я понял, что в интернете довольно мало актуальной информации на данную тему. Мне удалось найти лишь несколько статей, которые более менее раскрывают природу библиотек, но и они уже успели устареть, поэтому я хочу делиться собственным опытом со всеми, кто только ступает на эту тернистую тропу. Перед началом чтения моих статей, настоятельно прошу ознакомиться с основами, которые освещаются здесь. FFmpeg - это набор библиотек и утилит командной строки, которые используются повсеместно для обработки мультимедийных материалов. Функционал FFmpeg посредством командной строки позволяет выполнять самые разнообразные операции с медиа, например, декодирование и транскодирование, мультиплексирование и демультиплексирование, применение фильтров, обрезка по времени, склеивание медиа файлов и многое другое. Основные преимущества FFmpeg: Открытый исходный код, удобный для ознакомления и модификации; Кроссплатформенность; В большинстве случаев редактирование медиа файлов выполняется без потери качества; Поддержка огромного количества кодеков для различных форматов медиа файлов. Мы же будем использовать библиотеки FFmpeg (libav*) для разработки на С++, подробнее обо всём можно почитать на официальном сайте (промотайте в самый низ, если вас интересует список библиотек и их предназначение). Данный раздел предназначен для каждого, кого интересует простая настройка рабочего окружения на Windows. Я пользуюсь редактором кода Visual Studio Code, менеджером пакетов MSYS2 и компилятором GCC из группы компиляторов mingw-w64. Скачиваем и устанавливаем менеджер пакетов с официального сайта. Запускаем MSYS2 и обновляем основные системные пакеты: $ pacman -Syu Перезапускаем MSYS2 и обновляем остальные пакеты: $ pacman -Su Устанавливаем mingw-w64 и некоторые вспомогательные пакеты (make, pkgconf):$ pacman -S --needed base-devel mingw-w64-x86_64-toolchain Устанавливаем пакет FFmpeg:$ pacman -S mingw-w64-x86_64-ffmpeg Настраиваем Visual Studio Code. По его настройке довольно много информации на официальном сайте, поэтому покажу лишь основное: 1. Добавить путь к заголовочным файлам (FFmpeg libav*) в "includePath" .2. Добавить путь к компилятору (mingw-w64 gcc) в "compilerPath". В качестве ознакомительного примера мы напишем простую программу для отображения информации о медиафайле. Полный код программы можно найти здесь. Первым делом необходимо открыть входной файл, путь к которому мы укажем аргументом в командной строке. Далее прочитаем файловый заголовок и сохраним информацию о найденных форматах в структуру AVFormatContext . Для удобства все манипуляции будут производиться в отдельной функции. Подробнее ознакомиться с AVFormatContext и его полями можно на официальном сайте. Итак, для начала выделим память для нашего format_context , сделать это можно с помощью функции avformat_alloc_context() . Далее посредством функции avformat_open_input() прочитаем заголовок и заполним наш компонент минимальной информацией о формате. Следующим шагом получим информацию обо всех потоках в файле, это делает функция avformat_find_stream_info() . Для вывода информации можно воспользоваться стандартной функцией av_dump_format() , которая принимает структуру AVFormatContext в качестве первого входного параметра. Подробнее ознакомиться с av_dump_format()  и её параметрами можно на официальном сайте. Осталось инициализировать структуру AVFormatContext и добавить вызов ранее созданной функции  open_input_media_file() в main() .  Ну и, конечно же, не стоит забывать про очистку памяти. Для этого мы напишем отдельную функцию clean_memory() и также добавим её вызов в main() . Сборку и запуск программы можно осуществить как с помощью командной строки:g++ 1.cpp -o out -lavformat -lavutil , так и с использованием Makefile (об этом довольно много информации в интернете). После запуска программы мы увидим информацию, полученную из нашего медиафайла, обо всех его потоках. В рамках данной статьи мы немного познакомились с libav* и написали вводный пример. Далее будем переходить к более реальным вещам, например, декодированию, транскодированию, использованию фильтров и многому другому. C/C++ разработчик