Ffmpeg какие кодеки поддерживает
FFmpeg - это бесплатный программный проект с открытым исходным кодом, состоящий из набора библиотек и программ для обработки видео, аудио и других мультимедийных файлов и потоков. В его основе лежит сам инструмент командной строки ffmpeg , предназначенный для обработки видео и аудио файлов. Он широко используется для перекодирования форматов , базового редактирования (обрезки и объединения ), масштабирования видео, эффектов постпроизводства видео и соответствия стандартам ( SMPTE , ITU ).
FFmpeg также включает другие инструменты: ffplay простой медиаплеер и ffprobe инструмент командной строки для отображения мультимедийной информации. Среди включенных библиотек - libavcodec , библиотека аудио / видео кодеков, используемая многими коммерческими и бесплатными программными продуктами, и libavformat (Lavf), библиотека мультиплексирования и демультиплексирования аудио / видео контейнера .
FFmpeg является частью рабочего процесса многих других программных проектов, а его библиотеки являются основной частью программных медиаплееров, таких как VLC , и были включены в базовую обработку для YouTube . Включены кодеры и декодеры для большинства форматов аудио и видео файлов, что делает его очень полезным для перекодирования обычных и необычных файлов мультимедиа.
FFmpeg публикуется под лицензией LGPL-2.1 или новее или GPL-2.0 или новее , в зависимости от того, какие опции включены.
СОДЕРЖАНИЕ
История
Проект был начат Фабрисом Белларом (под псевдонимом «Жерар Лантау») в 2000 году, а с 2004 по 2015 год его возглавлял Майкл Нидермайер. Некоторые разработчики FFmpeg также были частью проекта MPlayer .
Название проекта навеяно группой стандартов видео MPEG вместе с «FF» для «быстрой перемотки вперед». В логотипе используется зигзагообразный узор, который показывает, как видеокодеки MPEG обрабатывают энтропийное кодирование .
13 марта 2011 года группа разработчиков FFmpeg решила разделить проект под названием Libav . Мероприятие было связано с проблемой управления проектами, в которой разработчики не согласились с руководством FFmpeg.
10 января 2014 года два сотрудника Google объявили, что с помощью нечеткого тестирования было исправлено более 1000 ошибок в FFmpeg за предыдущие два года .
В январе 2018 года программа командной строки ffserver - давний компонент FFmpeg - была удалена. Разработчики ранее не рекомендовали программу, ссылаясь на большие усилия по обслуживанию из-за использования в ней внутренних интерфейсов прикладного программирования .
Проект выпускает новый релиз в среднем каждые три месяца. Хотя версии выпуска доступны для загрузки на веб-сайте, разработчики FFmpeg рекомендуют пользователям компилировать программное обеспечение из исходного кода, используя последнюю сборку из их системы контроля версий Git исходного кода .
История кодеков
На данный момент в рамках проекта FFmpeg созданы два формата кодирования видео с соответствующими кодеками и один формат контейнера . Два видеокодека - это FFV1 без потерь и кодек Snow без потерь и с потерями. Разработка Snow застопорилась, а его формат битового потока еще не завершен, что делает его экспериментальным с 2011 года. Формат мультимедийных контейнеров под названием NUT больше не разрабатывается, но все еще поддерживается.
Летом 2010 года разработчики FFmpeg Фиона Глейзер, Рональд Бултье и Дэвид Конрад анонсировали декодер ffvp8. В ходе тестирования они определили, что ffvp8 был быстрее, чем собственный декодер libvpx от Google . Начиная с версии 0.6, FFmpeg также поддерживает WebM и VP8 .
В октябре 2013 года в FFmpeg были добавлены собственный VP9 и декодер OpenHEVC, декодер с открытым исходным кодом High Efficiency Video Coding (HEVC). В 2016 году собственный кодировщик AAC был признан стабильным, что лишило VisualOn и FAAC поддержки двух внешних кодировщиков AAC . FFmpeg 3.0 (по прозвищу «Эйнштейн» ) сохранил поддержку сборки для кодировщика Fraunhofer FDK AAC . Начиная с версии 3.4 "Cantor" FFmpeg поддерживает формат изображений FITS . С ноября 2018 года в версии 4.1 "аль-Хорезми" AV1 можно мультиплексировать в MP4 и Matroska, вкл. WebM .
Компоненты
Инструменты командной строки
- ffmpeg - это инструмент командной строки, который конвертирует аудио- или видеоформаты. Он также может захватывать и кодировать в реальном времени из различных аппаратных и программных источников, таких как карта видеозахвата.
- ffplay - это простой медиаплеер, использующий библиотеки SDL и FFmpeg.
- ffprobe - это инструмент командной строки для отображения мультимедийной информации (текст, CSV , XML , JSON ), см. также Mediainfo .
Библиотеки
- libswresample - это библиотека, содержащая процедуры передискретизации звука .
- libavresample - это библиотека, содержащая процедуры передискретизации звука из проекта Libav , аналогичные libswresample из ffmpeg .
- libavcodec - это библиотека, содержащая все встроенные кодировщики и декодеры аудио / видео FFmpeg. Большинство кодеков были разработаны с нуля, чтобы обеспечить лучшую производительность и высокую возможность повторного использования кода.
- libavformat (Lavf) - это библиотека, содержащая демультиплексоры и мультиплексоры для форматов контейнеров аудио / видео.
- libavutil - это вспомогательная библиотека, содержащая процедуры, общие для различных частей FFmpeg. Эта библиотека включает хэш-функции, шифры, декомпрессор LZO и кодировщик / декодер Base64 .
- libpostproc - это библиотека, содержащая старые подпрограммы постобработки видео на основе H.263 .
- libswscale это библиотека , содержащие видео масштабирования изображения и цветовое пространство / PixelFormat процедуру преобразования.
- libavfilter - это заменитель vhook, который позволяет изменять или проверять видео / аудио между декодером и кодировщиком. Фильтры были перенесены из многих проектов, включая MPlayer и avisynth .
Поддерживаемое оборудование
Процессоры
FFmpeg включает в себя программные реализации алгоритмов сжатия и распаковки видео и аудио. Их можно компилировать и запускать с использованием различных наборов инструкций.
FFmpeg поддерживает множество распространенных наборов инструкций , включая x86 ( IA-32 и x86-64 ), PPC ( PowerPC ), ARM , DEC Alpha , SPARC и MIPS .
Оборудование специального назначения
Существует множество специализированных интегральных схем (ASIC) для сжатия и декомпрессии аудио / видео. Эти ASIC могут частично или полностью разгрузить вычисления от центрального процессора. Вместо полной реализации алгоритма для использования такой ASIC требуется только API .
Используйте с утилитой FFmpeg
Декодирование с внутренним аппаратным ускорением включается с помощью этой -hwaccel опции. Он начинает декодирование нормально, но если декодируемый поток обнаруживается аппаратными средствами, тогда декодер назначает всю значительную обработку этому оборудованию, тем самым ускоряя процесс декодирования. В то время как, если декодируемые потоки не обнаружены (как это происходит с неподдерживаемым кодеком или профилем), аппаратное ускорение будет пропущено, и оно все равно будет декодироваться программно. -hwaccel_device Опция применяется, когда аппаратному обеспечению для работы требуется определенное устройство, особенно если доступно несколько графических карт.
Поддерживаемые кодеки и форматы
Форматы изображений
FFmpeg поддерживает множество распространенных и некоторые необычные форматы изображений.
В Формат изображения PGMYUV является доморощенным вариантом двоичного (P5) формата PGM Netpbm . FFmpeg также поддерживает 16-битную глубину форматов PGM и PPM и двоичный (P7) формат PAM с альфа-каналом или без него, глубина 8 или 16 бит для pix_fmts моноблоков, серый, gray16be, rgb24, rgb48be, ya8, rgba, rgb64be. .
Поддерживаемые форматы
Помимо форматов FFV1 и Snow, которые были созданы и разработаны из FFmpeg, проект также поддерживает следующие форматы:
Муксеры
Форматы вывода (форматы контейнеров и другие способы создания потоков вывода) в FFmpeg называются «мультиплексорами». FFmpeg поддерживает, среди прочего, следующее:
Форматы пикселей
FFmpeg поддерживает множество форматов пикселей. Некоторые из этих форматов поддерживаются только как форматы ввода. Команда ffmpeg -pix_fmts предоставляет список поддерживаемых форматов пикселей.
- ^ 10-битные компоненты цвета с 2-битным заполнением (X2RGB10)
- ^ RGBx (rgb0) и xBGR (0bgr) также поддерживаются
- ^ используется в кодеках, ориентированных на YUV, таких как H.264
- ^ abcd YVU9, YV12, YV16 и YV24 поддерживаются как кодек rawvideo в FFmpeg.
- ^ I420 он же YUV420P
- ^ aka YUY2 в Windows
- ^ Y210 (YUYV 10bpc) не поддерживается. UYVY 10bpc без заполнения поддерживается как битовый кодек в FFmpeg. UYVY 10bpc с 2-битным заполнением поддерживается каккодек v210 в FFmpeg. 16bpc (Y216) поддерживается каккодек targa_y216 в FFmpeg.
- ^ I422 он же YUV422P
- ^ 16bpc (P216) не поддерживается
- ^ 8bpc (AYUV) не поддерживается
- ^ I444 он же YUV444P
- ^ используется в JPEG2000
FFmpeg не поддерживает IMC1-IMC4, AI44, CYMK, RGBE , Log RGB и другие форматы. Он также еще не поддерживает ARGB 1: 5: 5: 5 , 2: 10: 10: 10 или другие форматы битовых полей BMP , которые обычно не используются.
FFmpeg — это набор библиотек для обработки видео и аудио файлов. FFmpeg сконвертирует mov в mp4, наложит водяной знак, склеит несколько видео файлов в один, поменяет разрешение, перекодирует потоковое видео, создаст поток сам. FFmpeg полезен для тех, кто профессионально работает с видео, разрабатывает медиа приложения или просто обрабатывает домашние записи.
FFmpeg не имеет графического интерфейса и управляется командами из консоли. Многие пользователи работают с ним, копируя нужные команды из интернета, не понимая, что значит тот или иной флаг. Научимся осознанно работать с FFmpeg на примере нескольких полезных команд.
Сегодня мы пройдем путь от получения информации о файле до применения нескольких фильтров одновременно, решая задачи, с которыми часто сталкиваешься при работе с видео. Установим ffmpeg и вперед!
Получаем информацию о файле
Тут все просто, вводим путь к файлу, получаем информацию о нем: кодеки, количество дорожек, разрешение, битрейт и фреймрейт. Мы указываем пути к файлам флагом -i (input):
-i file1.mp4 -i file2.mp4 .
Конвертируем в mp4
Допустим у нас есть сайт, на котором видео проигрывалось через Flash плеер. Мы хотим поменять его на HTML5 Video. Для этого конвертируем видео файлы на сервере из flv формата в mp4.
По сравнению с предыдущей командой добавилось три поля.
- output.mp4 — путь к сконвертированному файлу.
- -vcodec libx264 — указываем какой видео кодек хотим получить. В нашем случае это H264, который поддерживается большинством браузеров.
- -acodec libvo_aacenc — аудио кодек AAC.
Список поддерживаемых вашим ffmpeg кодеков можно получить через ffmpeg -codecs .
Вместо -vcodec встречается запись -codec:v и -c:v . Если не указать кодеки для конвертации ffmpeg -i flashvideo.flv output.mp4 , то ffmpeg установит дефолтные кодеки для формата файла на выходе.
При конвертации задают не только кодеки. Увеличим число настроек:
Мы установили битрейт для видео -b:v и аудио -b:a в 700 и 128 кб/c. Битрейт можно обозначить другими флагами: -vb и -b для видео или -ab для аудио.
Оставшиеся три параметра — это фреймрейт -r 25 в кадрах в секунду, цветовая модель YUV равная обычному значению yuv420p и частота дискретизации звука 44100 Гц. Флаг -y нужен для перезаписи файла, если он уже существует.
Вырезаем фрагмент видео
Флагом -ss указываем с какого момента исходного видео обрезаем, -t — продолжительность. На выходе мы получим двадцати секундное видео, которое начнется с десятой секунды исходного. Запись -ss 00:00:10.250 -t 00:00:20.120 пригодится для указания более точного промежутка времени. До версии 2.1 FFmpeg в обоих случаях обрезал видео по ближайшему ключевому кадру. В новых версиях итоговое видео максимально близко к указанному интервалу.
Мы добавили -vcodec copy -acodec copy , чтобы сохранить кодеки исходного видео. Иначе ffmpeg перекодировал бы их в кодеки по умолчанию. Сейчас видео не перекодируется и команда выполнится быстро. Дальше упростим эту запись флагом -c copy .
Если расположить флаги -ss и -t после входящего видео, то итоговое видео будет таким же, но команда будет выполняться дольше. Флаги будут относиться к итоговому видео и FFmpeg будет декодировать фрагмент видео до -ss . В первом случае эта часть будет проигнорирована.
Флаг -t можно заменить на -to , указав вместо продолжительности конечную точку. Этот флаг нельзя применить к входящему видео:
Команда дала нам другой результат: тридцати секундное видео с десятой секунды исходного. Это произошло, потому что -to использовал временную шкалу result.mp4 , тридцатая секунда на котором равна сороковой секунде source_video.mp4 . Чтобы использовать исходную шкалу добавим флаг -copyts . Так мы получим такое же видео, как от первой команды:
Фильтры. Меняем разрешение
Один из самых мощных инструментов ffmpeg — фильтры. Они могут добавлять эффекты, накладывать разные видео друг на друга, сшивать несколько файлов в один. Увидеть список установленных фильтров мы можем по команде ffmpeg -filters . Изменим с их помощью разрешение видео:
Мы использовали флаг -vf , указав фильтр scale и разрешение 640:480 . Этот фильтр может сохранять пропорции и вычислять разрешение динамически.
Объединение фильтров. Ускоряем воспроизведение
Мы объединили несколько фильтров в один флагом filter_complex и получили ускоренный в два раза файл. Чтобы разобраться применим фильтры по одиночке.
Мы ускорили воспроизведение видео дорожки фильтром setpts . Однако аудиодорожка не изменилась, и файл получится той же продолжительности что и был: видео проиграется в 2 раза быстрее, а последний кадр будет висеть всю вторую половину файла. Если убрать аудио дорожку флагом -an , то длительность итогового файла будет определяться по видео дорожке и будет в два раза меньше исходной.
Наоборот, если нужна только ускоренное аудио без видео, воспользуемся фильтром atempo , а флагом vn уберем видео дорожку.
Добавив filter_complex и применив оба фильтра, мы ускорили файл целиком.
Граф фильтров применяет последовательность из нескольких фильтров к исходному файлу. Мы указали ускорение setpts для видео дорожки [0:v] и atempo для аудио [0:a] . С помощью комбинаций фильтров мы можем решить большинство задач по редактированию видео.
Склеиваем файлы в один
Мы видим новый флаг map . Он указывает ffmpeg какие дорожки хотим получить в итоговом файле. Если в наших исходных видео файлах гарантировано одна видео и аудио дорожка, и столько же мы хотим получить на выходе, то флаг map не нужен. Другие примеры использования Map можно посмотреть на сайте ffmpeg.
Выполним ту же операцию другим методом:
В FFmpeg есть элементы, которые читают или записывают медиа в определенных форматах. Они называются демультиплексор и мультиплексор. -f concat — это демультиплексор, который принимает текстовый файл, со списком медиа файлов и склеивает их в один. Посмотреть другие элементы можно командой ffmpeg -formats .
Такой метод удобен, если у нас много файлов и надо склеить их друг за другом. Он не перекодирует видео и работает быстрее первого метода.
Но первый метод применяется чаще. Во-первых, он может принять на вход видео с разными кодеками. Во-вторых, дает большую гибкость. Например, если нужна только часть первого видео, мы можем воспользоваться флагами -ss и -t . Обратите внимание, эти флаги действуют только на первый файл input1.mp4 .
Водяной знак
Последний пример, который мы рассмотрим — это наложение водяного знака. Фильтр overlay принимает на вход координаты расположения водяного знака на итоговом видео.
Расположим водяной знак по центру. Зная размер исходного видео и png картинки, можно вычислить координаты самим. Например при видео 1280×720 и водяном знаке 200×200, положение по горизонтали x = (1280 - 200) / 2 = 540 и по вертикали y = (720 - 200) / 2 = 260 . Соответственно значение фильтра "overlay=540:260" . Однако удобнее написать универсальную команду, чтобы ffmpeg посчитал все за нас. Размер видео получим из параметров main_w и main_h , а водяного знака из overlay_w и overlay_h . Далее ту формулу, по которой мы вычисляли координаты запишем в значение фильтра "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" . Готово, мы получили команду для наложения водяного знака по центру:
FFmpeg — мощный инструмент для работы с видео. Решение других задач с его помощью можно посмотреть в статье 19 команд ffmpeg для всех нужд.
У многих пользователей Windows и без того полно приложений, чтобы скачивать, устанавливать, активировать ещё одно для работы с видео. Обойдёмся без этих трудностей!
FFmpeg – функциональный видео- и аудио- конвертер. У него нет графического интерфейса, поэтому выполнять операции необходимо из консоли. При этом функционал программы и качество работы её превосходит тот, что показывают привычные конвертеры.
Базовые возможности FFmpeg:
- конвертация файлов;
- изменение разрешения;
- кадрирование;
- обрезка и склейка файлов;
- замена, добавление, извлечение аудиодорожек и субтитров;
- наложение водяного знака;
- кодирование или стриминг потокового видео.
FFmpeg на самом деле прост в использовании и будет полезен как профессионалам, работающим с видео, так и любителям, решившим обработать домашний видеоархив.
Установка FFmpeg.
Разархивируйте содержимое скачанного архива, например в Program Files или Windows или Windows\System32 (или в другую папку, где у вас могут храниться портативные программы).
- Имя файла: ffmpeg.zip (прямая ссылка)
- Версия: 4.3.2
- Размер файла: 39,3 МБайт
- Требование: OS Windows
- MD5: 5183ac5b1886fe4df4f32d5939ce0df9
Чтобы каждый раз не прописывать длинный путь к программе, например: C:\Program Files\ffmpeg\bin\ffmpeg.exe рекомендую добавить её в системную переменную Path, для этого перейдите:
Пуск → Параметры → Система → О программе → Дополнительные параметры системы → Переменные среды
Запустите "Выполнить" нажатием win+R и выполните sysdm.cpl, затем перейдите во вкладку "Дополнительно", а там уже "Переменные среды".
Переменная среда Path
Теперь для того, чтобы вызвать FFmpeg используйте в консоли (PowerShell или CMD) следующую команду:
FFmpeg: конвертация видео.
После установки FFmpeg можно заниматься работой с медиа файлами, например, конвертируем видео в консоли.
Эта команда сконвертирует видео из файла input.avi в output.mp4. По умолчанию для файлов mov и mp4 используется кодек H.264. Размер кадра и fps будут взяты из исходного файла.
В примере выше параметры по умолчанию могут отличаться от желаемых вами настроек, поэтому параметры можно задавать явно.
- -i имя исходного файла, который предстоит сконвертировать, если файлов несколько перед каждым из них нужно указать -i;
- -y ответит Да (yes) на все вопросы от FFmpeg, если они возникнут в процессе кодирования, например при для перезаписи файла, если тот уже существует;
- -vcodec или кратко c:v – параметры видеокодека, либо copy (если перекодирование не требуется), либо пустой параметр (по умолчанию);
- -f – формат контейнера;
- -b:v (-vb, -b) – битрейт видео в килобитах или мегабитах в секунду задаётся буквой K или M;
- -aspect – соотношение сторон картинки (4:3, 16:9, 1.3333, 1.7777);
- -r – частота кадров;
- -s — разрешение, поддерживаются как числовые значения (640×480) и буквенные обозначения (например, qcif, qvga);
- -vf (или -filter:v) — опция со списком фильтров, которые будут применены к видео;
- -c:a (или -acodec) – параметры аудиокодека, либо copy (если аудио дорожку нужно оставить как есть), либо пустой параметр (по умолчанию);
- -f – формат аудио;
- -af (или -filter:a) — опция со списком фильтров, которые будут применены к аудио;
- -ab (или -b:a) – битрейт аудио;
- -ar – частота дискредитации;
- -ac – количество каналов.
Для примера рассмотрим следующую команду:
ffmpeg -y -i input.avi -c:v libx264 -preset medium -b:v 17000K -aspect 16:9 -r 25 -c:a aac -b:a 128K output.mp4
Данная команда перекодирует файл input.avi в output.mp4. В случае если в конечной папке будет содержаться файл output.mp4, он будет перезаписан (опция -y). В качестве кодека будет использован libx264 со среднем соотношением скорость/качество (-preset medium). Конечный битрейт 17000 kbps, соотношение сторон картинки 16:9, частота 25 кадров в секунду. В качестве аудиокодека будет использован AAC с битрейтом 128kbps.
FFmpeg: Полезные команды.
Чтобы получить информацию о видеофайле выполните: ffmpeg -i video.mp4
Чтобы получить информацию о ключах и параметрах: ffmpeg -help
Исходные и конечные файлы могут быть любого формата, FFmpeg работает почти со всеми из существующих. Список поддерживаемых форматов ffmpeg -formats
Список поддерживаемых кодеков: ffmpeg -codecs
Обрезка видео.
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:05:15 -c copy output.mp4
Склейка видео.
ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi
Для склейки используется оператор concat. После двоеточия ему передаются входные файлы, разделённые вертикальной чертой. Соединяемые файлы обязательно должны быть одного формата (видео и аудио), их параметры должны совпадать.
Конвертация аудио.
ffmpeg -i input.wav -ar 44100 -ac 2 -ab 192K -f mp3 output.mp3
Аудио файлы можно конвертировать независимо от видео.
Изменение разрешения и кадрирование.
ffmpeg -i input.mp4 -s 1280x720 output.mp4
Чтобы изменить разрешение конечного видео можно воспользоваться опцией -s.
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
Однако использование фильтра scale даст более качественный результат.
Для кадрирования изображения предназначен фильтр crop. Его параметры имеют следующий вид crop=w:h:x:y, где w — ширина прямоугольника, который нужно вырезать из исходного видео, h — высота прямоугольника, x и y — x координаты точки начала обрезки.
ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
Команда выше вырежет из кадра прямоугольник шириной 640 и высотой 480 пикселей, начиная с позиции (200,150).
Соотношение сторон.
Соотношение сторон устанавливаются опцией -aspect.
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
Ещё пример: ffmpeg -i input.mp4 -aspect 16:9 -vf scale=1280:720 output.mp4
Самые популярные соотношения сторон: 16:9 | 4:3 | 16:10 | 5:4 | 2:21:1 | 2:35:1 | 2:39:1.
Добавление, извлечение и удаление и аудио.
Чтобы добавить звуковую дорожку в видеофайл используйте опцию -i, в которой укажите путь к аудиофайлу.
ffmpeg -i noaudio.mpg -i audio.acc -vcodec copy -acodec copy output.mpg
Удалить из видеофайла звуковую дорожку можно с помощью опции -an (audio not).
ffmpeg -i input.mpg -vcodec copy -an noaudio.mpg
Сохранить аудиодорожку из видеофайла.
ffmpeg -i input.mpg audio.wav
Если требуется сохранить дорожку в определённый формат, укажите параметры явно:
ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192K -f mp3 audio.mp3
Опция -ar указывает частоту дискретизации, -ac — количество каналов, -ab — битрейт. Опция -vn означает, что видео информация будет отброшена, а опция -f указывает формат полученного файла (в примере — это mp3).
Если звуковых дорожек несколько, чтобы сохранить отдельную звуковую дорожку из видеофайла (демультиплексация) воспользуйтесь опцией -map и укажите её идентификатор потока.
ffmpeg -i input.avi -map 0:2 audio.wav
В примере ниже показано, как добавить несколько звуковых дорожек в видеофайл (мультиплексация).
ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0:0 -map 0:1 -map 0:2 output.mkv
Так как в примере выше только один выходной файл, 0 перед двоеточием можно опустить.
Изменение громкости.
Для изменения громкости в FFmpeg существует аудиофильтр volume.
Следующая команда в половину уменьшит громкость:
ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3
Аналогично, громкость можно увеличить (в примере ниже в полтора раза):
ffmpeg -i input.mp4 -c:v copy -af 'volume=1.5' output.mp4
Возможности FFmpeg на этом не ограничиваются, поэтому подробнее можно ознакомиться с командами и фильтрами на официальном сайте.
В 2000 году программист с ником Gerard Lantau выложил для всеобщего использования исходники проекта FFmpeg. За годы концепция осталась прежней:
- Деление на программы FFmpeg для кодирования видео и FFserver для организации потокового вещания.
- Максимально быстрое кодирование звука и видео.
В то время 500 мегагерц в компьютере считались нормой, требовалась максимальная оптимизация, поэтому в FFmpeg своя реализация видеокодеков, оптимизированная для скорости. Это нужно и сейчас, особенно на серверах видеохостингов, где идёт постоянная борьба за снижение энергопотребления, чтобы процессоры не грелись.
FFmpeg прочно стоит на ногах – почти каждый день вносятся правки в исходный код. Добавляются новые компоненты. Например, плеер FFplay и утилита для получения информации FFprobe.
Где скачать FFmpeg и FFserver
FFmpeg разрабатывается под Linux. Если на сайте видите окошко с трансляцией видео – 9 шансов из 10, что оно работает благодаря FFmpeg и FFserver.
На выбор есть 32- и 64-битные версии. Для кодирования видео выбирайте 64-битную Static-версию (ссылка вида “Download FFmpeg git-*** 64-bit Static“).
Если нужно организовать видеотрансляцию с, например, IP-видеокамеры, желательна 32-битная версия FFmpeg, с 64-битной я заметил проблемы – программа закрывалась сама по себе. Возможно, потому что FFserver для Windows – 32-битный, есть несовместимость.
Про FFserver в Интернете много инструкций. Они написаны на примере Linux-версии, но прекрасно работают под Windows. Единственное отличие – файл ffserver.conf должен лежать не в папке /etc, а в одной папке с ffserver.exe, cygwin1.dll и ffmpeg.exe.
Как установить FFmpeg
2. Создайте на диске C: папку ffmpeg и распакуйте туда архив.
Для установки ffmpeg этого достаточно. Советую выполнить пункт 4 для удобства в будущем.
3. Если нужно настроить трансляцию, в папку c:\ffmpeg\bin распакуйте ffserver и положите файлик cygwin1.dll.
4. Чтобы в командах не писать каждый раз полный путь к программе, можно добавить его в переменную PATH: Панель управления – Система – Дополнительные параметры системы – вкладка Дополнительно – Переменные среды – в конце строки переменной Path добавьте “;c:\ffmpeg\bin” без кавычек. Если там было пусто (что не совсем нормально), то “c:\ffmpeg\bin“, т.е. без точки с запятой в начале.
Потом перезагрузите компьютер, чтобы изменения вступили в силу.
Вы можете пропустить четвертый шаг, но потом вместо команд ffmpeg и ffserver придется писать полный путь “c:\ffmpeg\bin\ffmpeg.exe” и “c:\ffmpeg\bin\ffserver.exe”.
Как пользоваться FFmpeg
На главной странице FFmpeg красуется надпись:
Converting video and audio has never been so easy (Перевод: Никогда конвертирование видео и звука не было таким простым)
Человек, не знакомый с командной строкой, будет в ступоре. Куда вводить команду?
FFmpeg хорош для тонких задач, но, если не хотите заморачиваться, воспользуйтесь бесплатной XMedia Recode или платной Movavi Video Converter. .
В папке ffmpeg\doc собрано много примеров по использованию компонентов, все команды можно посмотреть там.
Примеры
Имена файлов у вас будут свои. Если есть пробелы или на русском – обрамляйте имена в кавычки.
Отобразить информацию о файле:
или ffprobe video.mp4
Пережать видео avi в mp4:
Пережать mov в flv и изменить разрешение:
Пережать видео в webm среднего качества, звук формата OGG:
Пережать видео кодеком MPEG4, звук – mp3, контейнер – avi:
Сохранить звуковую дорожку из видео в отдельный файл:
Добавить звуковую дорожку к видео (“-acodec libmp3lame” можно выкинуть, тогда ffmpeg сам решит, как кодировать звук):
Добавить звуковую дорожку без перекодирования видео (сохраняет качество, работает быстро):
Пережать видео в формат
Сохранить кадр на второй секунде как отдельную картинку:
Убрать дрожание камеры и сохранить в out.mp4:
Структура
Как видно из примеров, команды ffmpeg имеют структуру:
Если не указывать опции кодирования, для результирующего файла ffmpeg будет пытаться использовать параметры исходного, чтобы сохранить максимум качества.
Команды
Информационные (чтобы узнать возможности установленной версии)
-L
Показать текст лицензии.
-h, -?, -help, –help
Список доступных команд.
-version
Узнать версию ffmpeg.
-formats
Показать список доступных форматов контейнеров (не кодеков!).
В Windows не хватит строк в командной строке для показа всего списка, для исправления откройте свойства окна и на вкладке “Расположение” поставьте высоту буфера экрана в 500. В списке буквы D и E означают поддержку декодирования и кодирования.
-codecs
Список доступных кодеков. Кроме интуитивно понятных D и E (Decoder для “чтения” и Encoder для кодирования), видны следующие обозначения:
V – кодек для видео, A – для звуковых дорожек, S – субтитров, I – только для кодирования I-фреймов, L – кодек сжимает с потерями данных (большинство), S – без потери данных (сохраняет качество, сжимает слабо).
-bsfs
Показать поддерживаемые bitstream filters (фильтр потока данных), которые нужны в ряде случаев для правильной обработки потока данных.
-protocols
Показать доступные протоколы. Из выдаваемого списка понятно, что в качестве входных данных может использоваться RTMP поток (видеотрансляция) и многое другое, не только файлы. Как выходные – тоже.
-filters
Доступные фильтры видео и аудио. В FFmpeg их громадное количество. Кроме банальных поворота и настроек яркости, в FFmpeg есть расширение стереобазы, генерирование фракталов и прочее, прочее. Подробные инструкции – в doc/ffmpeg-filters.html.
-pix_fmts
Доступные цветовые форматы. FFmpeg понимает громадное количество цветовых пространств. Полезно для тех, у кого оборудование выдает странные цвета.
Основные опции
-loglevel значение или -v значение
Уровень логгирования. От минимума – quiet до максимально подробного debug. Полный список: quiet, panic, fatal, error, warning, info, verbose, debug. Полезно, если в процессе кодирования видео происходят ошибки и нужно узнать подробности.
-f значение (mp4, avi, mkv, gif и т.д.)
Указать определенный формат (контейнер) файла. Обычно FFmpeg выбирает по расширению выходного файла, но можно переназначить.
-i путь_до_файла
Команда для указания входящего файла или потока (например, rtmp://адрес для захвата потокового видео).
-y
Перезаписывать уже существующий выходной файл без запроса.
-ss время
-t время
Указать, до какого времени нужно кодировать видео/аудио. Вместе с предыдущей командой удобно использовать для вырезания отрезка видео.
-fs размер
Лимит выходного файла. Например, при -fs 10M кодирование останавливается, как только выходной файл станет 10 Мб размером. Поддерживаются K, M, G (килобайты, мегабайты и гигабайты).
Опции кодирования видео
-b значение
Устанавливает битрейт видео. Выше битрейт – лучше качество и больше размер файла. Указывайте в конце цифры K или M, чтобы программа понимала, в килобитах/сек или мегабитах/сек значение.
-vframes значение
Количество кадров, которые нужно кодировать.
-r значение
Указание частоты кадров.
-s размер
Указание, в каком разрешении кодировать видео. Например, 1920×1080 для FullHD видео на выходе. FFmpeg понимает буквенные сокращения (vga, hd480, hd720, hd1080 и другие).
-aspect соотношение_сторон
Указать соотношение сторон видео (4:3, 16:9 or 1.3333, 1.7777 и т.д.). Как известно профессионалам, в видео пиксели могут быть прямоугольными.
-croptop значение, -cropbottom значение, -cropleft значение, -cropright значение
Обрезка количества пикселей видео сверху, снизу, слева или справа.
-padtop значение, -padbottom значение, -padleft значение, -padright значение
Добавление границы видео сверху, снизу, слева или справа.
-padcolor hex_color
-vn
Не кодировать видео.
-bt значение
Значение задает максимальное отклонение от указанного битрейта. Может не работать, в зависимости от кодека.
-maxrate битрейт
Указывает максимальное значение битрейта. Требует указания размера буфера через -bufsize.
-minrate битрейт
Минимальный битрейт у видео. Часто используется для принудительного задания определенного битрейта:
ffmpeg -i video.avi -b 4000K -minrate 4000K -maxrate 4000K -bufsize 1835k video-out.mp4
-bufsize размер
Устанавливает размер буфера видео. Упрощенно говоря, это кусок видео, который FFmpeg анализирует и выбирает – какие битрейты выбрать в его пределах. В первую очередь нужно для потокового вещания: чем больше буфер, тем больше стабильности при кодировании.
-vcodec кодек
Выбор кодека (см. команду -codecs для списка кодеков). Можно указать copy, тогда FFmpeg будет копировать видеопоток без перекодирования.
-sameq
Сохранять качество исходной картинки/звука. Это не то же самое, что -vcodec copy. Сохраняется качество видео, кодек может быть любым, видеодорожка перекодируется.
-pass n
Для многопроходного кодирования видео. Указывает, какой делать проход (1 или 2). Префикс имени файла со статистикой указывается командой -passlogfile значение.
Можно отключить обработку звука при первом проходе, чтобы экономить время и ресурсы:
ffmpeg -i video.mp4 -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
Опции звука
-aframes количество
Сколько фреймов звука (да, у звука есть кадры!) нужно кодировать.
-ar частота
Указание частоты звука (по умолчанию 44100 Гц).
-ab битрейт
Битрейт (по умолчанию = 64K).
-aq значение
Указание качества (зависит от кодека, применяется при переменном битрейте).
-ac число
Количество аудиоканалов (по умолчанию 1).
-an
Не кодировать звук.
-acodec кодек
Указание кодека для звука. Значение copy позволяет копировать звуковую дорожку без перекодирования
-newaudio
Добавление еще одной звуковой дорожки. Ее параметры указываются до команды -newaudio:
ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
Субтитры
-scodec кодек
Кодек для субтитров (copy – для прямого копирования).
-newsubtitle
Добавление еще одних субтитров.
-slang код
Указание языка субтитров в стандарте ISO 639 (3 буквы).
-sn
Другие команды
-threads количество
Количество потоков для кодирования видео. Опцию следует применять только на многоядерных ПК и то с оглядкой, читая документацию к выбранному кодеку.
-vsync значение
Синхронизация кадров. Значения:
0 – каждый кадр передается из входного в результирующий файл с той меткой времени, которая у него была.
1 – кадры будут дублироваться или удаляться, чтобы сохранить требуемую частоту кадров.
2 – кадры будут пропускаться или удаляться, чтобы сохранить требуемую частоту кадров.
-1 – значение по умолчанию. FFmpeg выбирает сам между методами 1 и 2.
-async кадры_в_секунду
Выбор метода синхронизации звука. Чтобы звук и видео совпадали по времени, аудиодорожка может растягиваться и сжиматься. Значение 1 скорректирует звуковую дорожку только в самом начале по принципу “дальше будь что будет”.
-copyts
Применяется для принудительного копирования всех временных меток из исходного файла. Полезно в случае, если начало видео – не 00:00, а что-то другое и это нужно сохранить.
-shortest
Когда самый короткий входящий файл закончился, прекращение кодирования.
Еще команд?
Команды для FFmpeg смотрите здесь:
Для кодирования кодеком x264, который сейчас приобрел популярность, гляньте это:
Почему команд так много?
Они нужны для полного контроля процесса обработки файлов с видео и звуком.
Большинство пользователей конвертируют видео, не понимая, что важен не только кодек для сжатия, но и его параметры. Есть нюансы, которые непросто осознать начинающим пользователям. Например, файл с расширением “mp4” не обязательно содержит в себе видео с кодеком MPEG4.
Если есть какие-то вопросы по FFmpeg – спрашивайте в комментариях. Помогу, чем смогу.
Читайте также: