FFmpeg

Материал из Rosalab Wiki
Версия от 21:44, 10 марта 2023; PastorDi (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио и видеозаписи в различных форматах.

Ffmpeg-logo.png

Он включает libavcodec - библиотеку кодирования и декодирования аудио и видео и libavformat - библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и FF, означающего Fast Forward. FFmpeg разработан под ОС на основе Linux, однако может быть скомпилирован под многие другие операционные системы. Разработчики не выпускают релизов и рекомендуют использовать последнюю версию из Git. Распространяется под лицензиями GNU LGPL или GNU GPL.

Ссылки

Установка

В графическом окружении
В dnfdragora найдите пакет ffmpeg и установите его.
Через терминал
В терминале наберите следующую команду: sudo dnf in ffmpeg


Управление FFmpeg через терминал
  • Вызов мануала по FFmpeg:
man ffmpeg
Сохранение мануала в текстовый файл, где /usr/ - имя вашего профиля в ROSA. обычно это трактуется в терминале как user@computer:
man ffmpeg > /home/usr/ffmpeg_man
  • Вызов справки помощи по FFmpeg, где -h - краткая справка помощи. -h long - длинная справка помощи. -h full - полная справка помощи:
ffmpeg -h full
Сохранение справки в текстовый файл:
ffmpeg -h full > /home/usr/ffmpeg_fullhelp
  • Актуальны так же следующие некоторые опции, полный список которых можно узнать в начале краткой справки по FFmpeg ffmpeg -h:
ffmpeg -codecs -информация по возможным кодекам в FFmpeg
ffmpeg -decoders -информация по возможным декодерам в FFmpeg
ffmpeg -encoders -информация по возможным енкодерам в FFmpeg
ffmpeg -filters -информация по возможным фильтрам в FFmpeg
ffmpeg -pix_fmts -информация по возможным пиксельным форматам в FFmpeg
Основные и дополнительные ключи параметров FFmpeg
Ключ Пример Описание
-i <filename> -i movie.avi Путь/имя входного файла. Без установки параметров обработки означает информацию о входном файле
-f <format> -f mkv Формат входного/выходного файла
-r <fps> -r 23.976 Количество кадров в секунду. \\ В качестве входного параметра игнорирует любые временные метки хранящиеся в файле, - используется для ускорения или замедления видепотока (например 23.976 > 25 fps). \\ В качестве опции вывода, - дублирует или удаляет кадры для достижения заданной параметром частоты кадров, скорость воспроизведения видеопотока остаётся при этом неизменной. \\ (Смотрите в разделе применение)
-s <size> -s 720x400 Размер видеокадра
-ss <position> -ss 00:10:50 Начальная позиция кодирования
-t <position> -t 00:15:10 Конечная позиция кодирования
-vframes <n> -vframes 1000 Задаем количество кадров кодирования
-vcodec %%<codec>%% -vcodec libx264 Кодек кодирования видео
-с:v -с:v libx264 Псевдоним для <vcodec> см. выше
-acodec %%<codec>%% -acodec libmp3lame Кодек кодирования аудио
-c:a -c:a libmp3lame Псевдоним для <acodec> см. выше
-intra -intra Кодирование в режиме (Intra) интра-кадров. То же самое что и GOP=1 < -g 1 >. Подробнее о GOP смотрите ниже, включая графу в таблице кодека x264
-qscale -qscale 1 Использует фиксированную шкалу качества (VBR), где <1> - высшее качество по шкале
-q -q 1 Псевдоним для < -qscale > см. выше-ниже ... -q:v - для видео, -q:a - для аудио. Чем меньше значение, тем выше качество.
-sameq -sameq Сохранить видео в том же качестве. Является устаревшей опцией и иногда вместо неё приходится вводить < -qscale 0 >
-y -y Разрешить перезапись выходного файла без запроса на подтверждение
-n -n Запретить перезапись выходного файла
-vn -vn Не кодировать видео
-an -an Не кодировать аудио
-sn -sn Не использовать субтитры
-dn -dn Не использовать data-данные
-vlang %%%% -vlang eng Выбираем язык видео
-alang %%<code>%% -alang jpn Выбираем язык аудио
-slang %%<code>%% -slang rus Выбираем язык субтитров
-vsync Способ синхронизации видео при мультиплексации (сведении) аудио и видео дорожек. Оптимальное значение < -vsync 0 > - сквозной метод, 1 кадр в секунду.
-аsync Способ синхранизации аудио. Является устаревшей опцией. Разработчики рекомендуют метод [[1]] от видео фильтра.
-intra_matrix  %%<code>%% Установка матрицы кодирования I-кадров (опорных, интра-кадров) для mpeg2video - см. ниже в разделе для mpeg-2
-inter_matrix  %%<code>%% Установка матрицы кодирования P,B-кадров (внутренних интер-кадров) для mpeg2video - см. ниже в разделе для mpeg-2
-deinterlace -deinterlace Включаем деинтерляцию. Эта опция устарела, поскольку деинтерлейсинг очень низкого качества. Используйте опцию [[2]] из ассортимента видеофильтров ffmpeg: < -vf yadif > или < -filter:v yadif >
-threads <threads> -threads auto Включение обнаружения колличества потоков. Лучше оставить значение по умолчанию и отдать определение числа потоков кодеру. Опция актуальна для многоядерных процессоров.
-pix_fmt <stream_spec> -pix_fmt yuv444p Установка пиксельного формата. Используйте команду < ffmpeg -pix_fmts > в терминале, чтобы показать все поддерживаемые пиксельные форматы. Если формат пиксел-матрицы не может быть выбран из-за совместимости, то ffmpeg выдаст предупреждение. Если pix_fmt имеет префикс +, то ffmpeg завершится с ошибкой, при условии что запрашиваемый пиксел-формат не может быть выбран и автоматическое преобразование внутри графического фильтра отключено. Внимание, некоторые старые версии ffmpeg и libx264 работают только с 4:2:0 пиксельным форматом (yuv420), так же как и некоторые плейеры не воспроизводят пиксел-форматы выше чем 4:2:0 и 4:2:2, по этому если у вас на входе 4:4:4 пиксел-матрица (формат), то необходимо задать опцию преобразования формата к совместимому с libx264, пример: -pix_fmt yuv420p или -vf format=yuv420p .. Подробнее об пиксел-форматах видео см. wiki-Цветовая субдискретизация
Ключи параметров FFmpeg для Видео

Данные настройки необходимы для более точного задания характеристик выходного видео. Желательно использовать, только если вы уже знакомы с основами кодирования, иначе есть вероятность сделать выходное видео только хуже.

немного теории - gop

GOP Settings – для удобства кодирования видеоданных весь видеопоток разбивается на группы, называемые GOP (Group of Pictures - группой изображений) и состоят из I,P,B типов кадров, подробнее wiki-Типы кадров . Cтруктуру GOP обычно описывают в виде дроби M/N, для которой: M сообщает общее число кадров в GOP, а N - каким по счету будет очередной P кадр после предыдущего. GOP зависит от выставленного значения M Frames. Если сцены содержат частую смену освещения, быстрое движение, смены цветов, то лучше выбирать более короткую GOP. Для MPEG-2-PAL максимальное значение GOP (Group Of Pictures) - 15 кадров. Например, при импорте видео с GOP = 18 в программу Adobe Encore можно получить ошибку: "Sorry, an abnormal condition has been detected". Для DVD принято использовать структуру 15/3 (IBBPBBPBBPBBPBB) или 12/3 (IBBPBBPBBPBB) - то же самое для закрытого "closed" GOP 13/3 (IBBPBBPBBPBBP) - M=13, N=3. Чем больше длина GOP, тем сильнее сжатие, но увеличение длины GOP уменьшает качество материала. Для рипов DivX, XviD, mpeg4, x264.mkv - используется более свободный и независимый подход в отношении GOP, но тут так же становится важным - не "переборщить". Смотрите также тематическую статью wiki-Кадровая частота

работа с чёрными полями кадра средствами ffmpeg
  • Обрезка чёрных полей в кадре... Для обрезки чёрных полей видео кадра, в FFmpeg используются следующие функции:
croptop - обрезка сверху
cropbottom - обрезка снизу
cropleft - обрезка слева
cropright - обрезка справа

Значения параметров обрезки видео кадра задаются в пикселях. В некоторых версиях ffmpeg эти опции могут отсутствовать и взамен им может быть предложено использовать родственные опции от графического видеофильтра < -vf filter >. Например: -vf crop=width:height:x:y - где: width - горизонтальная "ширина" видеокадра. height - вертикальная "высота" видеокадра. x:y - размеры отступа от левого верхнего угла, это бывает необходимо чтобы сместить вырезанный кусок кадра от центра к противоположным углам - верхнему (нижнему) левому, или нижнему (верхнему) правому. Подробнее о параметрах обрезки ffmpeg-filters-crop... Примеры использования опций обрезки от видеофильтра ffmpeg:

-vf crop=128:128     - обрезка изображения по центру кадра, до размеров 128x128 пикселей.
-vf crop=128:128:0:0 - обрезка изображения до размеров 128x128 пикселей, - точно от левого верхнего угла.
-vf crop=in_w-2*8    - обрезка входного кадра (in_) по ширине (widht), по двум сторонам (2*) лево и право, по 8 пикселей каждая.
-vf crop=in_h-2*8    - обрезка входного кадра (in_) по высоте (height), по двум сторонам (2*) верх и низ, по 8 пикселей каждая.
или в купе:
-vf crop=in_w-2*8:in_h-2*8
  • Добавление чёрных полей в кадр... Для добавления чёрных полей в кадр, используются функции видео фильтра scale и pad. Это бывает необходимо когда вы встраиваете широкоэкранные аспекты типа 2.24; 2.35; 2.0 - в размер аспекта 16:9, ибо не все плейеры понимают и хорошо работают с широкоэкранными аспектами 2.24; 2.35; 2.0
-vf scale=720:320,pad=720:400:x:y:black

< scale > - реальный размер входного кадра, к которому требуется добавить чёрные поля (полосы). Например: 720x320 аспектом 2.24 до аспекта 16:9

< pad > - < pad=720:400:0:40:black >, где 720:400 - желаемый (выходной) размер кадра на выходе, аспектом 16:9. X:Y (0:40) - смещение по оси "x" (горизонталь) равно нулю, это значит что добавление чёрных полос по бокам не ведётся, а по оси "y" (вертикаль) мы добавляем по 40 пикселей сверху и снизу, до масштаба 720x400 - где 400-320=80 .. 80/2=40.. Не забываем про функцию < aspect > которая будет регулировать окончательное, выходное соотношение сторон вашего кадра. В данном примере аспект должен быть 16:9 (pad=aspect)

< black > - означает цвет добавляемых полей (полос) - чёрный.

Аналоги ключей ffmpeg для x264

Аналоги основных ключей параметров кодирования ffmpeg для x264. Для просмотра полного списка параметров кодирования кодека x264, следуйте по ссылке в графе таблицы, - это один из лучших мануалов для x264.

Ключи для задания параметров в FFmpeg Аналоги ключей для libx264 Описание
-x264-params, -x264opts см. ниже
-profile profile см. ниже
-level level см. ниже
-b bitrate см. ниже
-bt ratetol см. ниже
-bufsize vbv-bufsize см. ниже
-maxrate vbv-maxrate см. ниже
-rc_init_occupancy vbv-init Начальное заполнение буфера VBV, переменного битрейта. Лучше не устанавливать эту опцию и отдать её в "руки" кодера
-bf bframes см. ниже
-b_strategy b-adapt см. ниже
-b-pyramid b-pyramid см. ниже
-direct-pred direct см. ниже
-weightb weightb см. ниже
-weightp weightp см. ниже
-g keyint см. ниже
-keyint_min keyint-min cм. ниже
-qmin qpmin см. ниже
-qmax qpmax см. ниже
-i_qfactor ipratio см. ниже
-b_qfactor pbratio см. ниже
-qp qp см. ниже
-crf crf см. ниже
-qdiff qpstep см. ниже
-qcomp qcomp см. ниже
-cplxblur cplxblur см. ниже
-qblur qblur см. ниже
-refs ref см. ниже
-mixed-refs mixed-refs см. ниже
-mixed-refs 0 no-mixed-refs=1 отключение опции
-sc_threshold scenecut см. ниже
-trellis trellis см. ниже
-nr nr см. ниже
-chromaoffset chroma-qp-offset см. ниже
-pass pass см. ниже
-me_range merange см. ниже
-me_method me см. ниже
-cmp chroma-me см. ниже
-subq subme см. ниже
-coder cabac Включение функции "Контекстно-Адаптивного Двоичного Арифметического Кодирования". Context-Adaptive Binary Arithmetic Coding (CABAC) wiki-CABAC
-deblock deblock см. ниже
-psy psy см. ниже
-psy-rd psy-rd см. ниже
-threads threads см. ниже-выше
-thread_type sliced_threads см. ниже
-flags -cgop open-gop см. ниже
-fast-pskip 0 no-fast-pskip=1 см. ниже
по умолчанию no-dct-decimate Кодер пишет видеопотоку все анализируемые блоки DCT. В результате на следующий этап компрессии подаётся оптимизированный сигнал. Если эту трансформацию отключить, то можно выиграть в детализации при двухпроходном кодировании, поскольку у кодека за 2 прохода появляется возможность оценить весь видеоряд. Опция включена в FFmpeg по умолчанию, но её отключение можно осуществить через параметры кодека xlib264: -x264-params no-dct-decimate=1
Ключи параметров ffmpeg для x264

Свободный кодек x.264 MPEG-4 ISO/AVC стандарта MPEG-4, - является современной и продвинутой формой кодека MPEG-4 ISO/IEC, по этому некоторые ключи параметров между ними могут быть взаимоприменимы.

Внимание! - Некоторые спорные настройки параметров видео libx264 может проигнорировать, выставив свои значения, посчитав их более адекватными профилю и уровню кодирования. Поэтому проверяйте параметры выходного видео самостоятельно, с помощью программы mediainfo. В особых случаях, когда ваш "спор" с libx264 не даёт никаких результатов, то видимо стоит оставить те варианты значений, на которых настаивает кодер. Также - некоторые значения и ключи могут быть взаимозависимы, и изменение или удаление некоторых параметров может дать возможность изменять другие ключи по вашему усмотрению. Всегда помним, что значения "рекомендуемые" или "по умолчанию" - не значит "идеальные", большинство функций устанавливается методом подбора. Смотрите так же - предполагаемая будущая рекомендация ITU-T и проект стандарта ISO/IEC по сжатию видео wiki-H.265

Ключ Описание По умолчанию
Main Option - Основные опции
-x264-params Позволяет задействовать параметры синтаксиса из кодека libx264, для более старых версий ffmpeg пробуйте < -x264opts >

Пример: < -x264-params no-fast-pskip=1 > тоже самое средствами ffmpeg < -fast-pskip 0 > Пример установки группы параметров: -x264opts no-dct-decimate=1:deadzone-intra=8:deadzone-inter=16:colorprim=smpte240m:transfer=bt709:colormatrix=GBR

-b <integer> ABR - Average BitRate. Установка базового (усреднённого) битрейта. Может оказаться лучшим компромиссным вариантом между CRF и CQP(QP) освещённых ниже в таблице. Для интернет-роликов и рипов с разрешениями по вертикали: ...x352, ...x400, ...x480 - оптимален **минимальный** битрейт < -b 1000-2000K >. Для HD-video 1280x720 < -b 2500 - 3500K >, для Full-HD 1920x1080 < -b 5500 - 6000K > - см. Расчёт минимального битрейта. Для полного качества и максимального битрейта см. wiki-H.264 в разделе страницы "Уровни".

Использование алгоритма CABAC позволяет сократить битрейт до 50-55% от битрейта оригинального видео, с которого делается Rip. Например максимальный битрейт файлов DVD-MPEG-2-720x576 это - 8000Кб/с. Использование CABAC позволяет сократить битрейт до 4000-4500Кб/c без потери в качестве (см. ниже в графе -coder)

-crf <10.0-51.0> Constant Rate Factor - Постоянный Коэффициент Потока. Сжатие кадров с учётом движения, где сцены движения кодируются с меньшим качеством, чем статичные сцены, что субъективно приводит к восприятию, как качественного, ибо визуально человек различает больше деталей в неподвижных объектах, чем в движущихся. Вопреки заявлениям о постоянстве визуального качества метода crf по всей видеопоследовательности, - результаты применения crf могут оказаться не вполне предсказуемы на некоторых типах видео, включая очень динамичные видео. А именно визуальное качество сверхдвижущихся быстрых сцен в купе с изменениями перспективы (увеличение-приближение-удаление), может оказаться не в полне удовлетворительным для привередливого пользователя. Подобные недостатки можно компенсировать другими настройками x264, например ответственных за качество и точность движения, или попыткой использования ABR (см. выше). Чем больше значение, тем ниже качество. Видео сжатое методом CRF может оказаться несколько меньше по размеру, чем сжатое методом CQP. Разумный диапазон: <18.0-26.0> Не работает с функцией < -b >
-crf_max <float> В режиме CRF предотвращает переменный битрейт от снижения качества за заданной параметром точкой
-qp <1-51> Quantization Parameter (Constant Quantization Parameter - CQP). Метод Постоянного Параметра Квантизации - когда видео кодируется с фиксированным значением (размерами) квантизёра (кванта, точки). В сравнении с CRF, - этот метод меньше сжимает области движения, которые большинство не замечает при просмотре, что приводит к несколько большему размеру файла, чем вслучае с CRF. Но тип качества QP менее субъективен и более реален, чем в случае с CRF. Чем больше значение, тем ниже качество. Разумный диапазон: 18-26. Не работает с функцией < -b >
-pass <1,2,3> Установка номера прохода, при многопроходном кодировании
-fastfirstpass <integer> Быстрый первый проход
-stats <string> Установка файла статистики при первом проходе кодирования, для использования во втором проходе при многопроходном (n-pass) кодировании. Если в параметрах ffmpeg задать эту опцию пустой, без значения, - просто: < -stats >, то имя файла будет сгенерировано автоматически.

Установка опции средствами x264: < x264opts stats=stats.log >

-profile <string> Выбор профиля ограничений-разрешений видео. Основные профили:

<baseline> - низкое качество, без CABAC, без адаптивного 8x8dct, weightp=0.

<main> - нормальное качество, но без адаптивного 8x8dct.

<high> - высокий профиль, без ограничений на функции.

<high422><high444> - смотрите wiki-Цветовая субдискретизация

Профиль может устанавливаться автоматически, анализируя тип ваших настроек, для этого не задавайте ключ и параметр.

-level <10-51> Задаем уровень сложности AVC - Где 10 = 1.0, 51 = 5.1. Смотрите так же wiki-H.264 в разделе страницы "Уровни".

Все уровни: 1, 1.1, 1.2, 1.3, 2, 2.1, 2.2, 3, 3.1, 3.2, 4, 4.1, 4.2, 5, 5.1

Для мобильных устройств обычно не выше чем 3.1

Уровень может устанавливаться автоматически, анализируя тип ваших настроек, для этого не задавайте ключ и параметр.

-sar <1:1> Sample Aspect Ratio (SAR). Установка Образцового Коэффициента Соотношения Сторон. < -sar 1:1 > - значение по умолчанию. Если вы определяете параметры вашего видео c помощью опции < -s >, то вам достаточно оставить значение <1:1>. Но бывают случаи когда надо растянуть изображение с полноморфного 4:3 до 16:9 без потери разрешения, тогда эта опция будет незаменима. Большая часть плейеров поймет это и в контейнере avi, и в mkv. Если выходное изображение размером 720x576 аспекта 4:3 выглядит у вас сплюснутым с боков и на мониторе 4:3 с боков добавляются чёрные поля, то попробуйте выставить sar значением 4:3. Пример: -sar 4:3 -aspect 4:3 1:1
-aspect <string> Displey Aspect Ratio (DAR). Установка Дисплейного Соотношения Сторон Кадра. Выставляем по типу кадра кодируемого видео.

Пример: -aspect 16:9 1280/720=16/9=1,78 или -aspect 4:3 640/480=4/3=1,33.

Если у вас на входе экзотические широкоэкранные аспекты типа 2.35 или 2.40 - то они должны быть встроены в 16:9 с добавлением чёрных полей, ибо некоторые плейеры понимают только аспекты 16:9 и 4:3. Размер аспекта вычисляется по коэффициенту соотношения сторон - если аспект видео 16:9 - то это буквально 16:9=1,78 - где 1,78 - коэффициент. Расчёт ведётся по схеме: горизонтальное разрешение видео делим на коэффициент 720/1,78 = 404,5 - это примерный размер вертикали аспекта. Для полной точности его надо округлить до кратного 16-ти или 8-и. Для этого делим 404,5/16 = 25,28 .. округляем до 25 и умножаем опять на 16, получаем 400 - которое делится и на 16 и на 8. Та же схема касается и горизонтального размера аспекта. Это стандартный размер видео SD разрешения 720x400 c аспектом 16:9. Для частных случаев могут применяться 16:9 размеры SD видео: - 768x432 и 856x480. Или 800x448 для экрана 7 дюймов.

-vf <filter> Включение функции добавления видеофильтров из списка Filtering Guide или подробнее с примерами FFmpeg-filters
-vtag <tag> Установка тега FourCC для видео. Опция для принудительной установки тега, если есть на то необходимость. Например Xvid и DivX - являются реализациями MPEG-4 ISO/IEC стандарта, Но, есть много других кодеков, которые используют этот же стандарт. Кодек < -vcodec mpeg4 > по умолчанию использует тег "FMP4". Если же вы хотите изменить это, то задайте свой вариант, но учитывая совместимость тега и используемого кодека. Некоторые варианты: h264, x264, avc1, vssh, xvid, divx. Бывает необходимо для правильного распознавания файла "железными" плейерами. avc1
Analysis & Encoding - Параметры типа кадров По умолчанию
-g <integer> GOP, максимальный интервал между ключевыми кадрами (оптимально не более 100, и не более 12-15 для mpeg2video). При 25fps, < -bf 2 > и с закрытым GOP, значения будут: -g 25, 40, 55, 70, 100. По умолчанию используется значение 250, которое как считают разработчики подходит для большинства вариантов, хотя на деле это лучше проверять опытным путём. Так же могут использоваться десятикратные значения фреймрейта, т.е. для 24(23.976)fps - 240; для 25fps - 250; для 30(29,970)fps - 300, keyint_min (минимальный интервал ключевых кадров) при этом должен соответствовать фреймрейту входного видео (24, 25, 30). Если же у вас очень динамичное видео с резкой и частой сменой освещения, то вам больше подойдёт первый вариант < -g > не более 100, -keyint_min 4 или 5. Функции < -g > и < -keyint_min > являются дочерними и их лучше использовать в паре. Значение < -g > так же влияет на предпросмотр файла в плейере, ибо предпросмотр начинается с I-кадра. Из этого следует, что шаг предпросмотра для видео с значениями < -r 25 -g 25 > (25 кадр/сек) будет равен 1 сек. При значениях < -r 25 -g 100 > - 4 сек.
 Значения для рипов статичного видео (по умолчанию): -r 25 -g 250 -keyint_min 25 
 Значения для рипов динамичного видео: -r 25 -g 100 -keyint_min 4 или 5 
 Значения для привередливого пользователя: -r 25 -g 40 -keyint_min 4 

GOP равный фреймрейту и с минимальным keyint_min 4 - устанавливается, если вы создаёте "оригинал-рип" с BlueRay или DVD, с соответствующим видео битрейтом и полным сохранением качества, - (на полку).

250
-flags cgop Установка открытой GOP, чтобы использовать точки восстановления для закрытия GOP. Эта функция требует установки -sc_threshold равным 1000000000. Пример: < -sc_threshold 1000000000 >
-bf <1-3> Задаем количество В-фреймов "В-кадров" (оптимально - 2 B-кадра: минимальный закрытый GOP (keyint_min) - "IBBP" - 4 кадра)

Значение от <3> и выше(!), выбирается исключительно редко, когда эффект сжатия важнее чем качество видео на выходе. Не забываем так же, что B-кадр имеет около 30% качества от качества оригинального I-кадра. P-кадр весит порядка 70% от I-кадра

3
-b_strategy <0-2> Адаптивный B-кадр. Позволяет x264 адаптивно решать, где будут использоваться B-кадры, уменьшая количество B-кадров там, где это не нужно. <0> - сверхбыстрый режим (не рекомендован), не работает с опцией sc_threshold. <1> - быстрый режим, компромисс между скоростью и качеством. <2> - режим точности обработки B-кадров (качество), может заметно замедлить скорость кодирования если у вас более двух B-кадров. В некоторых случаях рекомендуют выключать, для совместимости с устройствами типа КПК, телефоны и пр.: < -x264-params -no-b-adapt > 1
-b-pyramid <none,strict> Использует B-кадры, как референсные - т.е. позволяет B-кадрам быть связанными между собой, увеличивая эффективность использования двух или более B-кадров. Опция имеет смысл если вы используете более одного В-кадра.
-direct-pred <integer> B-frames MV prediction. Определяет тип предсказания движения (метод нахождения векторов), используемого для B-макроблоков. Оптимальным для всех режимов будет <spatial>. Из других источников <spatial> и <temporal> приблизительно равны по скорости и psnr, но <temporal> часто выглядит лучше. <temporal> не совместим с interlace. Значения: <none>, <spatial>, <temporal>, <auto>. <Auto> может вызывать проблемы.
-weightb <integer> Weighted prediction for B-frames. Взвешенное предсказание для B-кадров. Позволяет "взвешивать" ссылки на B-кадры, управляя таким образом тем, - на сколько каждая ссылка будет влиять на предполагаемое изображение. <0> - выключено, <1> - включено
-weightp <integer> Weighted prediction analysis method. Взвешенное предсказание метода анализа для кадров. Значения: <none>, <simple>, <smart>

Рекомендуется "умное" значение < -weightp smart >

-bframebias < -100 - 100> Уровень преобладания B-кадров. Лучше оставить значение по умолчанию. 0
-fast-pskip <0,1> Быстрый пропуск определения P-кадров повышает скорость, но может вызвать небольшую блочность в местах, где есть непрерывная цветовая гамма или лёгкий градиент (тёмные сцены или небо). <0> - выключено, <1> - включено. Включён по умолчанию. 1
-sc_threshold <integer> Чувствительность смены сцен. Порог обнаружения смены сцены в кадре - для вставки принудительного ключевого кадра.

Даёт хорошие результаты, если GOP и < -sc_threshold > равны между собой и равны 40 или 50. Разумный диапазон от 40 до 50.

40
-rc-lookahead <integer> Определяет количество кадров предпросмотра вперёд, для определения типа кадра и управления величиной потока. Обычно опция устанавливается автоматически при кодировании, величине равной < -sc_threshold >. Лучше не задавать этот параметр и отдать его на "съедение" кодеру, если нет на то особой необходимости
Analysis & Encoding - Анализ кодирования По умолчанию
-dct8x8 <0,1> Включение Адаптивного метода DCT-преобразований - умное использование преобразований 8x8 в I-кадре.

wiki-Дискретное косинусное преобразование. Для функции требуется < -profile high > (см. в графе profile)

1
-partitions <string> Дочерняя функция для < -dct8x8 >. Разрешает производить дополнительный поиск размеров макроблоков, увеличивая эффективность кодирования и качество, но уменьшая скорость. FFmpeg использует только: i4x4, i8x8, p4x4, p8x8, b8x8
-refs <1-16> Задаем количество рефреймов "референсных кадров". Разумный предел от 3 до 5 при отличном источнике. Максимальная опция - 16 кадров, но выше чем 8-12 уже перестаёт давать видимые результаты, рекомендовано только для видео с качеством от среднего и ниже. 3
-mixed-refs <integer> Одна ссылка на раздел (partition 8x8), в отличие от одной ссылки на макроблок. Смешанное взаимодействие референсных кадров.

Отключение < -mixed-refs 0 > или средствами x264 < -x264-params no-mixed-refs=1 >. <0> - выключено, <1> - включено

1
-me_method <hex,umh,full> Motion Estimation Method - выбираем Метод Оценки Движения полного пикселя. Подробнее x264 Оптимально для качества - umh. Значение <full> (esa) - если вы хотите скорректировать глюки движения этим способом. <full> не совместим с interlace. Так же смотрите одноимённую графу для кодеков семейства MPEG-4 ISO/IEC hex
-me_range <integer> Motion Estimation Range - выбираем Диапазон Оценки Движения, который определяет максимальное количество попыток (с измененными данными) нахождения оптимального варианта при поиске вектора движения макроблока. Чем больше, тем лучше качество. Значения 16 обычно достаточно для SD видео и 24 для HD видео, при условии отсутствия в видео сложных сцен движения, которые лучше кодировать с большими значениями - 32 или 64 (макс. значение). Желательно использовать значения кратные 4-м. Для umh, esa и tesa, увеличение me_range значительно замедлит кодирование. Для dia и hex допустим минимальный диапазон значений от 4 до 16. Для umh, me_range задает не количество итераций (попыток) как для предыдущих алгоритмов me_method, а радиус в пикселях, в пределах которого будет искаться пиксель - подробнее x264 Значение me_range так же зависит от частоты кадров исходного видео - для меньшего fps требуются большие значения range. В параметрах кодека x264 есть ещё один схожий параметр <mvrange> управляющий размером вектора движения в пикселях, но этот параметр "вшит" в кодер и меняется автоматически от заданного значения уровня < -level >, обычно для -level 3.1 mvrange=512. 16
-subq <0-9> Задаем сложность оценки подпикселя. Более высокое значение соответствует более высокому качеству.
 0 - FullPel    - Full Pixel Motion Search Precision (не рекомендуется)
 1 - QPel SAD   - Quarter Pixel Motion Search Precision SAD (1/4 пиксельный метод поиска в режиме SAD, один проход)
 2 - QPel SADT  - Quarter Pixel Motion Search Precision SADT (1/4 пиксельный метод поиска в режиме SADT, один проход)
 3 - HPel+QPel  - HalfPel (полупиксельный) метод поиска для всех MB - макроблоков, QPel для лучшего макроблока.
 4 - QPel+QPel  - QPel для всех типов кадров
 5 - QPel+BiME  - Больше проходов QPel, оценка движения (Motion Estimation)
 6 - RD on I/P  - Режим RD (Rate Distortion) для I,P-кадров
 7 - RD on all  - Режим RD (Rate Distortion) для всех кадров
 8 - RDr on I/P - Улучшенный Режим RD (Rate Distortion Refinement - RDr) для I,P-кадров
 9 - RDr on all - Улучшенный Режим RD (Rate Distortion Refinement - RDr) для всех кадров
6
-cmp <integer> Chroma Motion Estimation (Point). Точечная функция оценки движения по цветности. Анализ движения (поиск векторов движения) не только по яркостной но и по цветовой составляющей. Если видео не имеет цветового шума и не является черно-белым, то рекомендуется эту опцию включить. Для чёрно-белых видео и видео с шумящим цветом, можно попробовать отключить эту опцию < -cmp 7 >. Значение по умолчанию - включено < -cmp sad > < -cmp 0 >. Если не задать этот параметр, то кодер выставит его автоматически на основании анализа видео. Возможные варианты смотрите ниже, в таблице для кодеков семейства MPEG-4 ISO/IEC. 0
-nr <integer> Включение уровня шумоподавление видео
-deblock < alfa:beta > Включение фильтра подавления блочности. Полный диапазон от -6 до 6. Разумный диапазон от -3 до 3. Отрицательные значения являются обратным действием действию замыливания картинки и приводит к некоторому увеличению детализации, но с риском увеличения блочности или "москитного шума" - этот эффект применяют для сильно замыленных видео или для сосредоточения алгоритма на сохранении детализации и контуров. Выше чем 3 подавление блочности может привести к сильному эффекту замыливания картинки и ошибочному определению некоторых деталей изображения как блоков. Не работает с 4:4:4 цветовым профилем. Состоит из двух значений: alfa - определяющий силу подавления блоков. beta - задающий точность определения блоков. При изменении параметра alfa, нужно изменить и параметр beta. Желательно чтобы оба параметра были либо отрицательными, либо положительными. По некоторым мнениям, значение beta должно быть на единицу ниже, чем значение alfa - но проверяйте это опытным путём. Рекомендуемое значение < -deblock 3:2 > 0:0
-coder <0,1> Включаем или отключаем использование CABAC. CABAC - техника сжатия без потерь для получения более высокой степени сжатия чем большинство алгоритмов, которые доступны в кодировании видео. Является одним из основных преимуществ кодека x.264 MPEG-4 ISO/AVC. CABAC поддерживается только в основном (Main) и более высоких профилях кодека. Рекомендован для Включения. <0> - выключено, <1> - включено 0
-trellis <0,1,2> Задаем значение треллис wiki-Треллис-квантование <0> - выкл. <1> - на P,B кадрах. <2> - на всех кадрах. При значении <2> может замыливать картинку 0
-psy <integer> Включение психовизуальной оптимизации. <0> - выключено, <1> - включено
-psy-rd <string> Установка значения психовизуальной оптимизации в формате: <psy-rd>:<psy-trellis>.

RDO - Rate–Distortion Optimization - Сигнал-Шум Оптимизация. Позволяет экономно, с точки зрения битрейта, закодировать шумы видеоряда и значительно повысить детализацию изображения. Для включения опции необходимо, что бы < -subq > был больше, или равен 6. Значение <0> уменьшает детализацию и зернистость изображения, <1> повышает детализацию и зернистость изображения.

Psy-Trellis - сила Trellis квантования (экспериментальная функция) - работает при включённом CABAC и < -trellis >. Позволяет "отвоевать" некоторую детализацию и полезный шум, замазанный < -trellis >. Значения: <1> - для сверхнизких битрейтов. <0.8-1.0> - для средних битрейтов. <0.1-0.8> - для высоких. Используйте эти опции методом подбора и с большой осторожностью, ибо есть риск изуродовать видео.

1.00:0.00
Rate Control - Управление потоками и Другое По умолчанию
-qmin <integer> Минимальный квантизер. Минимально возможные значения <0>, <1> - хороши для детализации. <3> - для фильтровки дисперсного шума. 2
-qmax <integer> Максимальный квантизер. Максимально возможное значение <69>, - по умолчанию для ffmpeg 69
-qdiff <integer> Максимальный шаг квантизера - предел разницы величины квантизёра между соседними кадрами. Минимальное значение означает минимальную разницу в отклонении величины квантизёра. Можно выставить значение <1>, но libx264 будет использовать минимальное значение <2>. Минимальное значение даёт хорошие результаты чёткости, если у вас отличный источник, типа высококачественного DVD, Blue Ray или предварительно разжатый Full HD. В остальных случаях хорошо значение по умолчанию. Лучше подбирать опытным путём или оставить без изменений. 4
-i_qfactor <float> Коэффициент соотношения качества между I и P кадрами. I-кадр=100% качества. 100%/1,40=71%. При значении 1.10 (91%) даёт более резкую картинку за счёт увеличения качества P-кадров. Оптимально значение по умолчанию <1.40> 1.40
-b_qfactor <float> Коэффициент соотношения качества между P и B кадрами. По аналогии выше берём качество P-кадра в процентах 71%/1,30=55% и получаем процентно-относительное качество B-кадров 1.30
-chromaoffset <integer> Кривая разницы между цветностью и яркостью. Оптимальный рабочий диапазон от < -3 > до < 3 >. Разумный диапазон от < -6 > до < 6 >. Полный диапазон от < -12 > до < 12 > Отрицательное значение ближе к яркости. Положительное ближе к цветности. Чем ближе к крайнему значению, тем меньше заметны изменения. Рекомендуется значение по умолчанию, т.к эта опция служит для особых целей. 0
-qcomp <integer> Уровень кривой сжатия. Соотношение между сценами с высоким битрейтом и сценами с низким битрейтом, для оценки статичных и динамичных сцен. <0.0> - для ABR-CBR, <1.0> - для QP. Рекомендуется значение по умолчанию: < -qcomp 0.60 > 0.60
-cplxblur <float> Оценка сложности временного сглаживания до изменения сцены (кадров). Задействуется только при двухпроходном кодировании, во втором проходе. Более низкие значения этого параметра позволяют квантизёрам более резко изменятся при усложнении или упрощении сцены. Более высокие значения заставляют квантизёры меняться более плавно. 20.00
-qblur <float> Задействуется только при двухпроходном кодировании, во втором проходе. Данный параметр похож на предыдущий но означает уровень размытия квантизёра. 0.50
-bt Битрейт толерантность. Предел отклонения от заданного битрейта. По умолчанию - 1% 1
-bufsize <integer> Установка размера буфера для VBV - зависит от профиля и уровня кодирования. Нужно если вы кодируете для устройства
-maxrate <integer> Указывает максимальный битрейт при переменном битрейте видео(VBV). Работает при установленном размере буфера
-threads <integer> Включение обнаружения колличества потоков видео. Выбор колличества потоков числом более 16 не рекомендовано разработчиками ffmpeg. Значение 8 даёт не плохие результаты, но нагружает процессор. В некоторых случаях будет лучше оставить значение по умолчанию и отдать определение числа потоков кодеру < -threads auto >
-thread_type <flags> Выбор типа многопоточности(мультивыборки). Дачерняя функция для функции < -threads >. Установка фрагментов "slice" мультивыборки многопоточности для использования вместо кадровой мультивыборки, - или наоборот. Значения: мультивыборка фрагментов(частей) <slice>; кадровая мультвыборка <frame>
-aq-mode <integer> Включение AQ метода. Производит перераспределение битрейта для снижения или повышения детализации сцен. <none> - выключен.

<variance> - (VAQ) разрешает AQ для перераспределения битов в каждом кадре. <autovariance> - (autoVAQ) - авто, разрешает распределение битов по всему видео (эксперементальная функция)

-aq-strength <float> При включённом < -aq-mode variance > устанавливает силу AQ для подавления блочности и размытия на "плоских" и текстурированных областях. Разумный диапазон от 0.5 до 1.5 - чем ниже значения, тем выше детализация и, соответственно искажения. Верхний порог ближе к замыливанию картинки. Значение 0.5 рекомендуют для кодирования мультфильмов и анимации, но лучше проверить это опытным путём. 1.0
Presets По умолчанию
-preset <string> Выбираем прессет (Смотрите ниже в разделе Прессеты)
Ключи параметров ffmpeg для других кодеков формата mpeg-4

Ключи параметров для кодека MPEG-4 ISO/IEC < -vcodec mpeg4 >. Так же могут быть совместимы с другими кодеками стандарта MPEG-4 - DivX, XviD, Quicktime. Некоторые из ключей могут быть применимы для x264.

Ключ Описание По умолчанию
**-flags <flag>** Установка команд-флагов для FFmpeg. Флаги - это команда за которой следует один пробел, а затем все возможные значения-флаги со знаками плюс < + > или минус < - >, которые перед каждым из флагов указывают на активность (включение) или неактивность (выключение) флага-значения. Просмотреть подробнее о флагах FFmpeg можно здесь FFMPEG_An_Intermediate_Guide - Flags
-flags +aic Advanced intra coding (H.263+) - Расширенная кодировка Intra-кадров (I-кадров) с матрицей квантования H.263+ (MPEG-4 only)

По умолчанию для кодеков Xvid, DivX и Mpeg4 используется простая матрица H.263. < -flags +aic > не работает с опцией < -mpeg_quant 1 >, которая включает матрицу квантования mpeg. О матрицах квантования смотрите ниже, в разделе о MPEG-2

-flags +aiv Alternative inter coding VLC (H.263). Использование альтернативной VLC H.263 матрицы квантования для Inter-кадров (P,B кадров).
-flags +alt Включить альтернативную таблицу сканирования для MPEG-2, MPEG-4 кодеков
-flags +mv4 Разрешаем использование четырех векторов поиска движения (MPEG-4 only)
-flags +qpel Поиск движения с точностью до четверти пикселя (MPEG-4 only). Этот параметр создаёт своего рода компенсацию движения макроблоков за счёт использования 1/4 пиксела. Задействовать или не задействовать qpel зависит от динамичности фильма. В динамичных фильмах эта возможность позволит уменьшить размер и сделать движения макроблоков более естественными. Если же картинка преимушественно статичная - qpel только увеличит время кодирования, не оказав видимого влияния на результат. Источники рекомендуют использовать qpel для видео с высоким bitrate - от 1600К и выше, если оригинальное изображение чистое и имеет соотношение сторон 16:9. Крайне не рекомендовано использовать эту возможность для создания рипов с шумного, зернистого оригинала, с низким потоком - от 1600К и менее , ибо кодек будет игнорировать значения точности расчётов, а если и не будет игнорировать, то это только увеличит размер выходного файла, без существенного влияния на его качество.
-flags +mv0 Сжимает каждый макроблок без движения, на основании чего выбирет лучший. На малоподвижных сценах может сэкономить немало битов. Всегда пробуйте mb вместе с mv=<0,0>
-flags +qprd Использовать оптимизацию соотношения сигнал-шум (rate distortion) для qp (quartet-pixel - четвертьпиксельного алгоритма). Требует включённого mbd значением не ниже, чем < -mbd 2 >. Флаг QPRD может не работать c некоторыми кодеками и энкодерами в последних версиях FFmpeg, в этом случае пробуйте заменить его на < -mpv_flags +qp_rd >
-flags +gmc Global Motion Compensation. Включение глобальной компенсации движения
-flags +umv Unlimited Motion Vectors. Включить использование неограниченных векторов движения.
-flags +chroma Включаем хрома (цветовую) оптимизацию
-flags < -loop/+loop > Отключение/Включение фильтра подавления блочности
-flags < -psnr/+psnr > Отключение/Включение расчета psnr. Отключение, немного, увеличит скорость кодирования
-flags cgop Установка открытой GOP, чтобы использовать точки восстановления для закрытия GOP. Эта функция требует установки -sc_threshold равным 1000000000. Пример: < -sc_threshold 1000000000 >
**-mpv_flags <flag>** Флаги общие для всех основных MPEG-Video энкодеров: flv, h261, h263, h264, mpeg1,2video, mpeg4. Возможные значения перечислены ниже
-mpv_flags +skip_rd Остаточный пропуск RD (rate distortion) для оптимального уровня MB (macroblock). Рекомендовано пробовать для качества
-mpv_flags +strict_gop Строго соблюдать размер GOP
-mpv_flags +qp_rd Использовать оптимизацию соотношения сигнал-шум (rate distortion) для qp (quartet-pixel - четвертьпиксельного алгоритма)
-mpv_flags +cbp_rd Использовать оптимизацию соотношения сигнал-шум для CBP. CBP - параметр, который более тщательно рассчитывая искажения полученных блоков, находит не только искажения блоков, но и динамики потока. Требует включённой опции < -trellis >
**-cmp** Chroma Motion Estimation (Point). Точечная функция оценки движения по цветности. Анализ движения (поиск векторов движения) не только по яркостной но и по цветовой составляющей. Если видео не имеет цветового шума и не является черно-белым, то рекомендуется эту опцию включить. Для чёрно-белых видео и видео с шумящим цветом можно попробовать отключить эту опцию < -cmp 7 >. Значение по умолчанию - включено < -cmp sad > < -cmp 0 >. Если не задать этот параметр, то кодер выставит его автоматически на основании анализа видео. Если вы нуждаетесь установить эту опцию вручную, для специфических случаев, то перечень возможных параметров указан ниже. 0
-cmp sad сумма абсолютных разностей, цифровое значение <0>
-cmp sse сумма ошибок квадратов, цифровое значение <1>
-cmp satd сумма абсолютных преобразованных разностей Адамара, цифровое значение <2> (приемлем, рекомендован для качества разработчиками ffmpeg, цифровое значение < -cmp 2 >)
-cmp dct сумма абсолютных преобразованных разностей DCT (дискретно-косинусного преобразователя) приемлем, цифровое значение <3>
-cmp psnr cумма ошибок квадратного квантования (крайне не рекомендуется, низкое качество)
-cmp bit число битов, необходимых для блока, цифровое значение <5> (приемлем)
-cmp rd уровень начала искажений - rate distortion - оптимальное соотношение сигнал-шум, цифровое значение <6> (медленно, приемлем)
-cmp zero 0
-cmp vsad сумма абсолютных вертикальных разностей
-cmp vsse сумма квадратов вертикальных разностей
-cmp nsse сохраняющая шум сумма квадратов разностей
-cmp w53 5/3 вейвлет, ограниченное использование для частных случаев
-cmp w97 9/7 вейвлет, ограниченное использование для частных случаев
-subcmp 1
-precmp Препроход анализа движения по цветности. Разновидность значений смотрите выше в графе -cmp 1
-mbcmp Функция сравнения макроблока (по умолчанию). Разновидность значений смотрите выше в графе -cmp 1
-mbd Macroblock Decision. Алгоритм принятия решения о макроблоке (высокое качество, заменяет функцию -mbcmp, значение: < -mbd rd > ). Разновидность остальных значений смотрите выше в графе -cmp
-ildctcmp Функция чересстрочного (интерлейсного) DCT сравнения. Возможные значения смотрите выше, в графе cmp
**-dct** Включение алгоритма DCT. Оптимальные значения: <auto>,<mmx>,<faan>. Где faan - это AAN DCT с плавающей точкой auto
-idct Select IDCT (Inverse Discrete Cosine Transform). Выбор реализации IDCT (обратного дискретно-косинусного преобразования): <auto>, <simplemmx>, <libmpeg2mmx>, <h264>, <xvidmmx>, <faani> auto
-dc Intra Digital Center Precision. Точность цифрового центра внутреннего косинусоидального преобразования DCT.

Возможные значения 8;9;10 - пример: < -dc 9 >. Используется при кодировании в MPEG-2 и MPEG-4

-me_method Алгоритмы оценки движения. Оптимальное значение для MPEG-2,4 только epzs: < -me_method epzs >. Возможные значения:
 zero  - нулевая оценка движения (не рекомендуется)
 log   - логическая оценка движения
 phods - phods оценка движения
 x1    - x1 оценка движения
 iter  - iter оценка движения
 epzs  - простейший поиск пикселя кадра, до соседних пикселей в соседнем кадре, - выше, правее, ниже, левее (MPEG-2,4)
 dia   - псевдоним для epzs (MPEG-2,4)
 hex   - hexagon (шестиугольник) - подобная epzs стратегия, но использует 6 окружающих точек (x264)
 umh   - multi hex (неравный мультишестиугольник) - медленнее чем hex, способен найти сложные векторы движения (x264)
 esa   - exhaustive (исчерпывающий) - интеллектуальный поиск по всей области векторов движения, псевдоним для full (x264)
 full  - полная оценка движения, тоже что и esa (x264)
-me_range <integer> Диапазон поиска векторов при анализе движения. Зависит от частоты кадров исходного видео (для меньшего fps требуются большие значения range). Из шаблона Main Concept, для кодека <mpeg4> актуально значение < -me_range 64 >. Подробнее смотрите выше, в таблице для x264
-chroma_elim_threshold Порог отбрасывания одиночного коэффициента цветности (включая отрицательные значения). Коррекция цветности (целое) 0
-luma_elim_threshold Порог отбрасывания одиночного коэффициента яркости (включая отрицательные значения). Коррекция яркости (целое) 0
-qscale Задаем статический кванталайзер. Иногда для конкретизации требуется ввести для видео: < -q:v "значение" > пример < -q:v 1 >
-b_strategy Стратегия выбора I/P/B кадров. 0 - выключено, 1 - включено. Заметьте, что параметры этой опции в MPEG-4 ISO/IEC и MPEG-2 отличаются от параметров использования этой же опции в x264
-mpeg_quant Выбор матрицы квантования mpeg, - не совместимо с < -flags +aic >, значение: < -mpeg_quant 1 >
-bf <1-3> Задаем количество В-фреймов
-trellis <0-2> Задаем уровень треллис квантования. Повышает сжатие. \\ <0> - выкл. <1> - на P,B кадрах. <2> - на всех кадрах. При значении <2> может замыливать картинку 1
-vtag <tag> Смотрите выше, в таблице для кодека x264 FMP4
Параметры ffmpeg для формата mpeg-2
  • Для кодирования в MPEG-2 могут подойти некоторые параметры из таблицы кодеков семейства MPEG-4. Для наглядности, вот вам стандартная строка для кодирования в MPEG-2 c закрытой GOP-структурой, переменным битрейтом, постоянным высоким качеством и адаптивно-дефолтной ffmpeg-матрицей квантования, - пригодная для двухслойной DVD-заготовки:
-ffmpeg -i /home/usr/video/video.avi -c:v mpeg2video -vf format=yuv420p -sar 1:1 -s 720x576 -aspect 16:9 -q:v 1 -b:v 8000K -minrate 8000K -maxrate 8000K -r 25 -g 13 -bf 2 -b_strategy 1 -keyint_min 4 -flags cgop -sc_threshold 1000000000 -mpv_flags +skip_rd+qp_rd+cbp_rd -dc 8 -mbd rd -cmp 2 -subcmp 2 -me_method epzs -c:a ac3 -ac 6 -ab 384K -ar 48000 /home/usr/video/video.mpg

Для расчёта битрейта видео файла под определённый тип DVD диска (4Gb, 8Gb) можно воспользоваться онлайн ссылкой bitrate_calculator. Или же воспользоваться подобной функцией в программе Avidemux.

Максимальным битрейтом для MPEG-2 будет: 8000 Kb/s для ABR (average bitrate) и CBR (constant bitrate) режимов. Для VBR (variable bitrate), переменного битрейта - значения варьируются в пределах от 1500 Kb/s до 9200 Kb/s, соответственно заданным параметрам: -minrate 1500K -maxrate 9200K -b 5000K. Значение < -b > должно соответствовать размеру файла и диска, на который вы хотите отправить данное видео (файл). Установка < -maxrate 9200K > допустима, если вы используете в файле видео аудиокодек ac3. При использовании аудиокодека mp2 MPEG-1 Audio Layer II, < -maxrate > лучше устанавливать не более 8000K. По умолчанию битрейт MPEG-2 файлов не велик и ffmpeg кодирует их по своей стратегии, обычно не выше 3000 Kb/s - но повлиять на эти значения можно установкой ключей: < -qmin >, < -qmax > или < -qscale >. Обычно, установка < -qscale 1 > даёт максимально возможный битрейт для данного типа кодирования. Избегайте использования ключа < -intra > для MPEG-2, иначе выходной файл у вас получится непригодным для использования на DVD, без предварительной перекодировки в совместимый с DVD формат.

Размер кадра для кодирования PAL-video всегда выставляйте 720x576, независимо от размера входного кадра, ибо соотношение сторон определяется функцией < -aspect >. При фреймрейте 30 кадр/сек, 30(29.970)fps NTSC - размер кадра нужно установить 720x480 во избежание ошибок определения типа видео декодерами.

Для кодирования mpeg2video так же могут подойти ключи и флаги: < -dc >, < qmin;qmax >, < -b_strategy >, < trellis >, < mbd >, < -mpv_flags +skip_rd+qp_rd+cbp_rd >

Но их, кроме < -dc >, < qmin;qmax > и < -b_strategy > - лучше использовать для средних и низких битрейтов. Значения < -b_strategy > в mpeg2video это: < 1 > - включено и < 0 > - выключено, что отличается от использования этой же опции в x264. Использование флага +qp_rd допустимо только при включённом mbd значением не ниже, чем 2. Так же при кодировании mpeg2video допустимо использование матриц распределения квантов, или проще - матриц квантования, примеры установки которых описаны ниже, включая информацию по ссылке.

  • Установка матриц квантования - Intra и Inter кадров для кодеков MPEG-2, MPEG-4, DivX, XviD... Ниже представлена дефолтная (Default) матрица квантования от известного и качественного кодировщика TMPGEnc. Стандартная матрица квантования MPEG-2 отличается от неё лишь тем, что все значения < -inter_matrix > состоят из числа 16.
(пример дан в столбцах лишь для наглядности, - можно написать всё в строчку, просто к верхней строке цифр добавляете более нижнюю и так до конца столбца)
-intra_matrix "8,16,19,22,26,27,29,34,
               16,16,22,24,27,29,34,37,
               19,22,26,27,29,34,34,38,
               22,22,26,27,29,34,37,40,
               22,26,27,29,32,35,40,48,
               26,27,29,32,35,40,48,58,
               26,27,29,34,38,46,56,69,
               27,29,35,38,46,56,69,83"
-inter_matrix "16,17,18,19,20,21,22,23,
               17,18,19,20,21,22,23,24,
               18,19,20,21,22,23,24,25,
               19,20,21,22,23,24,26,27,
               20,21,22,23,25,26,27,28,
               21,22,23,24,26,27,28,30,
               22,23,24,26,27,28,30,31,
               23,24,25,27,28,30,31,33"             
  • Крайне не рекомендовано использовать матрицы квантования при кодировании в x.264, который имеет свою адаптивную матрицу распределения квантов.
Ключи параметров FFmpeg для Аудио
Ключ Описание По умолчанию
Main Audio Option - Основные Аудио Опции
-ab <bitrate> Битрейт аудио. Пример: -ab 256k 64kbit/s
-ac <channels> Количество каналов. Пример: -aс 6 2
-ar <freq> Частота дискредитации. Пример: -ar 48000 44100Hz
-aq <0-100> Качество аудио. Пример: -aq 100
-vol <volume> Изменение уровня громкости аудио, где 256=normal. Пример: -vol 256
-af <filter> Включение функции добавления фильтров для аудио. Cмотрите ссылку в таблице x264 в графе < -vf >. Этот список так же можно вызвать командой в терминале: ffmpeg -filters или подробнее с примерами FFmpeg-filters. Опция (ключ) < -af > должна стоять в строке задачи после ключа < -acodec > (c:a), в разделе строки для ключей аудио, в противном случае аудио фильтр работать не будет.

Пример применения -af: ускорение темпа на 4%: < -af atempo=1.0427083 >. (точность растяжения <atempo> для перевода с 23.976 до 25 fps пока не достаточна, может это исправят в будущем, проверяйте в новых релизах).

Advanced Audio Option - Продвинутые Аудио Опции
-atag <fourcc/tag> Установка и изменение fourcc тега для аудио
-channel_layout <layout> Включение схемы распределения каналов для многоканальных аудиодорожек
-apre <preset> Установка указанного прессета для аудиодорожки
-aframes <number> Установка количества кадров аудио записи. Эта опция является псевдонимом с опцией < -frames:a >
Работа с аудио для видео
  • Расщепление многоканальной аудиодорожки фильма 5.1 на 6 каналов - 6 моно файлов, средствами FFmpeg. Для расщепления используется функция < -filter_complex > из раздела сайта справки FFmpeg-filters Filtergraph-description . Пример расщепления аудиодорожки с перекодированием в pcm.wav:
ffmpeg -i /home/usr/audio.ac3 -c:a pcm_s16le -filter_complex channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR] -map [FL] /home/usr/fl.wav -map [FR] /home/usr/fr.wav -map [FC] /home/usr/fc.wav -map [LFE] /home/usr/lfe.wav -map [SL] /home/usr/sl.wav -map [SR] /home/usr/sr.wav
  • Создание многоканальной аудио дорожки 5.1 из 6 моно файлов (каналов). Где цифры обозначают очерёдность каналов в исходной папке, по принципу - "как они лежат":

Input Stream #0.0 - fc.wav ... Input Stream #1.0 - fl.wav ... Input Stream #2.0 - fr.wav ... Input Stream #3.0 - lfe.wav ... Input Stream #4.0 - sl.wav ... Input Stream #5.0 - sr.wav

[wav @ 02533e00] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #0.0 : mono
Input #0, wav, from '/home/usr/audio/fc.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
[wav @ 02623120] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #1.0 : mono
Input #1, wav, from '/home/usr/audio/fl.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
[wav @ 02733980] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #2.0 : mono
Input #2, wav, from '/home/usr/audio/fr.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #2:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
[wav @ 027ecae0] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #3.0 : mono
Input #3, wav, from '/home/usr/audio/lfe.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #3:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
[wav @ 028448a0] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #4.0 : mono
Input #4, wav, from '/home/usr/audio/sl.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #4:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
[wav @ 028cd100] max_analyze_duration 5000000 reached at 5034667 microseconds
Guessed Channel Layout for  Input Stream #5.0 : mono
Input #5, wav, from '/home/usr/audio/sr.wav':
  Duration: 01:56:01.02, bitrate: 768 kb/s
    Stream #5:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
Output #0, wav, to /home/usr/audio/audio_out.wav

Каналы на выходе конфигурируются по следующей схеме: FL, FR, FC, LFE, SL, SR - и соответственно в строке задания 1.0\,2.0\,0.0\,3.0\,4.0\,5.0

ffmpeg -i /home/usr/fc.wav -i /home/usr/fl.wav -i /home/usr/fr.wav -i /home/usr/lfe.wav -i /home/usr/sl.wav /home/usr/sr.wav -c:a pcm_s16le -filter_complex join=inputs=6:channel_layout=5.1 -filter channelmap=1.0\,2.0\,0.0\,3.0\,4.0\,5.0 /home/usr/out51.wav
  • Изменение скорости воспроизведения аудиодорожки при переводе видео с 23,976 fps до 25 fps. Смотрите в разделе "Применение".
Демультиплексация средствами FFmpeg
  • Для демультиплексации многопотокового видеофайла используется функция < -map > для обозначения составных (stream)стрим-потоков, исходного файла с несколькими аудио дорожками. Для начала дадим команду <ffmpeg -i> для файла в терминале, чтобы извлечь информацию о всех потоках(stream) нашего видеофайла:
ffmpeg -i /home/usr/video/video.mkv
в результате находим нужные нам значения metadata:
    Metadata:
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default) (forced)
    Metadata:
    Stream #0:1(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default) (forced)
    Metadata:
      title           : DTS 5.1
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
    Metadata:
      title           : AC3 5.1
    Stream #0:3(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s
  • Далее формируем строку извлечения потоков в нужную нам директорию и запускаем её в терминале:
ffmpeg -i /home/usr/video/video.mkv -map 0:0 -c:v copy /home/usr/video/videostream.mkv -map 0:1 -c:a copy /home/usr/video/1-dts-rus -map 0:2 -c:a copy /home/usr/video/2-dts-eng -map 0:3 -c:a copy /home/usr/video/3-eng.ac3
  • Если вам нужно вытащить лишь одну дорожку, например аудио с перекодированием в RAW-формат, то это можно сделать так:
ffmpeg -i /home/usr/video/video.mkv -map 0:2 -c:a pcm_s16le -ac 6 /home/usr/video/2-eng.wav
Запись видео с экрана монитора средствами ffmpeg

Эту возможность так же называют, как - создание скринкастов, которая подразумевает захват видеосигнала происходящего на экране монитора. Скринкаст, буквально - отбросок экрана; отливка экрана. \\

  • Для захвата видео сигнала используется вывод графической подсистемы - X11grab. Состоит из опций:
-f x11grab   - графическая подсистема участвующая в записи видео сигнала
-i :0.0      - входное видео устройство - монитор 0. Так же позволяет задавать смещение от левого верхнего угла: < -i :0.0+100,100 > по 100 пикселей x,y
-s 1920x1080 - размер видеокадра захватываемого экрана - должен cоответствовать разрешению вашего монитора, либо с учётом смещения упомянутого выше.
-r 25        - фреймрейт захватываемого сигнала.
Опции кодирования видео сигнала (должно размещаться в конце строки) в синтаксисе ffmpeg, например:
-c:v mpeg4 -f avi -q:v 0 
В некоторых случаях опция < -f avi > позволяет избежать рассинронизации видео и аудио потоков, но не во всех
  • Для захвата аудио сигнала, нужно сперва определить или просто выставить, если вы уже знаете - тип аудио подсистемы и тип аудио устройства, которые будут участвовать в записи звука. Узнать тип устройства можно дав команду в терминале:
arecord -l
которая вам выдаст нечто следующее:
**** Список CAPTURE устройств ****
карта 0: PCH [HDA Intel PCH], устройство 0: ALC898 Analog [ALC898 Analog]

Номер устройства для аудио формируется по цифрам, - карта (card) и устройство (device), например :0,0 или :0,1. Так же можно оформить опцию как hw:0,0 - некоторые версии ffmpeg не поймут эту опцию без < **hw:** >. Знак запятая (не точка) в аудио девайсах - может быть обязателен для некоторых версий ffmpeg, иначе ffmpeg не поймёт и откажется работать со строкой. Если этот метод не сработает, то попробуйте поставить < -i default >, иногда это решает проблемы с определением устройства. Или используйте варианты обозначенные ниже.

Опция аудио подсистемы у вас будет своя, та которая задействована в системе. В случае неработоспособности этой опции, можно попытаться определить её методом подбора. Если в системе используется звуковой сервер PulseAudio, то опция должна выглядеть как: < -f alsa -i pulse >. Если без PulseAudio, то: < -f alsa -i /dev/dsp >

Возможные варианты:

-f oss -i /dev/dsp
-f alsa -i /dev/dsp
-f alsa -i pulse
-f alsa -i default

Опции для аудио:

-f alsa    - аудио подсистема на которой ведётся запись звука.
-i default - устройство аудио, которое участвует в записи звука.
-ac 2      - колличество каналов аудио.
Опции кодирования аудио сигнала (должно размещаться в конце строки) в синтаксисе ffmpeg, например:
-c:a pcm_s16le -ac 2 -ar 48000
  • Перечень всех поддерживаемых устройств и форматов вызывается командой:
ffmpeg -formats 2> /dev/null
  • Пример полной строки ffmpeg для записи скринкастов со звуком:
 ffmpeg -y -f alsa -i pulse -f x11grab -s 1920x1080 -r 25 -i :0.0 -vcodec mpeg4 -qscale 0 -f avi -acodec pcm_s16le /home/user/video.avi 

Чуть более подробно эта тема освещена здесь: [скринкастов (видео с рабочего стола)]

Прессеты FFmpeg
  • Прессеты хранятся в /usr/share/ffmpeg. Их перечень можно посмотреть через консоль, дав команду в терминале:
ls /usr/share/ffmpeg
  • Все прессеты - это текстовые файлы. Каждый из них можно просмотреть и даже изменить, а также создать новый, свой. Вот список стандартных прессетов:
baseline
faster
fast
ipod320
ipod640
lossless_fast
lossless_max
lossless_medium
lossless_slower
lossless_slow
lossless_ultrafast
main
medium
placebo
slower
slow
superfast
ultrafast
veryfast
veryslow
Применение

Для работы в видеоредакторах, например Avidemux, иногда бывает необходима предварительная распаковка (разжатие) видеофайла в uncompressed - raw-форматы, для более удобной и безошибочной работы с ними. Включая применение цветого субсемплинга для файла, в случаях если вы получаете - зелёный, чёрный или рябой экран при загрузке рав-файла в Avidemux. Ибо Avidemux не совсем корректно работает с рав-файлами имеющими RGB-цветность. Но хорошо понимает файлы с YUV, YV12, NV и прочими цветовыми профилями основанными на 4:2:2 и 4:2:0 типах цветности, см. - Цветовая субдискретизация

  • Разжатие видеофайла в Uncompressed:
ffmpeg -i /home/usr/video/movie.avi -vcodec rawvideo -acodec pcm_s16le /home/usr/video/movie_out.avi
  • Принудительное применение параметров входного цветового пространства rawvideo (полезно для совместимости с кодерами). Например libx264 может отказаться работать с yuv444p и потребовать 420p):
ffmpeg -i /home/usr/video/movie.avi -vf format=yuv444p(или 422p) -vcodec rawvideo -acodec pcm_s16le /home/usr/video/movie_out.avi
  • Разжатие видеофайла в Кодек Хаффмана:
ffmpeg -i /home/usr/video/movie.avi -vcodec huffyuv -acodec pcm_s16le /home/usr/video/movie_out.avi
  • Принудительное применение параметров входного цветового пространства huffyuv (полезно для совместимости с кодерами):
ffmpeg -i /home/usr/video/movie.avi -vf format=yuv422p(или 420p) -vcodec huffyuv -acodec pcm_s16le /home/usr/video/movie_out.avi
  • Параметры для закрытой GOP-структуры (closed gop) при кодировании кодеком mpeg2video в формат MPEG-2, с GOP-структурой на 13 и 15 кадров:
-vcodec mpeg2video -flags cgop -sc_threshold 1000000000 -g 13 -bf 2 -keyint_min 4 (или -g 15 -bf 1 -keyint_min 3)
  • Изменение скорости воспроизведения видеопотока с 23.976 до 25 fps. Стандартный метод для PC - перевода видео с NTSC/Film-23.976 в PAL-25. Заметьте так же, что ключ < -r > в этом случае должен стоять на входе. Не работает с опцией < -vcodec copy > т.е. файл предварительно, перед последующим сжатием, разжимается в RAW формат. Требует так же увеличения скорости воспроизведения аудиодорожки на ~1 fps (4,271%)=(25/23,976023976 x 100%) - это можно сделать в программе Audacity v2.0.0, в разделе "фильтры", "смена темпа". Audacity не работает с 5.1 дорожками, - дорожки придётся расщепить на 6 моно файлов и работать с каждым отдельно.
ffmpeg -r 25 -i /home/usr/video/movie.avi -vcodec rawvideo -an /home/usr/video/movie_out.avi
  • Экспорт аудио, с перекодированием. В этом случае можно не узнавать формат аудиодорожки, ибо на выходе мы получаем согласно нашим требованиям из заданного параметра аудиокодека:
ffmpeg -i movie.avi -vn -acodec libmp3lame -ab 192 -f mp3 song_out.mp3
  • Экспорт аудио, без перекодирования. Предварительно узнав при помощи mediainfo формат аудиодорожки. Если в файле несколько аудиодорожек, то по умолчанию на выходе будет первая аудиодорожка. Например ролик с одной аудиодорожкой mp3:
ffmpeg -i /home/usr/video/movie.avi -vn -acodec copy /home/usr/video/song_out.mp3
  • Качественное кодирование в x264 c аспектом исходника 16:9 для потокового видео в сети (HD ли DVD источник, предварительно разжатый в huffyuv или rawvideo):
ffmpeg -i /home/usr/video/movie.avi -vcodec libx264 -profile high -level 3.1 -s 856x480 -sar 1:1 -aspect 16:9 -b:v 2000K -dct8x8 1 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -refs 5 -fast-pskip 0 -subq 9 -me_method full -me_range 32 -mbd rd -flags +mv4+qpel -g 40 -bf 2 -direct-pred 1 -b_strategy 2 -b-pyramid 1 -weightb 1 -weightp 2 -keyint_min 4 -coder 1 -qmin 0 -qdiff 1 -acodec ac3 -ac 2 -ar 48000 -ab 192K /home/usr/video/movie_out.mp4
  • Кодирование в x264 и flac ((Данные настройки дают очень хорошее качество, но они больше для примера использования опций x264 в ffmpeg. Опции кодирования лучше подбирать под конкретное видео.)) ((Сохраняем в avi, так как ffmpeg, из репозитория Ubuntu, не поддерживает сохранение в mkv.)) :
ffmpeg -y -i movie.mkv -vcodec libx264 -crf 22 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method umh -subq 9 -trellis 2 -refs 8 -bf 6 -coder 1 -g 100 -me_range 24 -qmin 10 -qmax 51 -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -threads 2 -acodec flac -aq 100 out.avi
  • Кодирование в x264 и flac, используя прессеты:
ffmpeg -i "movie.avi" -vcodec libx264 -vpre lossless_medium -acodec flac -aq 100 -y "out.avi"
  • Кодирование в xvid и mp3:
ffmpeg -i "movie.avi" -vcodec libxvid -qscale 2 -s 720x400 -acodec libmp3lame -ac 2 -ab 128k -y "out.avi"
  • Кодирование в MPEG4 и mp3:
ffmpeg -i "movie.avi" -vcodec mpeg4 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 100 -qscale 3 -acodec libmp3lame -ac 2 -ab 128k -y "out.avi"
  • Некоторые ключи для кодирования MPEG-4 высокого качества, по совету разработчиков ffmpeg:

<code bash> -vcodec mpeg4 -mbd rd -flags +mv4+aic+qpel+qprd+mv0 -mpv_flags skip_rd -trellis 2 -cmp 2 -subcmp 2 -bf 2

  • Качественное кодирование в MPEG4, с продвинутыми настройками и лучшим качеством, - аспект 16:9:
ffmpeg -i /home/usr/video/"movie.avi" -vcodec mpeg4 -s 720x400 -sar 1:1 -aspect 16:9 -q:v 1 -coder 1 -mbd rd -flags +mv4+qpel+qprd -me_method epzs -dct faan -mpeg_quant 1 -me_range 64 -qdiff 1 -refs 5 -g 40 -bf 2 -b_strategy 2 -keyint_min 4 -acodec ac3 -ar 48000 -ac 2 -ab 192K /home/usr/video/"movie.mp4"
  • Кодирование аудио из AC3 в flac:
ffmpeg -i "intput.ac3" -vn -acodec libfaac -ac 2 -aq 100 -ar 48000 -y "out.flac"
  • Склеиваем изображения в видео:

(изображения должны иметь имена 000.jpg, 001.jpg, 002.jpg ...)

ffmpeg -r 15 -b 2000 -i %03d.jpg images2video.avi
  • Делаем скриншот из видео с точным указанием времени:
ffmpeg -i "input.flv" -r 1 -ss 00:00:13.750 -vframes 1 -t 1 "out.jpg"
Ссылки

FFmpeg.org документация по методам и ключам кодирования на сайте разработчика.

FFmpeg-wiki официальная wiki по FFmpeg

FFmpeg и FFmpeg GUIs/Frontends альтернативные ссылки на релизы, включая релизы с GUI (граф. оболочкой)

Русское описание ключей кодирования для x264.

Английское описание ключей кодирования x264, включая версии ключей для ffmpeg (устаревшая версия).