FFmpeg — это набор библиотек для обработки видео и аудио файлов.
Введение
FFmpeg является наиболее часто используемым программным обеспечением с открытым исходным кодом, предназначенным для обработки видео. Это мощнейший и универсальный инструмент, который повсеместно применяется на видео сайтах и в коммерческом программном обеспечении, к примеру, в Youtube и iTunes, а также считается стандартной реализацией кодирования и декодирования большинства аудио- и видео- форматов.
Сам FFmpeg выступает как огромный проект, который содержит большое количество элементов и файлов библиотек, а наиболее часто применяемым может считаться его инструментарий командной строки.
Обработка видеофайлов с использованием библиотеки FFmpeg
Рассмотрим некоторые основные концепции обработки видео. Сам видеофайл в сущности может считаться контейнером, содержащим видео и аудио информацию, а также способным содержать субтитры и другую информацию. Общими форматами контейнеров являются следующие:
- Формат MP4.
- Формат MKV.
- Формат WebM.
- Формат AVI.
Ниже приведена команда, которая просматривает контейнеры, поддерживаемые FFmpeg:
$ ffmpeg -formats ffmpeg -formats
И видео, и аудио информационные данные следует сначала закодировать, прежде чем они будут сохранены в виде файла. Разные форматы кодирования (CODEC) обладают разной степенью сжатия, что может приводить к отличиям в размерах и определениях файлов. Наиболее часто применяются следующие форматы кодирования видео:
- Формат H.262.
- Формат H.264.
- Формат H.265.
Приведённые выше форматы кодирования находятся под защитой авторских прав, однако их можно использовать бесплатно. Помимо этого, известны ещё ряд форматов кодирования видео, не обладающих авторскими правами, а именно:
- Формат VP8.
- Формат VP9.
- Формат AV1.
Для кодирования звуковых данных, как правило, применяются следующие форматы:
- Формат MP3.
- Формат AAC.
Всё, перечисленное выше, считается форматами кодирования, обладающими потерями, то есть, отдельные детали могут быть утеряны после кодирования, но при этом обеспечивается меньший размер файла после сжатия.
Приведённая ниже команда способна выполнить просмотр форматов кодирования, поддерживаемых FFmpeg, в том числе и кодирование видео и звука:
$ ffmpeg -codecs ffmpeg -codecs
Кодировщиками являются это файлы библиотеки, которые способны реализовать заданный формат кодирования. Только когда установлен кодировщик какого-либо формата, появляется возможность кодировать и декодировать видео и аудио файлы этого формата.
Ниже перечислен набор видео кодеров, которые встроены в FFmpeg:
- Кодер libx264, который является самым популярным кодировщиком H.264, имеющим открытый исходный код.
- Кодер NVENC, который является кодировщиком H.264 на базе графического процессора NVIDIA.
- Кодер libx265, который является кодировщиком HEVC, имеющем открытый исходный код.
- Кодер libvpx, который является кодировщиком VP8 и VP9 от Google.
- Кодер libaom, который является кодировщиком AV1.
Ниже перечислены аудио кодеры, встроенные в FFmpeg:
- Кодер libfdk-aac.
- Кодер aac.
При помощи, приведённой ниже команды можно осуществить просмотр установленных кодировщиков FFmpeg:
$ ffmpeg -encoders ffmpeg -encoders
FFmpeg обладает множеством параметров командной строки, которые подразделяются на пять частей:
$ ffmpeg {1} {2} -i {3} {4} {5} ffmpeg {1} {2} -i {3} {4} {5}
В данной команде, имеющей пять частей, расположены следующие параметры:
- Набор глобальных параметров.
- Набор параметров входного файла.
- Сам входной файл.
- Набор параметров выходного файла.
- Сам выходной файл.
Когда количество параметров очень большое, команда ffmpeg может быть записана в несколько строк, чтобы облегчить просмотр:
- $ ffmpeg \ ffmpeg \
- [Глобальные параметры] \
- [Параметры входного файла] \
- -i [входной файл] \
- [Параметры выходного файла] \
- [Выходной файл]
Ниже приведен пример использования данной команды:
- $ ffmpeg \ ffmpeg \
- -y \ # глобальные параметры
- -c: a libfdk_aac -c: v libx264 \ # параметры входного файла
- -i input.mp4 \ # входной файл
- -c: v libvpx-vp9 -c: a libvorbis \ # параметры выходного файла
- output.webm # выходной файл
Приведенная выше команда выполняет преобразование файла формата mp4 в файлы webm, оба из которых расположены в формате контейнера. Форматом кодирования аудио для входного файла mp4 является aac, форматом кодирования видео является H.264. Форматом кодирования видео для выходного файла webm является VP9, а форматом аудио является Vorbis.
Когда формат кодирования не указан, FFmpeg сам способен оценить кодировку входного файла. Это означает, что приведённая выше команда может быть записана следующим образом:
$ ffmpeg -i input.avi output.mp4 ffmpeg -i input.avi output.mp4
Параметрами командной строки, которые обычно использует FFmpeg, являются следующие:
- Параметр –c, который означает «укажите кодировщик».
- Параметр -c copy, который означает «копировать напрямую без перекодирования» (это оперативнее).
- Параметр -c:v, который означает «укажите кодировщик видео».
- Параметр -c:a, который означает «укажите аудио кодер».
- Параметр –i, который означает «укажите входной файл».
- Параметр –an, который означает «удалить аудио поток».
- Параметр –vn, который означает «удалить видеопоток».
- Параметр –preset, который означает «укажите качество выходного видео, которое может повлиять на скорость генерации файла». Доступен целый набор значений, а именно, сверхбыстрый, очень быстрый, быстрый, быстрый, средний, медленный, медленный, очень медленный.
- Параметр –y, который означает «без подтверждения напрямую перезаписать файл с тем же именем при выводе».
Для просмотра метаинформации видеофайлов, такой, как формат кодирования и скорость передачи данных, пользователь может просто применить –i параметр, как показано ниже:
$ ffmpeg -i input.mp4 ffmpeg -i input.mp4
Следует отметить, что указанная выше команда может вывести много избыточной информации.