Ffmpeg какие кодеки поддерживает

Обновлено: 04.07.2024

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 предоставляет список поддерживаемых форматов пикселей.

  1. ^ 10-битные компоненты цвета с 2-битным заполнением (X2RGB10)
  2. ^ RGBx (rgb0) и xBGR (0bgr) также поддерживаются
  3. ^ используется в кодеках, ориентированных на YUV, таких как H.264
  4. ^ abcd YVU9, YV12, YV16 и YV24 поддерживаются как кодек rawvideo в FFmpeg.
  5. ^ I420 он же YUV420P
  6. ^ aka YUY2 в Windows
  7. ^ Y210 (YUYV 10bpc) не поддерживается. UYVY 10bpc без заполнения поддерживается как битовый кодек в FFmpeg. UYVY 10bpc с 2-битным заполнением поддерживается каккодек v210 в FFmpeg. 16bpc (Y216) поддерживается каккодек targa_y216 в FFmpeg.
  8. ^ I422 он же YUV422P
  9. ^ 16bpc (P216) не поддерживается
  10. ^ 8bpc (AYUV) не поддерживается
  11. ^ I444 он же YUV444P
  12. ^ используется в 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 (Перевод: Никогда конвертирование видео и звука не было таким простым)

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 – спрашивайте в комментариях. Помогу, чем смогу.


Webinoly: управляем VPS с Ubuntu Server 18.04


Конвертер видео Wondershare Video Converter Ultimate

Читайте также: