Что это такое
FFmpeg — один из главных инструментов для работы с мультимедиа. Он умеет читать, преобразовывать, кодировать, декодировать, нарезать, склеивать и передавать аудио, видео, субтитры и метаданные.
Проект известен тем, что стоит под капотом огромного числа приложений: видеоредакторов, серверов трансляций, конвертеров, медиабиблиотек, платформ обработки файлов и внутренних скриптов.
Как устроен стек
FFmpeg состоит из библиотек и утилит. `libavcodec` работает с кодеками, `libavformat` — с контейнерами и потоками, другие библиотеки отвечают за фильтры, масштабирование, устройства и вспомогательные операции.
Консольная команда `ffmpeg` собирает эти возможности в один инструмент. Пользователь описывает вход, выход, кодеки, фильтры и параметры, а FFmpeg строит цепочку обработки.
Конвертация и изменение размера
Пример показывает обычную задачу: взять исходное видео, изменить размер и сохранить результат с заданными кодеками.
ffmpeg -i input.mov \
-vf scale=1280:-2 \
-c:v libx264 -preset slow -crf 22 \
-c:a aac output.mp4
Что внутри репозитория
Репозиторий на GitHub является зеркалом исходного кода. Внутри находятся библиотеки, утилиты, документация, тесты и множество реализаций форматов и кодеков. Основная разработка исторически связана с инфраструктурой самого FFmpeg.
Для пользователя это не так важно: публичный код и релизы позволяют встраивать FFmpeg в продукты, собирать его под нужные платформы и проверять поддержку форматов.
Практический контекст
В рабочих системах команды FFmpeg лучше хранить явно: в скриптах, задачах очереди или конфигурации. Тогда параметры кодирования можно повторить, сравнить и изменить без угадывания, как был получен файл.
Сильные стороны и ограничения
Сильная сторона — ширина поддержки. Если нужно обработать редкий контейнер, старый кодек или потоковую схему, FFmpeg часто оказывается первым инструментом для проверки.
Ограничение — сложность параметров. Команда может выглядеть пугающе, потому что мультимедиа само по себе сложно: контейнер, кодек, битрейт, фильтры, таймкоды и совместимость устройств нужно понимать отдельно.