archiver 2015/04/24 18:50
FFmpeg - набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио и видеозаписи в различных форматах. Он включает libavcodec - библиотеку кодирования и декодирования аудио и видео и libavformat - библиотеку мультиплексирования и демультиплексирования в медиа контейнер. Название происходит от названия экспертной группы MPEG и FF, означающего Fast Forward. FFmpeg разработан под ОС на основе Linux, однако может быть скомпилирован под многие другие операционные системы. Разработчики не выпускают релизов и рекомендуют использовать последнюю версию из Git. Распространяется под лицензиями GNU LGPL или GNU GPL.
По этой ссылке указаны общие, но полезные сведения по параметрам и кодированию FFmpeg: Useful FFMPEG info, некоторые из них могут быть уже устаревшими - проект развивается.

Установка и компиляция FFmpeg на Ubuntu

В первую очередь стоит обратить внимание на то, что программа FFmpeg с некоторых пор отсутствует в репозиториях Ubuntu. Вместо неё в репозиториях находится программа Libav, носящая по инерции название FFmpeg и являющаяся форком (ответвлением) группы разработчиков. Подробнее об этом можно прочитать здесь Продолжающийся конфликт между FFmpeg и Libav мешает развитию обоих проектов. Всё это привело к тому, что в этих программах синтаксис управления и возможности несколько отличны. Данная же статья описывает синтаксис управления именно программы FFmpeg. Информация о продукте Libav находится по этому адресу - Libav.
CompilationGuideUbuntu - рекомендуемое разработчиками FFmpeg руководство по компиляции программы для ОС Ubuntu:
Это руководство применимо для всех поддерживаемых выпусков Ubuntu, Debian, Linux Mint и предоставляет локальную установку последних инструментов и библиотек FFmpeg, в том числе несколько внешних библиотек кодирования и декодирования (кодеков). Это не будет мешать основным пакетам репозитория. Руководство предоставит вам информацию об установки и компиляции последней версии FFmpeg и некоторых внешних библиотек кодирования и декодирования: fdk-aac (AAC encoder), libfaac (AAC encoder), libmp3lame (MP3 encoder), libopencore-amr (AMR encoder/decoder), librtmp (for additional RTMP protocols), libtheora (Theora encoder), libvorbis (Vorbis encoder), libvpx (VP8 encoder/decoder), and libx264 (H.264 encoder). Не все из этих библиотек являются обязательными и могут быть опущены, если это необходимо.
Вы также можете обратиться к руководству Generic FFmpeg Compilation Guide, для получения дополнительной информации при самостоятельной компиляции проекта. Эта страница содержит некоторые общие указания, начиная с исходного кода пакета под UNIX и так же его производных. Обратите так же внимание, что основные принципы являются общими для большинства дистрибутивов Linux/Unix и MinGW.
Разработчики FFmpeg рекомендуют использовать только последние версии п.о. О выходе последней статической сборки (билда) можно узнать на сайте FFmpeg.org в разделе страницы FFmpeg Releases. На данный момент актуальна версия: FFmpeg 3.3.2 "Hilbert".
Последний статический билд (сборка), также доступен и для ленивых людей и для тех, кто не владеет навыками сборки пакетов. Статический билд ограничен в элементах и не поддерживает несвободные кодеры.
Проекты и программы основанные на FFmpeg: FFmpeg-Based Projects; FFmpeg WikiStart: FFmpeg.org-wiki. Альтернативные ссылки на релизы FFmpeg и FFmpeg GUIs/Frontends: videohelp.com-ffmpeg; FFmpeg-Ubuntu-GUI traGtor

  • Для любителей репозиториев, - установка не официального, но рекомендованного разработчиками репозитория:
sudo add-apt-repository ppa:mc3man/trusty-media && sudo apt-get update 
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8E51A6D660CD88D67D65221D90BD7EACED8E640A
sudo apt-get install ffmpeg 

Следите за более новыми сборками для репозитория по этой ссылке: Canonical Group Ltd (GB) - launchpad.net … Так же смотрите страницу оригинального сайта ffmpeg.org, в разделе Downloads, для Ubuntu - http://ffmpeg.org/download.html#build-linux

Управление FFmpeg через терминал

  • Вызов мануала по FFmpeg:
man ffmpeg
Сохранение мануала в текстовый файл, где /user/ - имя вашего профиля в ubuntu. обычно это трактуется в терминале как user@computer:
man ffmpeg > /home/user/ffmpeg_man
  • Вызов справки помощи по FFmpeg, где < -h > - краткая справка помощи. < -h long > - длинная справка помощи. < -h full > - полная справка помощи:
ffmpeg -h full
Сохранение справки в текстовый файл:
ffmpeg -h full > /home/user/ffmpeg_fullhelp
  • Актуальны так же следующие некоторые опции, полный список которых можно узнать в начале краткой справки по FFmpeg <ffmpeg -h>:
ffmpeg -codecs -информация по возможным кодекам в FFmpeg
ffmpeg -decoders -информация по возможным декодерам в FFmpeg
ffmpeg -encoders -информация по возможным энкодерам в FFmpeg
ffmpeg -filters -информация по возможным фильтрам в FFmpeg
ffmpeg -pix_fmts -информация по возможным пиксельным форматам в FFmpeg

Основные принципы кодирования в FFmpeg

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

  • Строка FFmpeg состоит из нескольких принципиальных частей - это:

1. Команда вызова программы - ffmpeg
2. Входная часть строки - расположена до ключа < -i >. Примечательна тем, что некоторые ключи сильно зависят от их положения в этой части строки. Например ключ < -r > (rate) в качестве входного параметра работает совершенно по иному алгоритму, нежели в качестве выходного параметра (подробнее об этой особенности < -r > смотрите в разделе Применение).
3. Опция ввода - обозначается ключом < -i > (input). Как правило указывает входные файлы с путями их расположения на носителе. Или входные устройства, драйвера и протоколы для записи аудио и видео. Параметры находящиеся в строке после ключа < -i > в большинстве своём, считаются выходными.
4. Основные (предварительные) параметры - их можно ещё назвать как глобальные параметры, которые характеризуются в AVOption как опции < generic > и которые располагаются до установки предпочитаемого кодека и его параметров для кодирования видео или аудио. В качестве основных, могут выступать параметры установок пиксельных форматов < -pix_fmt >, опции ресайзинга (изменения размеров кадра), опции образцовых и дисплейных аспектов, выходная опция выше озвученного рейта < -r >, опция формата файла, типа < -f avi >, опции видеофильтра типа < -vf scale > - и прочее.
5. Параметры кодека для видео - начинаются с установки предпочитаемого кодека для кодирования видео < - vcodec > и продолжаются до окончания перечисления устанавливаемых вами параметров, относящихся к видеокодеку, включая опцию < -x264opts > (подробнее в таблице сравнения параметров ffmpeg и x264 и в таблице для кодека x264) и её параметры синтаксиса из самого кодека x264. Опции видеофильтра < -vf > должны располагаться либо в этой части строки либо в основных. Опции видеофильтра < -vf > расположенные в части строки для кодирования аудио - работать не будут.
6. Параметры кодека для аудио - начинаются с установки предпочитаемого кодека для кодирования аудио < - аcodec > и продолжаются до окончания перечисления устанавливаемых вами аудиопараметров, относящихся к аудиокодеку. Опции аудиофильтра < -аf > должны располагаться здесь же. Опции аудиофильтра расположенные в разделе строки для видео - работать не будут.
7. Опция вывода - указывает выходной путь и имя для результирующего файла.
В принципе, многие параметры могут работать и при другом их расположении в строке кодирования, но подобная организация делается для удобства пользователя, что бы избежать хаоса, путаницы и некоторой части загадочных вопросов на тему - почему что-то не работает, ведь вроде бы всё правильно ;-)
Тем не менее некоторые основные части строки указанные выше - являются принципиальными, такие как - команда вызова программы, вход строки, ввод, видео, аудио, вывод…

  • Схематически это всё будет выглядеть так:
1.[ffmpeg] 2.[input option] 3.[input file] 4.[main-input-param,-vf] 5.[vcodec,video param] 6.[acodec,audio param,-af] 7.[output file]

Правило: цепочки фильтров формируются в строке через запятую, без пропуска - пример: -vf filter1=value,filter2=value… то же и для -af filter

  • Та же строка но с примерами, наглядно:
1.[ffmpeg] 2.[-r 25(?)] 3.[-i /home/usr/video.mkv] 4.[-pix_fmt yuv420p -vf scale=800:448:flags=bicubic -s 800x448 -sar 1:1 -aspect 16:9 -f avi] 5.[-c:v libx264 -profile high -x264-params input-range=pc:range=pc -b 2000K -g 250 -bf 2 -keyint_min 25 -qmin 1 -i_qfactor 1.00] 6.[-c:a ac3 -ac 2 -b:a 256K -ar 48000 -af filter] 7.[/home/usr/video_out.avi]
  • Если вы кодируете в x264, то основным параметром после установки кодека < -vcodec libx264 >, должна быть установка профиля кодирования - < -profile high >. От установки профиля будет зависеть то, какие именно опции смогут быть задействованы кодером автоматически или вами вручную, а какие - опущены. Подробнее смотрите ниже, в таблице для кодека x264, в графе profile. После установки профиля кодирования в x264 у вас будет актуально правило: Если вы не зададите какого-нибудь ключа и параметра кодирования, то кодер выставит его автоматически на основании анализа видео, включая умолчания. Если вы хотите, что бы ключ кодирования имел именно тот параметр, который хотите вы, то ключ придётся установить (прописать), например < -qdiff 1 > (по умолчанию будет < -qdiff 4 >) и т.п. - но возможность установки того или иного параметра зависит так же от задействованного профиля кодирования.

Основные и дополнительные ключи параметров FFmpeg

Полный список основных и дополнительных опций можно посмотреть здесь: FFmpeg All, Main Options, Advanced Options, Advanced Video Options, Advanced Audio Options, Advanced Subtitle Options.
Так же в FFmpeg существуют AVOption. AVOption - это опции, которые предоставляются непосредственно в libavformat, libavdevice и библиотеками кодеков. AVOption делятся на два типа:
<generic> - Могут быть установлены для любого контейнера, кодека или устройства. К ним можно отнести большинство Main и Advanced опций.
<private> - Параметры типа id3v2 и пр. которые являются специфическими (приватными) для соответствующего контейнера, устройства или кодека. Частные опции так же могут быть перечислены в их соответствующих контейнерах, устройствах и кодеках. Например, чтобы написать заголовок ID3v2.3 вместо умолчательного ID3v2.4 к MP3-файлу, используйте < id3v2_version >, как личную возможность MP3 - мультиплексора, - смотрите главу Ключи параметров ffmpeg для Аудио, параграф 8. Работа с MP3 тегами.

Main + Advanced Option:

КлючПримерОписание
-i <filename> -i movie.avi Путь/имя входного файла. Без установки параметров обработки означает информацию о входном файле
-f <format> -f matroska Формат входного/выходного файла
-r <fps> -r 23.976 Количество кадров в секунду.
В качестве входного параметра игнорирует любые временные метки хранящиеся в файле, - используется для ускорения или замедления видеопотока (например 23.976 > 25 fps).
В качестве опции вывода, - дублирует или удаляет кадры для достижения заданной параметром частоты кадров, скорость воспроизведения видеопотока остаётся при этом неизменной. (Смотрите в разделе применение)
Альтернативные опции по установке функции < -r > смотрите здесь Video rate
-s <size> -s 720×400 Установка размера видеокадра - Pixel Aspect Ratio (PAR) - Установка Пиксельного Соотношения Сторон (соотношение сторон кадра измеряемое в пикселях) см. одноимённую графу в таблице для кодека x264. Так же возможна установка опции Video size - например < -video_size vga >, которая подразумевает установку размеров видеокадра в соответствии с видеостандартами.
-b <integer> -b 200K ABR - Average BitRate. Установка базового (усреднённого) битрейта, - уровня потока данных видео или аудио в секунду. Измеряется в килобитах или мегабитах в секунду (Kb/s),(Mb/s) задаётся в строке с буквой K или M, например: < -b 2000K > или оно же < -b 2M >. Если не проставить букву K, то кодер будет кодировать материал ссылаясь на биты - 2000 = 2000Bit, что очень мало для визуально-приличного качества. По этому - важно обратить внимание на этот нюанс. При кодировании, рекомендуется выставлять значение битрейта, если не используются другие опции влияющие на уровень битрейта. Это предпочтение характеризуется тем, что по умолчанию уровень битрейта для кодирования любительского или поточного видео в FFmpeg - достаточно низок. Подробнее смотрите ту же графу -b в таблице для кодека x.264, включая графы crf и qp.
<stream spec> Спецификатор потоков. Обычно добавляется к имени опции и отделен от него двоеточием. Возможные формы обозначения спецификаторов потока: <stream_index> - например опция < -c:a:1 ac3 >, где <1> будет означать второй аудиопоток. Отсутствие спецификатора < -c:a ac3 > будет означать кодирование для всех имеющихся потоков. <stream_type> - означает конкретизацию потоков по их отношению к контенту (содержимому), например: -c:v - для видео, -c:a - аудио -c:s - субтитры -c:d - данные. Варианты также смотрите ниже в этой таблице. <p:program_id> < -c:a:p:1 ac3 > - принудительная установка обозначения программного потока, который обычно отображается в mediainfo как <0> для видео и как <1> для аудио.
-b:v, -b:a Псевдонимы опции -b конкретизирующие тип потока (видео или аудио) - актуально для последних версий FFmpeg. Не актуально для кодирования в Libav.
-ss <position> -ss 00:10:50 Метка для начальной позиции кодирования. Во избежание подвисаний в попытках поиска алгоритмом метки по файлу, будет лучше установить этот параметр на входе, до ключа < -i >. Так как в большинстве форматов невозможно искать позицию точно, поэтому FFmpeg будет стремиться искать ближайшую точку до заданного положения. Параметр задаётся в формате времени - hh:mm:ss[.xxx], или в секундах. Для более точной «резки» видеофайл лучше разжать предварительно, в raw или lossless формат.
-accurate_seek Эта опция включает или отключает точный поиск метки во входных файлах с установленной опцией < -ss >. Точный поиск включен по умолчанию, поэтому опция < -ss > ищет c повышенной точностью при транскодировании. Используйте опцию < -noaccurate_seek >, чтобы отключить точный поиск, что может быть полезно, например, при копировании некоторых потоков или транскодировании других.
-t <position> -t 00:15:10 Конечная позиция кодирования
-vframes <n> -vframes 1000 Задаем количество кадров кодирования
-vcodec <value> -c:v libx264 Установка кодека для кодирования видео, где < -c:v > псевдоним для опции <vcodec>, не актуален для Libav.
-acodec <value> -c:a ac3 Установка кодека для кодирования аудио, где < -c:a > псевдоним для опции <acodec>, - не актуален для Libav.
-scodec <value> -c:s dvbsub Установка кодека для кодирования субтитров, где < -c:s > псевдоним для опции <scodec>, - не актуален для Libav.
-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 <code> -vlang eng Выбираем язык видео
-alang <code> -alang jpn Выбираем язык аудио
-slang <code> -slang rus Выбираем язык субтитров
-vsync Способ синхронизации видео при мультиплексации (сведении) аудио и видеодорожек. Имеет опции: < -vsync 0 > - сквозной метод, 1 кадр в секунду, где каждый кадр передается с меткой времени от демультиплексора на мультиплексор. < -vsync 1, cfr > - кадры будут дублироваться или опускаться (выбрасываться), чтобы добиться именно заданной постоянной частоты кадров. < -vsync 2, vfr > - кадры проводятся через их временные метки или опускаются так, чтобы предотвратить 2 дублированных кадра в пределах одной и той же временной метки. < -vsync drop > - то же что и сквозной, но уничтожает все метки, заставляя мультиплексор генерировать свежие метки на основе частоты кадров. < -vsync -1, auto > - выбирает между 1 и 2 в зависимости от возможностей мультиплексора - используется по умолчанию. С установленной опцией < -map > можно будет выбрать, из какого потока берутся временные метки. Вы можете оставить либо видео или аудио без изменений и синхронизировать только один из потоков, оставив другой неизмененным.
-аsync Способ синхронизации аудио. Является устаревшей опцией. Разработчики рекомендуют фильтр aresample < -af aresample=async=1000 > - подгонка 1000 сэмплов (выборок) в секунду для растяжения или сжатия звука в соответствии временным меткам, - т.е. кодер будет раз в секунду делать попытку синхронизации аудиопотока с выборкой в 1000 произвольных частей звуковой волны, согласно установленным временным меткам (25 кадр/сек или 30 кадр/сек - и т.д.)
-vf filter=value Опция установки видеофильтра
-аf filter=value Опция установки аудиофильтра
-intra_matrix <code> Установка матрицы кодирования I-кадров (опорных, интра-кадров) для mpeg2video - см. ниже в разделе для mpeg-2
-inter_matrix <code> Установка матрицы кодирования P,B-кадров (внутренних интер-кадров) для mpeg2video - см. ниже в разделе для mpeg-2
-itsoffset <offset> Установка задержки одного потока относительно другого - аудио относительно видео, например: ffmpeg -i /home/user/video.mkv -itsoffset 00:00:00.500 -i /home/user/video.mkv -vcodec copy -acodec copy -map 0:0 -map 1:1 /home/user/video_out.mkv - сдвигает (задерживает) аудиопоток относительно видеопотока на 500 миллисекунд. Можно установить минус перед таймкодом, тогда поток аудио будет опережать видео на те же 500 миллисекунд.
-metadata Устанавливает метаданные в файл, в паре ключ=значение. Например: FFmpeg -metadata title=«мой титул». Для удаления метаданных достаточно выставить title пустым, например: -metadata title=«». Актуальны так же следующие опции: artist=«артист», album=«название альбома», title=«название трека», genre=«жанр», track=«номер трека», date=«дата выхода альбома». ffmpeg -i /home/user/audio.wav -metadata artist=«Gipsy Kings» -metadata title=«Bambolero» -metadata album=«Greatest Hits» -acodec libmp3lame -q:a 1 -b:a 128k -f mp3 /home/user/audio.mp3
Дополнительную информацию по опциям < -metadata > можно посмотреть в главе кодеки и енкодеры FFmpeg для аудио параграф 8. Работа с MP3 тегами.
-target Устанавливает тип стандарта видеофайла (VCD,SVCD,DVD,DV,DV50,PAL-VCD,NTSC-SVCD - и т.п.). Все параметры форматов, такие как битрейт, кодеки, размеры буферов и пр. при этом устанавливаются автоматически, соответственно выбранному стандарту. Вы можете просто указать тип.
-deinterlace -deinterlace Включаем опцию деинтерлейсинга. Эта опция устарела, поскольку деинтерлейсинг очень низкого качества. Используйте опцию yadif из ассортимента видеофильтров ffmpeg: < -vf yadif=value >, смотрите также главу данного мануала Полезные фильтры -vf,-af, параграф 6. Yadif
-concat Concatenate - связывать, сцеплять. Функция сложения (склеивания) фрагментов видео в один цельный ролик (фильм). Смотрите пример в главе статьи работа в ffmpeg с форматами mpeg-2 и DVD, параграф - 2. Работа с DVD директориями и файлами типа *.vob
-loop -loop 1 Опция зацикливания входного потока. Например для создания анимации изображений в формате gif.
-threads <threads> -threads auto Включение количества потоков кодирования для видео - ускоряет процесс кодирования видео. Лучше оставить значение по умолчанию и отдать определение числа потоков кодеру. Опция актуальна для многоядерных процессоров и для программ, использующих многопоточность. Подробнее смотрите ниже в таблице для кодека x264 в графе < -threads >
-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-Цветовая субдискретизация
-vf scale in_range:out_range Функция от видеофильтра, с использованием опций фильтра scale - in_range:out_range - для установки или коррекции цветовых диапазонов входного видеофайла. Опция может работать с входными raw и lossless файлами, до установки предпочитаемого кодека. Примеры и подробности смотрите в главе Полезные фильтры -vf, -af, в конце параграфа 1. Работа с чёрными полями кадра средствами ffmpeg

Ключи параметров FFmpeg для Видео

Вступление:
Данные настройки необходимы для более точного задания характеристик выходного видео. Желательно использовать, только если вы уже знакомы с основами кодирования, иначе есть вероятность сделать выходное видео только хуже. Но темне менее, для тех кому приступы любознательности и шаловливые ручки не оставляют особого выбора, мы попробуем в данной статье развить вопрос о том, что же такое цифровое видео, кодирование и как с ним работать примененяя опции и возможности консольного кодировщика FFmpeg. Для начинающих рекомендовано сперва ознакомится со статьями: Видео; Медиаконтейнер. К тому же, некоторые необходимые ссылки на сопутствующие и полезные статьи, будут указываться в тексте по ходу толкования. Параллельно читайте и изучайте их.

кодеки и энкодеры для видео, без потерь (lossless)

FFV1 - означает «FF видеокодек 1», представляет собой видеокодек без потерь внутри кадра. Он может использовать кодирование с переменной длиной слова (vlc) или производить арифметическое кодирование (ac) для энтропийного кодирования. Кодер и декодер являются частью бесплатной библиотеки libavcodec с открытым исходным кодом в проекте FFmpeg с июня 2003 года.
FFV1 version 1
Параметры кодирования для первой версии:

Level     < -level >   - Версия кодера (уровень)        - < 1,3 >, где 1 = версия 1, 3 = версия 3 (по ум. = 1)
Сoder     < -coder >   - Используемый тип кодера        - < 0,1 >, где 0 = Golomb Rice, 1 = Range Coder
Сontext   < -context > - Используемый кадровый контекст - < 0,1 >, где 0 = small, 1 = large 
GOP size  < -g >       - Размер кадровой GOP-структуры  - (по ум. = 1)

Так же по тематике смотрите: Коды Голомба, Экспоненциальный код Голомба, Интервальное кодирование (Range encoding)
Пример строки кодирования:

ffmpeg -i /home/user/video-in.avi \
-vcodec ffv1 -level 1 \
-coder 1 \
-context 1 \
-g 1 \
/home/user/video-out.avi

FFV1 version 3
Параметры кодирования, специфичные для третьей версии:

Threads    < -threads >     - Потоки кодирования (нити)                  - (по ум. = в зависимости от ядер прецессора)
Slices     < -slices >      - Разбиение потока на части при кодировании  - допустимо: < 4,6,9,12,16,24,30 >
Error      < -slicecrc >    - Детектор/корректор ошибок частей           - < 0,1 >, где 0 = отключено, 1 = включено. Опция добавляет информацию CRC на каждый фрагмент (slice). 
Это позволяет декодеру обнаруживать ошибки в потоке, а не слепо декодировать сломанный срез. 
Multi-pass < -pass >        - Выставление числа проходов для кодирования - < 1,2 >
Logfile    < -passlogfile > - Префикс журнала логов первого прохода                       - 

Немного теории - gop
GOP Settings – для удобства кодирования видеоданных, при использовании энкодеров и кодеков с потерями (lossy), весь видеопоток разбивается на группы, называемые GOP (Group of Pictures - группой изображений), которые состоят из I,P,B типов кадров, подробнее wiki-Типы кадров . Структуру 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-Кадровая частота

кодеки и энкодеры с потерями (lossy) - аналоги ключей ffmpeg для x264

Аналоги основных ключей параметров кодирования ffmpeg для x264. Для просмотра полного списка параметров кодирования кодека x264, следуйте по ссылке в графе таблицы, - это один из лучших мануалов для x264.
FFmpeg ←→ 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, переменного битрейта. Лучше не устанавливать эту опцию и отдать её в «руки» кодера
fullrange=on Опция включения полного диапазона цветности [0-255] для правильного определения цветности видео энкодером x264. Опция может не давать желаемых результатов, выставляя лишь сам флаг полной цветности, не проводя конкретного действия. Для корректировки этого бага автоопределения диапазона, опция в последних версиях ffmpeg дополнена двумя другими: < input-range > - конкретизирует входной диапазон, имеет значения - auto, pc, tv. И < range > - конкретизирует выходной диапазон, имеет те же значения - auto, pc, tv. Где, диапазон pc равен [0-255], а диапазон tv равен [16-255] - и, что бы видео не шло на выходе осветлённым используйте пары диапазонов tv → pc и pc → pc. Пример: < -x264-params input-range=pc:range=pc > или < -x264-params input-range=tv:range=pc >. Опции могут не работать при использовании ключа -x264opts.
input-range:range см. выше
-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 Установка -threads средствами и параметрами кодека x264 - не работает при кодировании c ffmpeg. FFmpeg по умолчанию использует свои опции многопоточности, игнорируя установки многопоточности в синтаксисе кодека x264. Подробнее об опциях многопоточности для ffmpeg - смотрите ниже, в таблице для кодека x264, в графе threads и thread_type.
-thread_type sliced_threads см. ниже
-flags -cgop open-gop см. ниже
-fast-pskip 0 no-fast-pskip=1 см. ниже
tff Enable interlaced mode (top field first). Разрешить интерлейсное кодирование, верхнее поле первое.
bff Enable interlaced mode (bottom field first). Разрешить интерлейсное кодирование, нижнее поле первое.
по умолчанию -deadzone-intra Мёртвая (слепая) зона определения порога для Intra - I-кадров, за которым мелкие детали изображения в пикселях не будут обсчитываться и будут выброшены из обработки в предпочтение заданному параметром минимальному порогу. Это не означает что детали будут именно замыленны - это означает что кодер не будет придавать большого внимания деталям, которые находятся ниже порога заданного этим параметром. Но если вы хотите сохранить зерно или шум изображения, то этот параметр можно уменьшить до значения < 4 >. Значение порога для Intra-кадров меньше чем < 4 > не имеет смысла, ибо минимальный блок несущий информацию о цветности файла равен 4×2 пиксела. На некоторых трекерах, не рекомендуют снижать этот параметр ниже чем < 6 > из сугубо своих трекерных предпочтений.
Оптимальным является значение по умолчанию - < 11 >
по умолчанию -deadzone-inter Мёртвая (слепая) зона определения порога для Inter - P,B-кадров, за которым мелкие детали изображения в пикселях не будут обсчитываться и будут выброшены из обработки в предпочтение заданному параметром минимальному порогу. Обычно P,B кадры менее детализированы по принципу своего значения в GOP-структуре, по этому их минимальный порог должен быть несколько выше, чем порог для I-кадров. Например минимальный квант для B-кадров в некоторых кодировщиках, по умолчанию равен значению от 20-ти и выше. Но для x264, с учётом возможности этого кодера более качественно обрабатывать P,B-кадры - это значение можно понизить до < 16 > или даже < 8 >. Значение порога ниже чем < 8 > - не имеет принципиального смысла для кодирования Inter-кадров. Значение по умолчанию - < 21 >
по умолчанию -deadzone-intra/inter Полезные пары для intra/inter: < -x264opts deadzone-intra=4:deadzone-inter=8 >, < -x264opts deadzone-intra=6:deadzone-inter=6 >,
< -x264opts deadzone-intra=8:deadzone-inter=8 >, < -x264opts deadzone-intra=8:deadzone-inter=16 >. По некоторым источникам, предпочтительно иметь значения порогов мёртвых зон - нечётными. Например: < -x264opts deadzone-intra=5:deadzone-inter=9 > и т.п.
по умолчанию 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
x264:

КлючОписаниеПо умолчанию
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) освещённых ниже в таблице. Для интернет-роликов (стрим) с разрешениями по вертикали 360,400,480,576 при 25 кадр/сек, актуален будет следующий битрейт, где первое значение для аспекта 4:3, а второе для 16:9, например: 480-640×360 - < -b 480K, 640K >, 528-720×400 - < -b 590K, 800K >, 640-853×480 - < -b 850K, 1140K >, 720-1024×576 - < -b 1150K, 1640K >, но всё это будет более актуально для профиля кодирования < -profile high >. Для HD-video 1280×720 < -b 2550K >, для Full-HD 1920×1080 < -b 5760K >. Для расчёта стрим-битрейта актуальна формула - (Bit/(pixel*frame) - [битрейт(в битах)/(вертикаль * горизонталь * кадр/сек)], пример - [1150000 «1150K»/(720x576x25) = 0,111]. Значение Bit/(pixel*frame) для стрим-кодирования должно быть не ниже (и желательно не выше) чем 0.111. Для рипов, значение Bit/(pixel*frame) может колебаться в пределах от 0.222 до 0.7, где значение 0.7 примерно означает 70% качества от полного (математического) качества видео (lossless). Смотрите так же Расчёт минимального битрейта. Для полного качества и максимального битрейта см. wiki-H.264 в разделе страницы «Уровни».
Использование алгоритма CABAC позволяет сократить битрейт до 50-55% от битрейта оригинального видео, с которого делается Rip, за исключением видео в котором уже использовался CABAC при сжатии. Например максимальный битрейт файлов DVD-MPEG-2-720×576 это - 8000Кб/с. Использование CABAC позволяет сократить битрейт до 4000-4500Кб/c без потери в качестве (см. ниже в графе -coder)
200K
-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> - низкое качество. использует только I/P-кадры, поддерживает только прогрессивную развертку и CAVLC-кодирование, без B-Frames, без CABAC, без 8×8 intra prediction (предсказание intra-блоков 8×8), без Weighted Prediction (weightp=0).
<main> - нормальное качество. использует I/P/B-кадры, поддерживает прогрессивную и чересстрочную развертку, CAVLC или CABAC-кодирование, но без 8×8 intra prediction, без FMO (гибкое упорядочивание макро-блоков, - также известное как группы частей и произвольное упорядочивание частей), без ASO (методы ре-структурирования порядка представления фундаментальных областей «макро-блоков»).
<high> - высокий профиль, без ограничений на функции, использует предсказание intra-блоков 8×8.
<high422><high444> высокий профиль с поддержкой расширенных цветовых пространств (по умолчанию используется YUV 4:2:0) - смотрите 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
Уровень может устанавливаться автоматически, анализируя тип ваших настроек, для этого не задавайте ключ и параметр.
-s <value> Pixel Aspect Ratio (PAR). Установка Пиксельного Соотношения Сторон (соотношение сторон кадра измеряемое в пикселях), например:
4:3,16:9 < -s 640×480 >; < -s 640×352 > и < -s 720×544 >; < -s 720×400 >
< -s 720×576 > - для DVD-PAL-video 25 fps (аспект регулируется опцией < -aspect >)
< -s 720×480 > - для DVD-NTSC-video 29,970 fps (аспект регулируется опцией < -aspect>)
Для стрим плейеров не актуальна опция < -aspect >, она ими попросту игнорируется, по этому для них более актуально значение PAR, которое для двух верхних вариантов будет: < -s 1024×576 > и < -s 856×480 >, не зависимо от фреймрейта.
16:9,4:3 < -s 1280×720 > и < -s 960×720 > - для HD-video
16:9,4:3 < -s 1920×1080 > и < -s 1440×1080 > - для FullHD-video.
-sar <1:1> Sample Aspect Ratio (SAR). Установка Образцового Коэффициента Соотношения Сторон. < -sar 1:1 > - значение по умолчанию. Если вы определяете параметры вашего видео c помощью опции < -s >, то вам достаточно оставить значение <1:1>. Но бывают случаи когда надо растянуть изображение с полноморфного 4:3 до 16:9 без потери разрешения, тогда эта опция будет незаменима. Большая часть плейеров поймет это и в контейнере avi, и в mkv. Если выходное изображение размером 720×576 аспекта 4:3 выглядит у вас сплюснутым с боков и на мониторе 4:3 с боков добавляются чёрные поля, то попробуйте выставить sar значением 4:3. Пример: -sar 4:3 -aspect 4:3 1:1
-aspect <value> 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-видео в пикселях (PAR) разрешением 720×400 c аспектом 16:9. Для частных случаев могут применяться размеры кадра SD-видео в пикселях, аспектом 16:9, такие как: - 768×432, 856×480 или 800×448 для экрана 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 или 1 
 Значения для оригинала: -r 25 -g 25 -keyint_min 1 

Последний вариант устанавливается, если вы создаёте «оригинал-рип» с BlueRay или DVD, с соответствующим данному уровню Level AVC битрейтом и полным сохранением качества, - (на полку).

250
-flags cgop Установка открытой GOP, чтобы использовать точки восстановления для закрытия GOP. Эта функция требует установки -sc_threshold равным 1000000000. Пример: < -flags cgop -sc_threshold 1000000000 >
-bf <1-16> Задаем количество В-фреймов «В-кадров» (оптимально - 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 <0,1,2> Использует B-кадры, как референсные - т.е. позволяет B-кадрам ссылаться друг на друга и быть связанными между собой, увеличивая эффективность использования двух или более B-кадров. Опция имеет смысл если вы используете более одного В-кадра. Возможные значения: <0> none - запрещает использовать В-кадры как референсные. <1> strict - разрешает по одному референсному В-кадру на каждый mini-gop (является ограничением для кодирования в Blu-ray). <2> normal - разрешает множественное использование референсных В-каров на каждый mini-gop.
-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> - включено
-wpredp <integer> Weighted prediction for P-frames. Взвешенное предсказание для P-кадров. Позволяет «взвешивать» ссылки на P-кадры, управляя таким образом тем, - на сколько каждая ссылка будет влиять на предполагаемое изображение. <0> - выключено, <1> - включено
-weightp <integer> Weighted prediction analysis method. Взвешенное предсказание метода анализа для кадров. Значения: <none>, <simple>, <smart>
Рекомендуется «умное» значение < -weightp smart >
-intra-refresh <integer> Использование периодического обновления в Idr-кадре (I-direction кадре), вместо установки стандартного I-кадра. Idr-кадр - кадр на который имеют ссылки P и B-кадры, т.е классический I-кадр из GOP-структуры, несущий информацию до полной смены сцены и окружения, после чего он заменяется новым I-кадром из видеопоследовательности. Функция < -intra-refresh > не совместима с < -b-pyramid 2 >, если установить принудительно, то может повлиять на другие опции, например на < -refs >, сократив количество референсных кадров до одного. Но < -intra-refresh > вполне работает и с опцией < -b-pyramid 1 >, хотя можно отключить совсем < -b-pyramid 0 >. Чисто визуально ролики закодированные с опцией < -b-pyramid 1 > - выглядят несколько лучше. Опция < -intra-refresh > предназначена в основном для кодирования потокового интернет-видео (stream-video). Cнижает степень сжатия видео, даёт более постоянный битрейт, без резких скачков. Рекомендуемые параметры для stream-кодирования - это: < -intra-refresh 1 -b-pyramid 1 -refs 1 > auto
-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 -преобразований - умное использование преобразований 8×8 в 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 8×8), в отличие от одной ссылки на макроблок. Смешанное взаимодействие референсных кадров.
Отключение < -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 - «exhaustive, исчерпывающий» - высокооптимизированный интеллектуальный поиск на всей области поиска векторов движения в пределах лучшего merange предсказания, - не совместим с интерлейсным видео. Значение <tesa> - «transformed exhausive, преобразовано-исчерпывающий» - алгоритм, который пытается улучшить эффект Hadamard преобразования, сравнивая с каждым вектором движения. <tesa> похож на <esa>, но лучше и медленнее, хорош если вы хотите скорректировать глюки движения этим способом. Значение <tesa> отсутствует в опциях ffmpeg, но может быть задано опциями кодека x.264, например: < -x264opts me=tesa >. Так же смотрите одноимённую графу для кодеков семейства MPEG-4 ISO/IEC hex
-me_range <integer> Motion Estimation Range - выбираем Диапазон Оценки Движения, который определяет максимальное количество попыток (с измененными данными) нахождения оптимального варианта при поиске вектора движения макроблока. Чем больше, тем лучше качество. Значения 16 обычно достаточно для SD видео и 24 для HD видео, при условии отсутствия в видео сложных сцен движения, которые лучше кодировать с большими значениями - 32 или 64 (макс. значение), причём значение 64 годится не для всех типов видео и его актуальность лучше отслеживать визуально. Оптимальное значение из «больших» - это 32. Желательно использовать значения кратные 4-м. Для umh, esa и tesa, увеличение me_range значительно замедлит кодирование. Для dia и hex допустим минимальный диапазон значений от 4 до 16, который выставляется автоматически равным значению не выше чем 16, не зависимо от профиля кодирования. Для umh, me_range задает не количество итераций, как для предыдущих алгоритмов me_method, а радиус в пикселях, в пределах которого будет искаться пиксель - подробнее x264 Значение me_range так же зависит от частоты кадров исходного видео - для меньшего fps требуются большие значения range. В параметрах кодека x264 есть ещё один схожий параметр <mvrange> управляющий размером вектора движения в пикселях, но этот параметр «вшит» в кодер и меняется автоматически от заданного значения уровня < -level >, обычно для -level 3.1 mvrange=512. 16
-subq <0-9> Задаем сложность оценки подпикселя. Более высокое значение соответствует более высокому качеству для именно кодируемого (сжимаемого) материала. Для работы с lossless режимом кодирования с применением только опорных кадров (I-кадры), опции основанные на работе с промежуточными кадрами (P,B-кадры) будут не совсем актуальны. Для работы с вышеназванным lossless предпочтительно выбирать опции «для всех типов кадров».
 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) для Bi-direction кадров
 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) для всех кадров
10 - QPRD       - QP в режиме RD (Rate Distortion), требует -trellis 2 и -psy 1. Задаётся опциями x264: -x264opts subme=10
11 - FullRD     - Полный RD, требует -trellis 2 и -psy 1. Задаётся опциями x264: -x264opts subme=11

Опции QPRD и FullRD не столько означают именно улучшение качества алгоритма для кодирования видео, сколько свою специфику для работы в режиме использования < -trellis 2 >, с использованием опции < -psy 1 >, с возможностью установки подпараметров <psy-rd>:<psy-trellis> (см. ниже)

6
-cmp <integer> Chroma Motion Estimation (Point). Точечная функция оценки движения по цветности. Анализ движения (поиск векторов движения) не только по яркостной но и по цветовой составляющей. Если видео не имеет цветового шума и не является черно-белым, то рекомендуется эту опцию включить, хотя обычно, по умолчанию, эта опция идёт включённой. Для чёрно-белых видео и видео с шумящим цветом, можно попробовать отключить эту опцию < -cmp 0 >. Обычное значение по умолчанию - включено < -cmp 1 >, но если не задать этот параметр вовсе, то кодер выставит его автоматически на основании анализа видео. Имеет так же не цифровые опции: <chroma> - включено и <sad> - отключено, дублирует опцию в синтаксисе x264 < –no-chroma-me >. Трактовки значений этой установки для других кодеков MPEG-4 смотрите ниже, в таблице для кодеков семейства MPEG-4 ISO/IEC. auto
-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) и более высоких профилях < -profile > кодека, - см. графу profile. Опции управления: <0> - выключено, <1> - включено. Так же имеет иные опции для управления: < -coder ac > - арифметический кодер, конкретизирует включение именно алгоритма CABAC, < -coder vlc > - конкретизирует включение именно алгоритма CAVLC - Context-Adaptive Variable-Length Coding (CAVLC, контекстнозависимое адаптивное кодирование с переменной длиной кодового слова) - альтернатива CABAC меньшей сложности. auto
-trellis <0,1,2> Задаем значение треллис wiki-Треллис-квантование - решётчатое квантование для повышения сжатия. <0> - выкл. <1> - на макроблоках. <2> - на всём. При значении <2> может замыливать картинку. Все значения кроме нуля замедляют кодирование. auto
-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, но кодер может выставить этот параметр автоматически, на основании анализа видео. auto
-mbtree <integer> Дерево макроблоков. Передаёт битрейт с кодирования квантов на кодирование полезных макроблоков. Эффективен в многопроходном кодировании при дефиците битрейта. На динамичных сценах с шумом или зерном может давать неудовлетворительные результаты. < mbtree > хорош для чистой картинки с повторяющимися кадрами, например для анимации. Если не задать этот параметр, то кодер выставит его автоматически на основе анализа видео.
Значение < 0 > - выключено. Значение < 1 > - включено.
auto
-bluray-compat <0,1> Включение-отключение режима совместимости с Blu-Ray при кодировании. <0> - отключено, <1> - включено auto
-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> Включение количества потоков кодирования для видео - ускоряет процесс кодирования видео, но ориентирован не столько на колличество процессоров (ядер) в системе, сколь на количество программных потоков, которые может обработать каждое ядро. Обычно в технологии Hyper-threading каждый физический процессор может хранить состояние сразу двух потоков, которые система определяет как наличие двух логических процессоров. Из этого теоретически следует, что для технологии Hyper-threading в 4-х ядерных процессорах серии Core iX имеет место до 8 логических потоков на аппаратном уровне. А для некоторых, специфически более новых процессоров - и все 12 логических потоков. Так же существует понятие программной многопоточности, которую не следует путать ни с многозадачностью, ни с многопроцессорностью - см. Многопоточность. Например, для процессора Core i5 2500K автоматически устанавливается значение - 6 потоков кодирования, не смотря на то, что процессор имеет по умолчанию 4 аппаратных потока. Это скорее всего означает, что к физическим потокам добавляются 2 программных.
Выбор количества потоков числом более 16 не рекомендован разработчиками ffmpeg. Установка количества потоков, более чем поддерживает процессор и многопоточные программы, может заметно снизить скорость кодирования и перегрузить процессор. Для сохранения системной многозадачности, на многоядерных процессорах лучше установить количество потоков равным количеству ядер, что сделает процессор более отзывчивым для выполнения других программ. Значение потоков числом 8, - для 4-х ядерных процессоров даёт в целом не плохие результаты, но уже заметно нагружает процессор. По некоторым источникам, сильное увеличение многопоточности при кодировании, может несколько снизить качество самого кодирования.
В большинстве случаев будет лучшим - оставить значение этой опции по умолчанию и отдать определение числа потоков, кодеру: < -threads auto >
auto
-thread_type <flags> Выбор типа многопоточности для потока видео. Дочерняя функция для функции < -threads >. Имеет два режима многопоточности: установка фрагментов (частей) - «slice» и установка кадровой многопоточности - «frame».
В первом случае (цифровое значение 1) - поток кодирования разбивается на кадры (frame), где кадр - это составная часть главного управляющего потока, отрабатываемая как единое целое и содержащая не менее одной команды, - одного подпотока. Frame - не содержит частей, и, в этом режиме кодирование идёт преимущественно с уклоном на количество < -threads >, с предсказанием (lookahead_threads=1) на один кадр (подпоток) вперёд, по главному - < -threads >, потоку кодирования. В выводе Mediainfo это можно увидеть как < threads=8 / lookahead_threads=1 / sliced_threads=0 / >. Эта опция рекомендована для большего качества кодируемого материала и меньше для stream кодирования. Пример: < -threads 8 -thread_type frame >.
Во втором случае (цифровое значение 2) - поток кодирования разбивается на части (slice), увеличивая количество программных потоков внутри основного потока < -threads >. Обычно slice устанавливается автоматически, равным количеству основных потоков < -threads >. Например при просмотре файла в программе Mediainfo это можно увидеть как: < threads=8 / lookahead_threads=8 / sliced_threads=1 / slices=8 / >. Установка slice влияет на качество, но не всегда однозначно и чаще в виду своих особенностей рекомендуется для кодирования поточного stream-video. Параметры кодирования для stream: < -threads 8 -thread_type slice > - значение -threads в примере приведено навскидку - задавайте то, которое нужно вам.
1
-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. Так же смотрите информацию здесь - ffmpeg-wiki-MPEG-4. Некоторые из ключей могут быть применимы для x264. FFmpeg использует по умолчанию часть стандарта MPEG-4, именуемую как Advanced Simple Profile (ASP), или иначе - MPEG-4 Part 2 (Visual), или иначе - ISO 14496-2 (Видео), которого так же придерживаются XviD и DivX)
MPEG4 ISO/IEC:

Ключ Описание По умолчанию
-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>. (MPEG-2, MPEG-4)
-flags +qprd Использовать оптимизацию соотношения сигнал-шум (rate distortion) для qp (quartet-pixel - четверть-пиксельного алгоритма). Требует включённого mbd значением не ниже, чем < -mbd 2 >. Флаг QPRD может не работать c некоторыми кодеками и энкодерами в последних версиях FFmpeg, в этом случае пробуйте заменить его на < -mpv_flags +qp_rd >. (MPEG-4, MPEG-2)
-flags +gmc Global Motion Compensation. Включение глобальной компенсации движения. (MPEG-4 only)
-flags +umv Unlimited Motion Vectors. Включить использование неограниченных векторов движения.
-flags +chroma Включаем хрома (цветовую) оптимизацию.
-flags < -loop/+loop > Отключение/Включение фильтра подавления блочности. (MPEG-2, MPEG-4)
-flags < -psnr/+psnr > Отключение/Включение расчета psnr. Отключение, немного, увеличит скорость кодирования. (MPEG-2, MPEG-4)
-flags cgop Установка открытой GOP, чтобы использовать точки восстановления для закрытия GOP. Эта функция требует установки -sc_threshold равным 1000000000. Пример: < -flags cgop -sc_threshold 1000000000 > (MPEG-2, MPEG-4)
-flags gray Кодировать-декодировать в оттенках серого
-flags ildct Установка алгоритма DCT для кодирования интерлейсного видео. Точнее о кодировании интерлейсного видео смотрите следующий ключ, шагом ниже. (MPEG-2, MPEG-4)
-flags ilme Форсировать (пропускать) интерлейсинг при кодировании. Опция поддерживается только в MPEG-2 и MPEG-4 кодерах. Используйте эту опцию, если ваш входной файл с чересстрочной разверткой и вы хотите сохранить чересстрочность с минимальными потерями. Оптимальной опцией для кодеров MPEG-2,4 будет < -flags +ildct+ilme -ildctcmp 1 или 2 >, так же актуально для кодирования с использованием x264 кодека. < -ildctcmp > - смотрите ниже в этой таблице.(MPEG-2, MPEG-4)
-mpv_flags <flag> Флаги общие для всех основных MPEG-Video энкодеров: flv, h261, h263, h264, mpeg1,2video, mpeg4. Возможные значения перечислены ниже. (MPEG-2, MPEG-4)
-mpv_flags +skip_rd Остаточный пропуск RD (rate distortion) для оптимального уровня MB (macroblock). Рекомендовано пробовать для качества. (MPEG-2, MPEG-4)
-mpv_flags +strict_gop Строго соблюдать размер GOP. (MPEG-2, MPEG-4)
-mpv_flags +qp_rd Использовать оптимизацию соотношения сигнал-шум (rate distortion) для qp (quartet-pixel - четверть-пиксельного алгоритма). (MPEG-2, MPEG-4)
-mpv_flags +cbp_rd Использовать оптимизацию соотношения сигнал-шум для CBP. CBP - параметр, который более тщательно рассчитывая искажения полученных блоков, находит не только искажения блоков, но и динамики потока. Требует включённой опции < -trellis > (MPEG-2, MPEG-4)
-cmp Chroma Motion Estimation (Point). Точечная функция оценки движения по цветности. Анализ движения (поиск векторов движения) не только по яркостной но и по цветовой составляющей. Если видео не имеет цветового шума и не является черно-белым, то рекомендуется эту опцию включить. Для чёрно-белых видео и видео с шумящим цветом можно попробовать отключить эту опцию. Значение по умолчанию - включено. Если не задать этот параметр, то кодер выставит его автоматически на основании анализа видео. Если вы нуждаетесь установить эту опцию вручную, для специфических случаев, то перечень возможных параметров указан ниже. (MPEG-2, MPEG-4) auto
-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 Cуб-точечная функция сравнения движения по цветности. Разновидность значений смотрите выше в графе -cmp. (MPEG-2, MPEG-4) 1
-precmp Препроход анализа движения по цветности. Разновидность значений смотрите выше в графе -cmp. (MPEG-2, MPEG-4) 1
-mbcmp Функция сравнения макро-блока (по умолчанию). Разновидность значений смотрите выше в графе -cmp. (MPEG-2, MPEG-4) 1
-mbd Macroblock Decision. Алгоритм принятия решения о макро-блоке. Основные значения: simple (1) - то же что и mbcmp (см. выше) - простая функция,- наименьшее качество. bits (2) - использовать наименьшее колличество бит для формирования блока, - оптимальное качество. rd - использовать уровень перед началом искажений, - лучшее качество. (MPEG-2, MPEG-4) 1
-dct Включение алгоритма DCT. Оптимальные значения: <auto>,<mmx>,<faan>. Где faan - это AAN DCT с плавающей точкой. (MPEG-2, MPEG-4) auto
-idct Select IDCT (Inverse Discrete Cosine Transform). Выбор реализации IDCT (обратного дискретно-косинусного преобразования): <auto>, <simplemmx>, <libmpeg2mmx>, <h264>, <xvidmmx>, <faani>. (MPEG-2, MPEG-4) auto
-dc Intra Digital Center Precision. Точность цифрового центра внутреннего косинусоидального преобразования DCT.
Возможные значения 8;9;10 - пример: < -dc 9 >. Наиболее точным являетя значение 10 и скорее всего подойдёт для оригинальной, качественной картинки, но - на практике лучше подбирать это значение индивидуально для каждого видео, ибо в определённых случаях, то или иное значение будет выглядеть либо хуже, либо лучше, - для конкретного видео (MPEG-2, MPEG-4)
-ildctcmp Функция черезстрочного (интерлейсного) DCT сравнения. Возможные значения смотрите выше, в графе cmp. В некоторых случаях и при некоторых суммарных настройках кодирования будут работать только значения 1 или 2. (MPEG-2, MPEG-4)
-me_method Алгоритмы оценки движения. Оптимальное значение для MPEG-2,4 только epzs: < -me_method epzs > оно же dia, оно же x1. (MPEG-2, MPEG-4) Возможные значения:
 zero  - нулевая оценка движения (не рекомендуется)
 log   - логическая оценка движения (низкое качество)
 phods - phods оценка движения (низкое качество)
 iter  - итеративная оценка движения (итеративный перекрывающийся блок)
 x1    - x1 оценка движения (один соседний пиксель) (экспериментальный, в данный момент псевдоним EPZS)
 epzs  - простейший поиск пикселя кадра, до соседних пикселей в соседнем кадре, - выше, правее, ниже, левее (MPEG-2,4)
 dia   - diamond type (тип алмазной огранки), - псевдоним для epzs (MPEG-2,4)
 hex   - hexagon (шестиугольник) - подобная epzs стратегия, но использует 6 окружающих точек (x264)
 umh   - multi hex (неравный мультишестиугольник) - медленнее чем hex, способен найти сложные векторы движения (x264)
 esa   - exhaustive (исчерпывающий) - интеллектуальный поиск по всей области векторов движения, псевдоним для full (x264)
 full  - полная оценка движения, тоже что и esa (x264) 
-dia_size Включение определения размера граней окна (ромб) «алмазной огранки» в пикселях, в алгоритме метода поиска движения diamond type в me_method < -me_method dia > - иными словами установка размера грани. Числовые значения от 1 и выше. Оптимально допустимое верхнее значение - 4. При значениях выше чем 4, будет выведено предупреждение о возможном неверном значении. Обычно алгоритм diamond type size (тип алмазной огранки), обсчитывает только 4 окружающих пикселя, по этому значение выше чем 4 по большему счёту бессмысленно, - но попробуйте поиграться с большими значениями, символизирующими более удалённые пикселя и больший размер окна (ромба), - но это может привести к артифактам и смазываню краёв. Теоретически, значение 1 (окно = точке) должно давать более точные края и частицы при кодировании, но при смазанных движениях - более уместными будут значения 2,3,4. Например, при установке значния -dia_size равным 4, при установке -pre_dia_size равным 1, будет выведено предупреждение о возможном неверном параметре. Вообщем и целом, - адекватное значение данного параметра подбирается опытным путём и желательно не должно превышать значения - 4. (MPEG-2, MPEG-4) 1-4
-pre_dia_size Включение предварительного анализа движения окружающего пикселя в установленном размере грани ключа -dia_size алгоритма diamond type. Описание см. выше. Подразумевает предварительный анализ размера возможного и допустимого движения, в пикселах (точках) относительно параметра -dia_size. Из описания выше следует, что ромбовидное окно -dia_size с размером стороны в 4 пиксела, скорее всего будет иметь очень плохой анализ возможной дальности окружения при движении, если -pre_dia_size будет равен - 1, вследствие чего кодер выведет предупреждение об этом на стандартный вывод терминала. (MPEG-2, MPEG-4)
О предпроходах и теории рендеринга можно ознакомится в относительно родственных статьях: Что такое предпроходы IM?, Diamond Types
И в этих, более родственных: Diamond-square algorithm, Moving average algorithms for diamond
1-4
-me_range <integer> Диапазон поиска векторов при анализе движения. Зависит от частоты кадров исходного видео (для меньшего fps требуются большие значения range). Из шаблона Main Concept, для кодека <mpeg4> актуально значение < -me_range 64 >. Подробнее смотрите выше, в таблице для x264
Для DivX Player и MPEG-2 - не выше чем < -me_range 1023 >
-preme Включение алгоритма обсчёта предварительного движения (колличество предпроходов). Значения от 1 и выше. (MPEG-2, MPEG-4)
-last_pred Установить колличество предсказателей движения из предыдущего кадра. Значения от 1 и выше. При больших значениях может очень сильно замедлить кодирование. Из учёта логики алгоритма diamond type (см. графу значений me_method) - минимально-оптимальным значением для данного алгоритма будет 4 или даже - 6-8. (MPEG-2, MPEG-4)
-chroma_elim_threshold Порог отбрасывания одиночного коэффициента цветности (включая отрицательные значения). Коррекция цветности, - целое. (MPEG-4 only) 0
-luma_elim_threshold Порог отбрасывания одиночного коэффициента яркости (включая отрицательные значения). Коррекция яркости, - целое. (MPEG-4 only) 0
-qscale Задаем статический квант. Иногда для конкретизации требуется ввести для видео: < -q:v «значение» > пример < -q:v 1 >. (MPEG-2, MPEG-4)
-b_strategy Стратегия выбора I/P/B кадров. 0 - выключено, 1 - включено. Заметьте, что параметры этой опции в MPEG-4 ISO/IEC и MPEG-2 отличаются от параметров использования этой же опции в x264. (MPEG-2, MPEG-4)
-mpeg_quant Выбор матрицы квантования mpeg, - не совместимо с < -flags +aic >, значение: < -mpeg_quant 1 >
-bf <1-3> Задаем количество В-фреймов. (MPEG-2, MPEG-4)
-trellis <0-2> Задаем уровень треллис квантования. Решётчатое квантование для повышения сжатия. <0> - выкл. <1> - на макроблоках. <2> - на всём. При значении <2> может замыливать картинку. Все значения кроме нуля замедляют кодирование. (MPEG-2, MPEG-4) auto
-vtag <tag> Смотрите выше, в таблице для кодека x264 FMP4

работа в ffmpeg с форматами mpeg-2 и DVD

1. Кодирование

  • Для кодирования в MPEG-2 могут подойти некоторые параметры из таблицы кодеков семейства MPEG-4. Для наглядности, вот вам стандартная строка для кодирования в MPEG-2 c закрытой GOP-структурой, переменным битрейтом, постоянным высоким качеством и адаптивно-дефолтной ffmpeg-матрицей квантования, - пригодная для двухслойной DVD-заготовки:
-ffmpeg -i /home/usr/video/video.avi -pix_fmt yuv420p -s 720x576 -sar 1:1 -aspect 16:9 -f dvd -mpeg_quant 1 -c:v mpeg2video -b:v 8000K -minrate 8000K -maxrate 8000K -r 25 -g 13 -bf 2 -b_strategy 1 -keyint_min 1 -qmin 1 -flags cgop -sc_threshold 1000000000 -flags +loop+mv0 -mpv_flags +skip_rd+qp_rd+cbp_rd -dct faan -dc 10 -mbd rd -cmp 3 -subcmp 3 -me_method epzs -me_range 1023 -subq 5 -trellis 2 -c:a ac3 -ac 6 -ab 384K -ar 48000 /home/usr/video/video.mpg

Данный пример даёт отличное качество как для двухслойной заготовки (DVD-9), так и для DVD-4.5 … Опцию +loop можно отменить в зависимости от случая, особенно если эффект замыливания становится слишком заметным. Так же в зависимости от ситуации можно увеличить опцию -subq и покрутить опцию -trellis от 2 до 0 (полного отключения) и увеличить опции < -cmp > и < -subcmp > до значения rd, в купе с опцией < -mbd >. Отсматривая конечные, опытные результаты на некотором кодируемом куске видео, в котором желательно должны присутствовать все типы сцен - от статических, до сцен со сложным и размашистым движением…

Для расчёта битрейта видеофайла под определённый тип 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 всегда выставляйте 720×576, независимо от размера входного кадра, ибо соотношение сторон определяется функцией < -aspect >. При фреймрейте 30 кадр/сек, 30(29.970)fps NTSC - размер кадра нужно установить 720×480 во избежание ошибок определения типа видео, декодерами.
Для кодирования 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, который имеет свою адаптивную матрицу распределения квантов.

2. Работа с DVD директориями и файлами типа *.vob

  • Одним из самых необходимых действий при конвертации DVD-папок, может стать объединение их файлов *.vob, которые являются содержимым папки DVD - VIDEO_TS и частями (сегментами) видео. Например структура папки выглядит примерно следующим образом:
VIDEO_TS.BUP
VIDEO_TS.IFO
VIDEO_TS.VOB
VTS_01_0.BUP
VTS_01_0.IFO
VTS_01_0.VOB
VTS_01_1.VOB
VTS_01_2.VOB
VTS_01_3.VOB
VTS_01_4.VOB

Где файл VIDEO_TS.VOB - является файлом меню DVD-диска, а файлы с VTS_01_0.VOB по VTS_01_4.VOB - являются сегментами фильма. Чтобы их объеденить средствами FFmpeg, применяется команда < concat >, - < -i concat:«segment-1|segment-2» >, - пример:

ffmpeg -i concat:"/home/user/VIDEO_TS\VTS_01_0.VOB|/home/user/VIDEO_TS\VTS_01_1.VOB|/home/user/VIDEO_TS\VTS_01_2.VOB|/home/user/VIDEO_TS\VTS_01_3.VOB|/home/user/VIDEO_TS\VTS_01_4.VOB" -vcodec copy -acodec copy /home/user/video.vob
  • В случае если вы получаете разного рода ошибки с буфером (или ещё какие то), то это означает «кривость» файла вследствие использования «кривых» кодеков или недостаточно «прямого» программного обеспечения, не исключая ошибки пользователей при создании DVD-диска. Вылечить это, как правило удобнее и быстрее всего при помощи предварительного разжатия файла в RAW-формат, для последующего его пережатия в желаемый для вас формат, например:
ffmpeg -i concat:"/home/user/VIDEO_TS\VTS_01_0.VOB|/home/user/VIDEO_TS\VTS_01_1.VOB|/home/user/VIDEO_TS\VTS_01_2.VOB|/home/user/VIDEO_TS\VTS_01_3.VOB|/home/user/VIDEO_TS\VTS_01_4.VOB" -f avi -vcodec ffv1 -intra -qscale 1 -acodec pcm_s16le /home/user/video.avi

Ключи параметров FFmpeg для Аудио

Audio:

КлючОписаниеПо умолчанию
Main Audio Option - Основные Аудио Опции
-ab <bitrate> Битрейт аудио. Пример: < -ab 256k >. Опция устарела, используйте < -b:a 256k > 64kbit/s
-ac <channels> Количество каналов. Пример: -aс 6 2
-ar <freq> Частота дискредитации. Пример: -ar 48000 44100Hz
-q:a <1> Качество аудио. Пример: < -q:a 1 >, где 1 - высшее качество по шкале. При установленном битрейте включает VBR. См. так же qscale.
-vol <volume> Изменение уровня громкости аудио, где 256=normal. Пример: -vol 256
-af <filter> Включение функции добавления фильтров для аудио. Cмотрите ссылку в таблице x264 в графе < -vf >. Этот список так же можно вызвать командой в терминале: ffmpeg -filters или подробнее с примерами FFmpeg-filters. Опция (ключ) < -af > должна стоять в строке задачи после ключа < -acodec > (c:a), в разделе строки для ключей аудио, в противном случае аудиофильтр работать не будет.
Пример применения -af: ускорение темпа на 4.26%: < -af atempo=1.0426 > - подробнее смотрите в главе фильтров данного мануала.
Advanced Audio Option - Продвинутые Аудио Опции
-atag <fourcc/tag> Установка и изменение fourcc тега для аудио
-channel_layout <layout> Включение схемы распределения каналов для многоканальных аудиодорожек. см Channel-Layout
-apre <preset> Установка указанного пресета для аудиодорожки
-aframes <number> Установка количества кадров аудиозаписи. Эта опция является псевдонимом с опцией < -frames:a >

кодеки и енкодеры FFmpeg для аудио

1. Audio Encoders. Waveform Audio File Format
(WAVE, WAV, от waveform - в форме волны) - формат контейнера файла для хранения записи оцифрованного аудиопотока, подвид RIFF. Этот контейнер как правило используется для хранения несжатого звука в Pulse Code Modulation (PCM) Импульсно-Кодовой Модуляции. Однако контейнер не налагает каких-либо ограничений на используемый алгоритм кодирования. Общими словами WAV - это формат хранения звука. Он всегда имеет заголовок файла, содержащий информацию о размере файла, частоте пр. WAV может быть как планарный (содержащий несжатую информацию), так и сжатый различными типами кодеков, поддерживающих RIFF заголовок от микрософт. Звук, записанный в планарный WAV 44 кГц, 16 бит, стерео - приравнивается по качеству к Audio CD. Классический, наиболее часто используемый кодек для контейнера *.wav - это PCM, который при использовании в FFmpeg имеет свои основные алгоритмы кодирования и синтаксис для установки. Наиболее часто встречающийся и многосовместимый алгоритм PCM - это < pcm_s16le >, установка в качестве кодека < -acodec pcm_s16le>. Пример толкования синтаксиса и разновидностей установок для PCM WAV:

floating point   - с плавающей запятой (точкой), signed - подписанный, unsigned - не подписанный.
big-endian       - от старшего бита к младшему (тупоконечный), 
little-endian    - прямой порядок байтов (остроконечный), 
planar           - плоский (содержащий несжатую информацию)
примеры установки:
pcm_alaw             PCM A-law / G.711 A-law
pcm_f32be            PCM 32-bit floating point big-endian
pcm_f32le            PCM 32-bit floating point little-endian
pcm_f64be            PCM 64-bit floating point big-endian
pcm_f64le            PCM 64-bit floating point little-endian
pcm_mulaw            PCM mu-law / G.711 mu-law
pcm_s16be            PCM signed 16-bit big-endian
pcm_s16be_planar     PCM signed 16-bit big-endian planar
pcm_s16le            PCM signed 16-bit little-endian
pcm_s16le_planar     PCM signed 16-bit little-endian planar
pcm_s24be            PCM signed 24-bit big-endian
pcm_s24daud          PCM D-Cinema audio signed 24-bit
pcm_s24le            PCM signed 24-bit little-endian
pcm_s24le_planar     PCM signed 24-bit little-endian planar
pcm_s32be            PCM signed 32-bit big-endian
pcm_s32le            PCM signed 32-bit little-endian
pcm_s32le_planar     PCM signed 32-bit little-endian planar
pcm_s8               PCM signed 8-bit
pcm_s8_planar        PCM signed 8-bit planar
pcm_u16be            PCM unsigned 16-bit big-endian
pcm_u16le            PCM unsigned 16-bit little-endian
pcm_u24be            PCM unsigned 24-bit big-endian
pcm_u24le            PCM unsigned 24-bit little-endian
pcm_u32be            PCM unsigned 32-bit big-endian
pcm_u32le            PCM unsigned 32-bit little-endian
pcm_u8               PCM unsigned 8-bit

Смотрите так же поясняющие статьи wiki-Порядок байтов и wiki-Цифровые аудиоформаты.

2. Audio Encoders. wavpack
WavPack lossless audio encoder. - wiki-WavPack - Свободный и универсальный lossless и lossy аудиокодек. Позволяет сжимать (и восстанавливать) 8, 16, 24 и 32-битные аудиофайлы. Поддерживает многоканальные потоки (до 255) и высокие частоты дискретизации (до 192Кгц). Эффективность сжатия зависит от исходных данных, но обычно оно лежит в диапазоне между 30% и 70% для обычной популярной музыки, выше для классической музыки и других аудиоданных с более широким динамическим диапазоном. WavPack lossless audio encoder - это родной libavcodec WavPack кодер. Существует также кодер на основе libwavpack, но нет практически никаких оснований использовать его. Так же как и предыдущий, относится к категории кодеков без потерь. Имеет свои приватные опции:

Общие параметры:
<frame_size (--blocksize)> -  Диапазон для этого кодера в пределах 128-131072. 
По умолчанию определяется автоматически на основе частоты дискретизации и количества каналов.
Приватные опции:
<joint_stereo (-j)> - Установка включения смешанного стерео:
- <on (1)>  - Форсировать mid/side для кодирования аудио.
- <off (0)> - Форсировать left/right для кодирования аудио.
- <auto>    - Разрешить кодеру автоматически выставить опции обозначенные выше.
<optimize_mono - Включить оптимизацию моно. Эта опция только для не-моно потоков. Возможные значения:
- <on>      - включено.
- <off>     - отключено. 

Смотрите как же для mid/side и left/right - Основы Mid-Side записи

3. Audio Encoders. aac
Advanced Audio Coding (AAC) encoder. - Этот кодер является экспериментальным, родным для ffmpeg. В настоящее время поддерживается только профиль с низкой сложностью (AAC-LC). Чтобы использовать этот кодер, вы должны установить опцию <strict> для «experimental», например: < -acodec aac -strict experimental >. Так как этот кодер является экспериментальным, то он может вести себя несколько не стабильно время от времени. Для более стабильного кодирования в AAC можно применять энкодер libvo-aacenc, но имейте в виду, что он имеет худшее качество по сообщениям некоторых пользователей.
VisualOn AAC encoder - Требует присутствие libvo-aacenc заголовков и библиотеки при сборке ffmpeg. Вам необходимо настроить сборку с опцией –enable-libvo-aacenc –enable-version3. Этот кодер считается худшим, чем нативный экспериментальный FFmpeg AAC кодер aac -strict experimental, по заявлению пользователей. Пример установки: < -acodec libvo_aacenc >.
Libfaac AAC (Advanced Audio Coding) encoder wrapper. - Несвободный энкодер. Требует присутствие libfaac заголовков и библиотеки во время сборки ffmpeg. Вам необходимо настроить сборку с опцией –enable-libfaac –enable-nonfree. Этот кодер считается более качественным по отношению к aac -strict experimental. Для получения дополнительной информации см. проект libfaac - FAAC. Пример установки: < -acodec libfaac >. Помимо основных опций, указанных выше в таблице, имеет свои опции, которые можно посмотреть по заглавной ссылке. Имеет свои установленные профили кодирования:

<profile> - Установка профиля кодирования. Используемые профили:
- <aac_main>     - Main - Основной профиль.
- <aac_low>      - Low Complexity AAC (LC) - Низкая сложность (по умолчанию).
- <aac_ssr>      - Scalable Sample Rate (SSR) - Масштабируемая частота дискретизации.
- <aac_ltp>      - Long Term Prediction (LTP) -  Долгосрочное прогнозирование.
<flags +qscale>  - Установка постоянного качества в режиме VBR (Variable Bit Rate - Переменного Битрейта)
<global_quality> - Установка качества в режиме VBR при включённом +qscale, в виде цельного числа от [10-500]. Чем выше значение, тем выше качество.

Libfdk-aac AAC (Advanced Audio Coding) encoder wrapper. - Библиотека libfdk-aac основана на проекте Институт интегральных схем общества Фраунгофера - FDK AAC кодер, из проекта Android. Требует присутствие libfdk-aac заголовков и библиотеки во время настройки при сборке ffmpeg. Вам необходимо явно настроить сборку с опцией –enable-libfdk-aac. Библиотека также несовместима с GPL, так что если вы разрешаете использование GPL, то вы должны настроить компиляцию (сборку) ffmpeg с опциями -enable-gpl –enable-nonfree –enable-libfdk-aac. Этот кодер считается более высококачественным в отношении родного кодера aac -strict experimental и так же вышеупомянутого libfaac. Пример установки: < -acodec libfdk_aac >. Помимо основных опций, указанных выше в таблице, имеет свои опции, которые можно посмотреть по заглавной ссылке. Имеет свои установленные профили кодирования:

<profile> - Установка профиля кодирования. Используемые профили:
- <aac_low>      - Low Complexity AAC (LC) - Низкая сложность (по умолчанию). Позволяет кодировать с постоянным битрейтом выше 128К.
- <aac_he>       - High Efficiency AAC (HE-AAC) - Высокая эффективность. Позволяет кодировать с переменным битрейтом от 128К до установленного.
- <aac_he_v2>    - High Efficiency AAC version 2 (HE-AACv2) - Высокая эффективность AAC версия 2. Позоляет кодировать с переменным битрейтом.
- <aac_ld>       - Low Delay AAC (LD) - Низкая задержка AAC.
- <aac_eld>      - Enhanced Low Delay AAC (ELD) - Улучшенная малая задержка AAC.
<flags +qscale>  - Установка постоянного качества в режиме VBR (Variable Bit Rate - Переменного Битрейта)

4. Audio Encoders. ac3 and ac3_fixed
AC-3 audio encoders - Эти энкодеры реализуют часть стандарта ATSC A/52:2010 and ETSI TS 102 366, а так же недокументированный RealAudio 3 (a.k.a. dnet). AC3 кодер использует арифметику с плавающей точкой, в то время как ac3_fixed кодер использует только фиксированную точку цельночисленной математики. Это вовсе не означает, что один энкодер всегда будет быстрее чем другой, по этому тот или иной могут лучше подходить для конкретной системы. AC3 с плавающей точкой обычно дает более высокое качество звука для данного битрейта. AC3_fixed кодер не является кодеком по умолчанию для любого из выходных форматов, по этому он должен быть указан явно, c использованием конкретной опции < -acodec ac3_fixed >. Имеет большой набор опций, которые можно посмотреть по заглавной ссылке.

5. Audio Encoders. libvorbis
Libvorbis encoder wrapper - wiki-Vorbis - Свободный формат сжатия звука с потерями, официально появившийся летом 2002 года. По функциональности и качеству аналогичен таким кодекам как AAC, AC3 и VQF, превосходящим MP3. Для хранения аудиоданных в формате Vorbis чаще всего применяется медиаконтейнер Ogg, такой файл обычно имеет расширение *.ogg и называется двойным именем «Ogg/Vorbis». Требует присутствие libvorbisenc заголовков и библиотеки во время сборки и настройки ffmpeg. Вам необходимо настроить сборку ffmpeg с опцией –enable-libvorbis. Помимо основных опций, указанных выше в таблице, имеет свои приватные опции:

<cutoff (--advanced-encode-option lowpass_frequency=N)> - Полоса пропускания в Гц. Вариант OggEnc выражается в кГц. По умолчанию '0' (отключено).
<minrate (-m)> - Установить минимальный битрейт в килобит/сек.
<maxrate (-M)> - Установите максимальный битрейт в килобит/сек.
<iblock (--advanced-encode-option impulse_noisetune=N)> - Порог шума для импульсных блоков. Представляет собой число от -15.0 до 0.0, где: 
отрицательное смещение указывает регулятору обратить особое внимание на четкость переходных процессов в кодированном аудио.

6. Audio Encoders. libopus
Libopus Opus Interactive Audio Codec encoder wrapper - wiki-Opus (ранее Harmony) - Аудиокодек для сжатия с потерями, разработанный сообществом Internet Engineering Task Force (IETF) специально для применения в приложениях реального времени в интернете. Является открытым форматом стандартизованным в RFC 6716, a эталонная реализация распространяется под 3-условной лицензией BSD. Формат битового потока был зафиксирован 8 января 2012 года. Opus продемонстрировал высокое качество на битрейте 64 кбит/с по сравнению с Apple HE-AAC, Nero HE-AAC, Vorbis и AAC LC. Требует присутствия libopus заголовков и библиотеки во время сборки настройки ffmpeg. Вам необходимо настроить сборку ffmpeg с опцией –enable-libopus. Помимо основных опций, указанных выше в таблице, имеет свои приватные опции:

<vbr> - Установка режима VBR. Опция FFmpeg 'VBR' имеет следующие весомые аргументы , с их opusenc эквивалентными вариантов в скобках:
- <off, (hard-cbr)>    - VBR выключено, использует кодировку в Constant Bit Rate - постоянном битрейте.
- <on, (vbr)>          - Использет кодирование с VBR - переменной битовой скоростью (по умолчанию). 
- <constrained (cvbr)> - Использует ограниченную кодировку с VBR - переменным битрейтом.
<compression_level, (comp)>  - Cложность алгоритма. Допустимы значения в диапазоне 0-10, где 0 дает быструю скорость, но низкое качество.
<frame_duration (framesize)> - Длительность кадра в миллисекундах со значениями 2.5; 5; 10; 20; 40; 60.
Размеры больше, чем 20 мс интересны только при достаточно низких битрейтах. По умолчанию используется 20 мс. 
Меньшие размеры дают меньшую латентность, но меньше качество при заданном битрейте. 
<packet_loss (expect-loss)>  - Устанавливает ожидаемый процент потери пакетов. По умолчанию - 0. 
<application (N.A.)> - Включает перечисленный тип приложений:
- <voip>        - Улучшенная разборчивость речи.
- <audio>       - Предпочтение точности отображения входа кодирования (по умолчанию)
- <lowdelay>    - Ограничение только для самых низких режимов задержки.
<cutoff (N.A.)> - Полоса пропускания в Гц в значениях: 4000, 6000, 8000, 12000, или 20000. По умолчанию - 0 (отключено)

7. Audio Encoders. libtwolame
TwoLAME MP2 encoder wrapper - Оптимизированная обертка для MPEG-1 Audio Layer II (MP2) энкодера на основе проекта tooLAME, Майка Ченга (Mike Cheng). Требует присутствие libtwolame заголовков и библиотеки при настройке и сборке ffmpeg. Вам необходимо настроить сборку ffmpeg с опцией –enable-libtwolame. Эффективны так же для применения родственные энкодеры - mpeg2video и mp2 (аудио).

<mode (--mode)>  - Установить режим полученного аудио. Возможные значения:
- <auto>         - Автовыбор режима (по умолчанию).
- <stereo>       - Установка режима стерео.
- <joint_stereo> - Установка режима смешанного (объединённого) стерео.
- <dual_channel> - Установка двуканального режима.
- <mono>         - Установка одноканального режима (моно).
<psymodel (--psyc-mode)>       - Установка психоакустической модели, - целое число от -1 до 4. Чем выше значение, тем лучше качество. По умолчанию 3.
<energy_levels (--energy)>     - Устанавливает уровень энергичности при включении. По умолчанию '0' - выключено.
<error_protection (--protect)> - Включает защиту от ошибок CRC, когда установлен в 1. Значение по умолчанию '0' - выключено.
<copyright (--copyright)>      - Устанавливает флаг соответствия авторскому праву (копирайт). Значение по умолчанию '0' - выключено.
<original (--original)>        - Устанавливает флаг соответствия оригиналу. Значение по умолчанию '0' - выключено.

8. Audio Encoders. libmp3lame
LAME MP3 encoder wrapper - Это не энкодер MP3, а обёртка для MP3 энкодера. Требует присутствия libmp3lame заголовков и библиотеки во время сборки и настройки ffmpeg. Вам необходимо настроить сборку ffmpeg с опцией –enable-libmp3lame. Кодер имеет свои приватные опции:

<q (-V)> - Постоянный параметр качества VBR, только для инструмента командной строки. При использовании интерфейса библиотеки - 'global_quality'. 
<compression_level> (не путать с опцией -q) - качество алгоритма, целые числа в диапазоне 0-9, где '0' означает кодирование с высоким качеством.
<reservoir> - Использование резервуара бит, значение '1' (по умолчанию). В LAME это включено по умолчанию, но может быть отключено опцией --nores.
<joint_stereo> - Включает кодер для использования на покадровой основе. Либо стерео, либо mid/side (смешанное) стерео. По умолчанию '1'.
<abr (--abr)> - Использовать ABR, значение - '1'. Задает целевой битрейт, в то время как ffmpeg используя ABR, по прежнему полагается на опцию '-b'. 

Работа с MP3 тегами. MP3 мультиплексор пишет сырой поток MP3 с заголовком тега ID3v2 в начале и возможно с заголовком тега ID3v1 в конце. ID3v2.3 и ID3v2.4 поддерживаются элементы управления id3v2_version где опция управляет тем, какой из них будет использоваться. Установка id3v2_version в 0 отключит заголовок ID3v2 полностью. Наследие ID3v1 тегов не написано по умолчанию, но может быть включено с опцией write_id3v1. Мультиплексор также может записать Xing кадр в начале, который содержит количество кадров в файле. Это полезно для вычисления продолжительности VBR файлов. Xing кадр записывается, если выходной поток поддерживает поиск и если опция write_xing установлена в 1 (по умолчанию). Мультиплексор поддерживает запись ID3v2 с приложенными фотографиями (APIC кадры). Фотографии подаются в мультиплексор в виде видеопотока с одиночного пакета. Там может быть любое количество этих потоков, каждый из них будет соответствовать одному APIC кадру. Потоки метаданных, теги названий и комментарии карт к описанию APIC кадров и их поддерживаемых типов изображений - см. http://id3.org/id3v2.4.0-frames - для поддерживаемых и разрешённых типов картинок. Обратите внимание, что APIC кадры должны быть записаны в начале, так как мультиплексор будет буферизировать кадры звука, пока не получит все фотографии. Поэтому рекомендуется предоставить файлы фотографий как можно скорее, чтобы избежать чрезмерной буферизации аудиопотока.
Примеры:

Запись mp3 с заголовком ID3v2.3 и с нижним колонтитулом ID3v1:
ffmpeg -i "/home/user/audio.mp3" -id3v2_version 3 -write_id3v1 1 "/home/user/audio-out.mp3"
Прикрепить фотографию в MP3-файл, одновременно переключая потоки на аудио поток и поток изображения с картами потоков < -map >: 
ffmpeg -i "/home/user/audio.mp3" -i "/home/dat/cover.png" -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover" "/home/user/audio-out.mp3"
Записать "чистый" MP3 без каких-либо дополнительных функций: 	
ffmpeg -i "/home/user/input.wav" -write_xing 0 -id3v2_version 0 "/home/user/audio-out.mp3"
  • Установка пакета id3v2 возможна из репозиториев Ubuntu:
sudo apt-get install id3v2
Шаблон использования:
id3v2 [OPTION]... [FILE]...
  • Опции для использования id3v2
  -h,  --help               Показать справку
  -f,  --list-frames        Показать (лист) всех возможных кадров для id3v2
  -L,  --list-genres        Показать (лист) все возможных жанров для id3v1
  -v,  --version            Показать версию продукта
  -l,  --list               Показать лист тегов в файле
  -R,  --list-rfc822        Показать лист rfc822, использующий формат rfc822 для вывода
  -d,  --delete-v2          Удалить id3v2 тэг
  -s,  --delete-v1          удалить id3v1 тэг
  -D,  --delete-all         Удалить все id3v1 и id3v2 теги
  -C,  --convert            Конвертировать id3v1 тег в id3v2
  -1,  --id3v1-only         Записать только id3v1 тэг
  -2,  --id3v2-only         Записать только id3v2 тэг
  -r,  --remove-frame "FRAMEID"   Удаляет заданный кадр id3v2
  -a,  --artist       "ARTIST"    Устанавливает информацию об исполнителе
  -A,  --album        "ALBUM"     Устанавливает информацию об альбоме
  -t,  --song         "SONG"      Устанавливает информацию об песне
  -c,  --comment      "DESCRIPTION":"COMMENT":"LANGUAGE"  
                            Установить коментарий (все описания и языки)
  -g,  --genre   num        Установить колличество жанров
  -y,  --year    num        Установить год выпуска альбома или фильма
  -T,  --track   num/num    Установить номер трека и колличество треков

Вы можете установить значение для любого ID3v2 в кадре с помощью '-' а затем кадр идентификатор. Например:

id3v2 -TIT3 "Monkey!" file.mp3

Или установить «Subtitle/Description» frame to «Monkey!».
Для новичков и любителей GUI так же будет полезна родственная статья из help.ubuntu: Исправление кодировки тегов в аудиофайлах.
Для любителей командной строки - смотреть здесь: ID3-теги, mp3, Ubuntu Linux и Android

работа с аудио для видео

  • Расщепление многоканальной аудиодорожки фильма 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 … и соответственно, в исходной папке дорожки стоит проименовать согласно каналам, которые они олицетворяют (см. пример). Это особенно важно для правильной сборки дорожки, во избежания путаницы каналов в результирующем треке и ухудшения звучания самого трека … Об опциях конфигурации каналов для всевозможных случаев можно посмотреть здесь: Channel Layout.
Пример:

ffmpeg -i /home/user/video/fc.wav \
-i /home/user/video/fl.wav \
-i /home/user/video/fr.wav \
-i /home/user/video/lfe.wav \
-i /home/user/video/sl.wav \
-i /home/user/video/sr.wav \
-c:a pcm_s16le -filter_complex join=inputs=6:channel_layout='5.1(side)' \
/home/user/video/51.wav
  • Изменение скорости воспроизведения аудиодорожки при переводе видео с 23,976 fps до 25 fps. Смотрите в разделе «Применение».

Полезные фильтры -vf, -af

Полный перечень фильтров видео-vf и аудио-af можно посмотреть в родительской документации FFmpeg, здесь: FFmpeg Filters Documentation. В данном же мануале мы попытаемся рассмотреть наиболее необходимые фильтры, в которых наиболее чаще возникает необходимость в процессе кодирования.

1. Работа с чёрными полями кадра средствами ffmpeg

  • Обрезка чёрных полей в кадре… Для обрезки чёрных полей видеокадра в FFmpeg используется функция видеофильтра crop:

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

-vf crop=128:128        - обрезка изображения по центру кадра, до размеров 128x128 пикселей.
-vf crop=128:128:0:0    - обрезка изображения до размеров 128x128 пикселей, - точно от левого верхнего угла.
несимметричная обрезка:
-vf crop=718:502:2:74   - несимметричная обрезка, - от левого верхнего угла - левая сторона и верх.
-vf crop=710:428:-8:-74 - несимметричная обрезка, правая сторона и низ (задаётся второй установкой с отрицательными значениями).
или вкупе:
-vf crop=718:502:2:74,crop=710:428:-8:-74,scale=720:400:flags=bicubic -sar 1:1 -aspect 16:9
симметричная обрезка:
-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

Внимание: При несимметричной обрезке значения width:height и x:y являются взаимозависимыми и, например, изменение x на 2 пикселя должно отразиться на значении width, которое от исходного 720 должно быть установлено в 718. Вторая установка фильтра по обрезке низ-право должна брать исходными значения после обрезки лево-верх в первой установке, см. пример выше. Для большего удобства и точности обрезку лучше вести с предпросмотром, добавляя по паре пикселей за раз и отсматривая изменения на результате кодирования, в качестве которого достаточного небольшого фрагмента видео.

  • Добавление чёрных полей в кадр… Для добавления чёрных полей в кадр, используются функции видеофильтра scale и pad. Это бывает необходимо когда вы встраиваете широкоэкранные аспекты типа 2.24; 2.35; 2.0 - в размер аспекта 16:9, ибо не все плейеры понимают и хорошо работают с широкоэкранными аспектами 2.24; 2.35; 2.0
-vf scale=720:320:sws_flags=bicubic,pad=720:400:x:y:black

Смотрите также главу Scaler Options - варианты (флаги) масштабирования для фильтра scale.

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

  • У фильра scale - есть так же ряд интересных возможностей, например таких как установка или коррекция цветового диапазона видео, наподобие функций < input-range:range > как у кодека x.264 с тем отличием, что эти функции заточены исключительно для работы с кодеком x.264, а аналогичные опции от видеофильтра могут применяться перед установкой какого либо кодека для кодирования видеофайла, а так же при работе с raw и lossless форматами, например:

< in_range > - опция для установки входного диапазона уровня цветности, принимает значения: auto - автовыбор; jpeg/full/pc - включение полного диапазона цветности (0-255 с яркостью в 8-bit); mpeg/tv - установка диапазона MPEG(TV) (16-235 с яркостью в 8-bit)
< out_range > - принимает те же значения, что и < in_range >

-vf scale=in_range=tv:out_range=full

2. Telecine

  • Фильтр телекино (телесин) - обращает эффект пуллдаун (pulldown) к предыдущей частоте кадров видео, использованной до применения эффекта pulldown, используя эффект reverse pulldown, например обратное преобразование: 23,976 → 29,970 fps или 24 (23,976) → 25 fps. Фильтр более актуален для преобразования интерлейсного видео, соответственно до применения фильтра деинтерлейсинга или без применения оного вообще.
    Фильтр имеет опции:
top, t    - установка метки верхнего поля, если видео с top-interlace последовательностью
bottom, b - установка метки нижнего поля, если видео с bottom-interlace последовательностью
pattern   - по умолчанию значение равно 23, но реально значение будет зависеть от того какой именно тип видео вы обращаете:
NTSC output (30i):
24p = 23 (classic)
24p = 2332 (preferred)
PAL output (25i):
24p = 222222222223 ("Euro pulldown")

где:
24p = 23 (classic) - это инверсия (реверс) видео с 23.976fps до 29.970fps, после применения классического «NTSC 2:3 пуллдаун».
24p = 2332 - это универсальный алгоритм инверсии видео после применения, как «NTSC 2:3 пуллдаун» так и «NTSC 3:2 пуллдаун».
24p = 222222222223 - это инверсия видео с 24fps до 25 fps, после применения «PAL 2:2:2:2:2:2:2:2:2:2:2:3 пуллдаун», где каждый 12-й кадр показывается за время длительности трёх полей, вместо двух. Этот пуллдаун помогает избежать проблемы 4%-го ускорения видеофайла, но делает обращение процесса существенно более сложным по сравнению с классическим PAL 2:2 pulldown, который приводит к 4%-му ускорению видеофайла. PAL 2:2:2:2:2:2:2:2:2:2:2:3 пулдаун более актуален для музыкальных произведений, где изменение скорости звука на 4% может сместить тон и существенно повредить музыкальную партитуру. Если вы видите попеременную гребёнку каждые полсекунды, ваше видео скорее всего представляет собой 2:2:2:2:2:2:2:2:2:2:2:3 пуллдаун. В этом случае скорость аудиодорожки скорее всего изменять не придётся, но проверяйте это опытным путём. Если же вы не видите в видеофайле никакой гребёнки, то скорее всего ваш фильм есть PAL 2:2 пулдаун, где каждый кадр показывается за время длительности двух полей путем извлечения чётных и нечётных строк и в подобном случае лучше прибегать к методу ускорения-замедления видео-аудиопотока для соответствия желаемой вами частоты кадров на выходе, путём установки соответствующего ключа < -r framerate > на входе строки кодирования. Смотрите в таблице основных и дополнительных ключей ffmpeg и в разделе Применение - Изменение скорости воспроизведения видеопотока с 23.976 до 25 fps.

  • Строка кодирования не работает без выбора кодека видео и лучше всего работает через перекодирование материала в raw или lossless форматы.
    Пример строки кодирования:
23.976fps -> 29.970fps:
ffmpeg -i /home/user/video-23,976.avi -vf telecine=top:pattern=2332 -vcodec ffvhuff -acodec pcm_s16le /home/user/video-29.970.avi
23.976fps -> 24.975fps:
ffmpeg -i /home/user/video-23,976.avi -vf telecine=top:pattern=222222222223 -r 25 -vcodec ffvhuff -acodec pcm_s16le /home/user/video-25.avi
ключ < -r 25 > нужен для округления значения выходного фреймрейта с дробного числа до целого.
пример с параллельным применением деинтерлейсинга:
ffmpeg -i /home/user/video-23,976.avi -vf telecine=top:pattern=222222222223,kerndeint=thresh=0,mcdeint=2:0:10 -r 25 -vcodec ffvhuff -acodec pcm_s16le /home/user/video-25.avi

3. Fieldmatch

  • Разделитель и согласователь полей. Фильтр для обратного пересчета кадров при восстановлении прогрессивных кадров из telecine потока. Фильтр не «дропает» (не пропускает, не скидывает, не удаляет) дублированные кадры, по этому для достижения полного эффекта обратного пересчета кадров, - fieldmatch должен идти в купе с фильтром decimate, освещённым ниже. Это как бы вспомогательный фильтр для decimate, заточенный на работу с трудными полями и их возможными погрешностями после операции с telecine. Разделение, согласования полей и их прореживание предполагает возможность вставки фильтра деинтерлейсинга между ними. Если источник имеет как смешанный телесин так и реально чересстрочной контент, то fieldmatch не сможет сопоставить поля (полукадры) при пересчёте интерлейсинга. Но эти оставшиеся кадры с гребенкой будут помечены как кадры с чересстрочной разверткой. Именно в этих случаях полезным будет применить какой нибудь фильтр деинтерлейсинга, типа yadif или kerndeint, - после применения fieldmatch и до применения decimate в строке кодирования. Фильтр использует те же алгоритмы, что и TIVTC/TFM (AviSynth project) и VIVTC/VFM (VapourSynth project). Это легкий клон TFM на котором основан fieldmatch, тем не менее если семантика и использование fieldmatch очень близки к TFM, то некоторые имена и параметры всё же могут отличаться.
    Фильтр имеет опции:

< order > - установка входного чередования полей:

< auto > - автоматическое определение
< bff >  - нижнее поле первое
< tff >  - верхнее поле первое

< mode > - установка режима стратегии:

< pc >     - режим является самым безопасным в том смысле, что он не будет давать эффекта подёргивания из-за дублирования кадров, когда это возможно. но 
если есть деффекты или смешанные поля, то он будет в конечном итоге выводить кадры с гребёнкой. 
< pcn_ub > - является наиболее рискованным режимом с точки зрения создания эффекта подёргивания. остальные значения будут где-то между 'pc' и 'pcn_ub' 
с точки зрения риска эффекта подёргивания и дублирования кадров.

< ppsrc > - включение второго потока:

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

< field > - чередование полей в кадре:

< auto >   - автоматический выбор.
< bottom > - нижнее поле (нечётное) первое
< top >    - верхнее поле (чётное) первое
значение по умолчанию - auto

< mchroma > - компенсация движения по цветности:

указывает, следует ли сравнивать пикселы по цветовой компоненте. в большинстве случаев параметр рекомендуется включать. выключить (значение '0') если клип 
имеет проблемы цветности, такие как "радуга, звон" и прочие цветовые артефакты. установка этого значения в '0' также может быть полезна для ускорения 
процесса обработки. значение по умолчанию - 1

< scthresh > - порог обнаружения изменений в сцене по яркости:

порог обнаружения изменений в сцене, в процентах от максимального изменения яркости. хороший диапазон [8.0-14.0]. имеет смысл если combmatch=sc. полный 
диапазон [0.0-100.0]. значение по умолчанию - 12

< сombmatch > - если combatch выключен, то fieldmatch будет учитывать десятки гребенок решая, что соответствует финальному параметру. доступные значения:

< none > - нет окончательного согласования оценки гребёнок.
< sc >   - оценка гребёнок используется только тогда, когда смена сцены обнаружена.
< full > - использование анализа гребёнок всё время.
значение по умолчанию - sc

< combdbg > - форсировать fieldmatch для расчета метрик гребёнок некоторых полей и напечатать их. этот параметр известен как 'micout' в TFM/VFM синтаксисе. доступные значения:

< none >  - не форсировать расчёт метрики гребёнки.
< pcn >   - форсировать p/c/n расчёты метрик. 
< pcnub > - форсировать p/c/n/u/b расчёты метрик.
значение по умолчанию - none

< cthresh > - область порога, используемого для обнаружения кадров с гребёнкой.

этот параметр определяет минимальное значение гребёнки для её обнаружения. большие значения означают более заметный шаг гребёнки, а меньшие значения 
обозначают менее заметный шаг гребёнки в перспективе её обнаружения. 
< -1 >  - значение при котором каждый пиксель будет обнаружен как гребёнка.
< 255 > - значение при котором ни один пиксель не будет обнаружен как гребёнка. это значение по сути есть разница пикселей. хороший диапазон [8-12].
значение по умолчанию - 9

< chroma > - параметр который решает, будет ли цветность рассматривается при расчёте метрик гребёнок, в кадре.

< 1 > - включить
< 0 > - выключить этот параметр, если ваш источник имеет проблемы с цветностью (артефакты радуги и т.п.), которые обычно вызывают проблемы для обнаружения 
гребёнок в кадрах. по утверждению разработчиков использование chroma=0, как правило более надёжно во многих случаях, но проверяйте это опытным путём.
значение по умолчанию - 0

< blockx > - < blocky > - размер окна по осям x,y - используемого для обнаружения гребёнки.

параметр связан с параметром combpel. означает размер области (окна) в пикселах, в пределах которого параметр combpel может быть определен как гребенка. 
cм. < combpel >. возможные значения - любое число, которое является степенью 2, начиная с 4 и кончая 512.
значение по умолчанию - 16

< сombpel > - определяет колличество пикселов в гребенке, которые могут находиться в пределах любого из блоков (окон): < blockx > и < blocky >. при значении сombpel=0 в купе с максимальными значениями < blockx > и < blocky >, установка будет означать что ни один пиксел не будет определён как гребёнка. значение по умолчанию - 80

< 0 > - минимальное значение параметра. максимальное значение сombpel не должно првышать blockx умноженное на blocky. этот параметр известен как ‘mi’ в TFM/VFM лексике.
  • Пример строки кодирования:
с полным сканированием гребёнок, применением бленд-деинтерлейсинга и прореживающего фильтра decimate
ffmpeg -i /home/user/video-29.970.avi -vf fieldmatch=order=tff:mode=pc:ppsrc=0:field=top:mchroma=1:scthresh=12:combmatch=full:combdbg=none:cthresh=-1:chroma=1:blockx=8:blocky=8:combpel=16,pp=lb,decimate=5:1.1:15:8:8:0:1 -vcodec ffv1 -acodec pcm_s16le /home/user/video-23.976.avi
так же, с применением деинтерлейсера-компенсатора движения:
ffmpeg -i /home/user/video-29.970.avi -vf fieldmatch=order=tff:mode=pc:ppsrc=0:field=top:mchroma=1:scthresh=12:combmatch=full:combdbg=none:cthresh=-1:chroma=1:blockx=8:blocky=8:combpel=16,mcdeint=1:0:2,decimate=5:1.1:15:8:8:0:1 -vcodec ffvhuff -acodec pcm_s16le /home/user/video-23.976.avi

4. Decimate

  • Фильтр удаления дублированных кадров на основе их регулярности. Этот фильтр имеет подобие фильтра обратного телекино ivtc - inverse telecine и возвращает накрученный фреймрейт 29.970 за счёт дублирования в telecine полей, в его нормальное состояние 23.976. Более актуально для интерлейсного видео. Значение по умолчанию «дропает» 29.970 до 23.976, остальные частные пожелания к фреймрейту можно настроить опытным путём.
    Фильтр имеет опции:
< cycle >     - диапазон кадров из которых один будет отброшен. из каждого значения в N кадров - 1 кадр будет отброшен. значение по умолчанию 5.
< dupthresh > - порог для обнаружения дубликатов. если разница метрики кадра меньше или равно этому значению, то он метится как дубликат. по умолчанию 1.1
< scthresh >  - порог для изменения сцены. по умолчанию 15.
< blockx >    - размер осей х,у блоков. большие блоки дают лучшее подавление шума, но хуже обнаруживают мелкие движения. значение должно быть степенью двух 
< blocky >    - размер осей х,у блоков... значения по умолчанию для x,y - 32.
< ppsrc >     - значение 1 позволяет входу быть предварительно обработанным с различными фильтрами. по умолчанию 0. не существенная опция.
< chroma >    - включение-выключение обработки метрических расчётов по цветности. по умолчанию 1 (включено).
  • Пример строки кодирования:
по умолчанию:
ffmpeg -i /home/user/video-29.970.avi -vf decimate=5:1.1:15:32:32:0:0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-23.976.avi
с обнаружением мелких движений:
ffmpeg -i /home/user/video-29.970.avi -vf decimate=5:1.1:15:4:4:0:0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-23.976.avi
с понижением фреймрейта в два раза без применения фильра interlace:
ffmpeg -i /home/user/video-50-progressive.avi -vf decimate=2:1.1:10:4:4:0:0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-25-progressive.avi

5. Interlace

  • Простой интерлейсинг фильтр для прогрессивного видео. Делает видео интерлейсным, снижает частоту кадров вдвое, но сохраняет высоту изображения. Может быть полезен если вам нужно уменьшить частоту кадров прогрессивного видео для роликов 50,60fps с сохранением плавности движения и качества изображения.
    Фильтр имеет опции:
scan    - определяет метку поля, какое поле будет первым в интерлейсном чередовании полей - чётное tff (по умолчанию), или нечётное bff.
lowpass - определяет Включение (по умолчанию), или Выключение вертикального фильтра низких частот для фильтрации искажений интерлейсинга.
  • Пример строки кодирования:
по умолчанию:
ffmpeg -i /home/user/video-50-progressive.avi -vf interlace=scan=tff:lowpass=1 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-25-interlace.avi

6. Yadif - yet another deinterlacing filter

  • Фильтр Yadif - ещё один деинтерлейс фильтр для удаления чересстрочности, «расчёски» входного видео.
    Фильтр имеет опции:
__< mode=value >__   - режим чрезстрочности:
  < 0, send_frame >           - выход одного кадра для каждого кадра (по умолчанию)
  < 1, send_field >           - выход одного кадра для каждого поля (может удваивать фреймрейт в выходном видео, ибо в одном интерлейс кадре - два поля)
  < 2, send_frame_nospatial > - выход одного кадра для каждого кадра с пропуском пространственной проверки чересстрочности
  < 3, send_field_nospatial > - выход одного кадра для каждого поля с пропуском пространственной проверки чересстрочности (может удваивать фреймрейт)
__< parity=value >__ - тип чётности:
  < 0, tff >                  - для верхнего первого поля
  < 1, bff >                  - для нижнего первого поля
  < -1, auto >                - автоматическое определение (по умолчанию), если не знаете чередование полей то декодер примет вариант tff
__< deint=value >__  - применение деинтерлейсинга к кадрам:
  < 0, all >                  - ко всем кадрам (по умолчанию)
  < 1, interlaced >           - только к кадрам помеченным как чересстрочные
  • Пример строки кодирования:
1. по умолчанию:
ffmpeg -i /home/user/video-interlace.avi -vf yadif=mode=0:parity=-1:deint=0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi
2. удвоение фреймрейта: 
ffmpeg -i /home/user/video-interlace.avi -vf yadif=mode=1:parity=-1:deint=0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi

7. Kerndeint - adaptive kernel deinterlacer filter

  • Адаптивный ядерный деинтерлейс фильтр от Donald Graft. Более продвинутый фильтр деинтерлейсинга в сравнении с yadif, даёт возможность задавать порог изменения пикселей в соседних полукадрах, при котором начнет работать фильтр. Не даёт потери разрешения, резкости и фаз движения, но на высоко динамичных сценах может давать «призраков». Но в целом, это всё зависит от настроек, с которыми стоит поэкспериментировать, прежде чем…
    Фильтр имеет опции:
< thresh > - порог толерантности фильтра при определении диапазона в пределах которого возможна обработка пикселей линий. значение по умолчанию - 10. 
установка значения в - 0, приведёт к процессингу на каждом пикселе, это значит что при меньших значениях фильтр ведёт себя более агрессивно.
< map >    - показывает карту деинтерлейсинга, на которой видно какие пикселы обрабатывает фильтр. хорош для визуального анализа. значение по умолчанию 0.
< order >  - установка порядка полей. 0 - оставить поля как есть. 1 - поменять поля местами. по умолчанию 0.
< sharp >  - установка резкости деинтерлейсинга. 1 - включено, 0 - выключено, по умолчанию - 0. используйте на сильно замыленных видео.
< twoway > - установка дополнительной резкости. 1 - включено, 0 - выключено, по умолчанию - 0. используйте на сильно замыленных видео.
  • Пример строки кодирования:
ffmpeg -i /home/user/video-interlace.avi -vf kerndeint=thresh=12:map=0:order=0:sharp=0:twoway=0 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi

8. Mcdeint - motion-compensation deinterlacing filter

  • Деинтерлейсер компенсации движения. Требует наличия одного поля в кадре - и, поэтому, желательно, должен использоваться вместе с Yadif=1:3 деинтерлейсером или эквивалентным ему. Наглядно смотрите здесь: deinterlacing-filters. Самый медленный фильтр деинтерлейсинга, а при максимальных настройках (mode=extra_slow,qp=1) очень медленный, до суток и больше для 2-х часового видео. По этому более актуален для роликов продолжительностью 3-10 минут. Либо, применительно к фильмам, резать разжатое кино на сегменты с динамичными-высокодинамичными сценами и сегменты с малодинамичными-статичными сценами, где для динамичных/высоко динамичных сцен mcdeint=mode=2-3:qp=1-8, а для мало динамичных и статичных сцен: mcdeint=mode=0-1:qp=8-16 - этот приём актуален преимущественно для глючных случаев, связанных с ремастерингом видео. Для большинства обычных случаев достаточно опции mode=1.
    Фильтр имеет опции:
__< mode=value >__  - установка режима деинтерлейсинга:
  < 0, fast >       - быстрый режим (по умолчанию)
  < 1, medium >     - средний режим
  < 2, slow >       - медленный режим
  < 3, extra_slow > - используется итеративная (см. ссылку) оценка движения. то же что и медленный, но использует несколько систем отсчета.
__< parity=value >__- чётность. установка чётности полей:
  < 0, tff >        - верхнее, чётное поле
  < 1, bff >        - нижнее, нечётное поле (по умолчанию)
__< qp=value >__    - установка поблочного параметра квантования (qp), используемого энкодером:
большие значения дают более гладкое движение, но менее оптимальны для отдельных векторов. значение по умолчанию qp=1. оптимальный диапазон [1-8] 

«итеративный» - см: wiki-итерация

  • Пример строки кодирования:
Значения по умолчанию:
ffmpeg -i /home/user/video-interlace.avi -vf mcdeint=0:1:1 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi
Совместно с фильтром decimate:
ffmpeg -i /home/user/video-interlace.avi -vf decimate=5:1.1:15:4:4:0:0,mcdeint=1:0:8 -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi

9. w3fdif - weston 3 field deinterlacing filter

  • w3fdif - Weston 3 Field Deinterlacing Filter - Фильтр деинтерлейсинга входного видео. Фильтр базируетя на основе процесса, описанного Мартином Вестоном для BBC R & D и реализуется на основе алгоритма Деинтерлейсинга написанного Джимом Истербруком для BBC R & D, Weston 3 Field Deinterlacing Filter использует коэффициенты фильтра, рассчитанные BBC R & D.
    Фильтр имеет опции:
< filter >     - Установка деинтерлейс коэффициентов фильтра. Принимает значения:
< simple >     - Простой набор фильтров.
< complex >    - Комплексный набор фильтров (по умолчанию).

< deint >      - Указывает тип деинтерлейсинга. Принимает значения:
< all >        - На всех кадрах (по умолчанию).
< interlaced > - Только кадры помеченные как чресстрочные
  • Пример строки кодирования:
Значения по умолчанию:
ffmpeg -i /home/user/video_interlace.avi -vf w3fdif=filter=complex:deint=all -vcodec ffvhuff -acodec pcm_m16le /home/user/video-progressive.avi

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

10. pp - enable the postprocessing subfilters

  • Фильтр постпроцессинга (post processing - pp) включает цепочку подфильтров постобработки при помощи libpostproc. Эта библиотека должна быть автоматически выбрана с GPL сборкой (включить - GPL). Подфильтры должны быть отделены между собой символом ' / ' или могут быть отключены указанием перед ними символа '-'. Каждый подфильтр и некоторые опции имеют как короткое и длинное название, которые могут быть взаимозаменяемы. Фильтр более актуален для работы с raw и lossless файлами.
    Фильтр имеет опции:
установка субфильтров постобработки с помощью опций, которые имеют обозначения, определяющие сферы их применения:
< a, autoq >   - Предпочтение комманд для авторегулировки качества, - с этим субфильтром
< c, chrom >   - Постобработка только по цветовой составляющей.
< y, nochrom > - Постобработка только по яркостной составляющей, исключая обратотку цветности.
< n, noluma >  - Постобработка только по цветовой составляющей, исключая обратотку яркости.
Эти опции могут быть добавлены после названия подфильтров, через разделяющий символ ':'
  • Доступные подфильтры для постобработки:

Деблокирование

< hb, hdeblock >  - difference|flatness - Horizontal deblocking filter. Фильтр горизонтального деблокирования.
difference - Фактор различия, где большие значения означают более сильный деблокинг (по умолчанию: 32).
flatness   - Порог плоскостности, где меньшие значения означают более сильный деблокинг (по умолчанию: 39).
< vb, vdeblock >  - difference|flatness - Vertical deblocking filter. Фильтр вертикального деблокирования.
difference - Фактор различия, где большие значения означают более сильный деблокинг (по умолчанию: 32).
flatness   - Порог плоскостности, где меньшие значения означают более сильный деблокинг (по умолчанию: 39).
< ha, hadeblock > - difference|flatness - Accurate horizontal deblocking filter. Фильтр аккуратного горизонтального деблокирования.
difference - Фактор различия, где большие значения означают более сильный деблокинг (по умолчанию: 32).
flatness   - Порог плоскостности, где меньшие значения означают более сильный деблокинг (по умолчанию: 39).
< va, vadeblock > - difference|flatness - Accurate vertical deblocking filter. Фильтр аккуратного вертикального деблокирования.
difference - Фактор различия, где большие значения означают более сильный деблокинг (по умолчанию: 32).
flatness   - Порог плоскостности, где меньшие значения означают более сильный деблокинг (по умолчанию: 39).
  • Пример строки кодирования:
Горизонтальный деблокинг - hb, - со значениями по умолчанию (см выше):
ffmpeg -i /home/user/video.avi -vf pp=hb:32:39/vb:32:39 -c:v ffv1 -g 1 -coder 1 -context 1 -an /home/user/video-out.avi
или с упором на качество с параметром "a":
ffmpeg -i /home/user/video.avi -vf pp=hb:a/vb:a -c:v ffv1 -g 1 -coder 1 -context 1 -an /home/user/video-out.avi

Экспериментальные фильтры деблокирования

< h1, x1hdeblock >  - Experimental horizontal deblocking filter. Экспериментальный фильтр горизонтального деблокирования.
< v1, x1vdeblock >  - Experimental vertical deblocking filter. Экспериментальный фильтр вертикального деблокирования.

Устранение звона, шума, коррекция яркости, квантование

< tn, tmpnoise > threshold1|threshold2|threshold3 - Temporal noise reducer. Временной фильтр шумоподавления.
threshold1 - larger -> stronger filtering 
threshold2 - larger -> stronger filtering 
threshold3 - larger -> stronger filtering
< al, autolevels:f, fullyrange > - <al:f> - Automatic brightness-contrast correction. Автоматическая коррекция яркости-контрастности в диапазоне 0-255.
< dr, dering > - Deringing filter. Фильтр устранения ореола (звона).
< fq, forceQuant:quantizer > - Переопределяет таблицу квантования источника с указанным вами постоянным квантователем. 

Фильтры деинтерлейсинга постобработки

< lb, linblenddeint >  - Деинтерлейс с линейной интерполяцией, с применением блендинга (blending-смешавание) на каждой линии.
< li, linipoldeint >   - Деинтерлейс с линейной интерполяцией на каждой второй линии.
< ci, cubicipoldeint > - Деинтерлейс фильтр с кубической интерполяцией на каждой второй линии.
< md, mediandeint >    - Деинтерлейс фильтр с медианной (усреднённой) интерполяцией на каждой второй линии.
< fd, ffmpegdeint >    - FFmpeg деинтерлейс фильтр с интерполяцией на каждой второй линии.
< l5, lowpass5 >       - Деинтерлейс фильтр c применяемым вертикальным FIR-фильтром низких частот (см. ссылку) с интерполяцией на каждой линии.

wiki-нерекурсивный фильтр, - ких-фильтр или fir-фильтр

Собственные установки для pp-фильтра

< de, default > - Установка комбинации фильтров PP по умолчанию: 
< fa, fast >    - Установка комбинации фильтров PP для быстрой обработки: 
< ac >          - Установка комбинации фильтров PP для высококачественной обработки: 

Примеры установок для pp-фильтра

pp=hb/vb/dr/al:f - Применить горизонтальное и вертикальный деблокинг, устранение ореола и нормализация яркости-контрастности.
pp=de/-al        - Применение фильтров по умолчанию без коррекции яркости-контрастности.
pp=de/tn|1|2|3   - Применение фильтров по умолчанию с добавлением временного шумоподавителя.
pp=hb:y/vb:a     - Горизонтальный деблок по яркости, вертикальный деблок с возможностью его самовыключения в зависимости от уровня процессорного времени.

11. Adelay - Delay one or more audio channels.

  • Фильтр задержки одного или нескольких звуковых каналов звуковой дорожки. Позволяет выставлять задержку звука в миллисекундах по количеству каналов звуковой дорожки, заполняя образованные пустоты - тишиной.
    Фильтр имеет опции:
< delays > - задержки каналов аудио, разделенных символом '|'. принимает значения больше '0'. сдвигает только указанные каналы, неуказанные ( значение '0') - игнорирует.
  • Пример строки кодирования:
сдвиг аудио на 1 сек. (1000 мл.сек) по всем каналам аудиотрека:
ffmpeg -i /home/user/video.avi -vcodec copy -acodec copy -af adelay=1000 /home/user/video-out.avi
сдвиг аудио на 1 сек. в трёхканальном аудиотреке с игнорированием второго канала:
ffmpeg -i /home/user/video.avi -vcodec copy -acodec copy -af adelay=1000|0|1000 /home/user/video-out.avi

12. Afade - Apply fade-in/out effect to input audio.

  • Применяет эффект появления-затухания (fade-in/fade-out) для входного аудио.
    Фильтр имеет опции:
<type, t>          - Укажите тип эффекта, может быть либо fade-in, либо fade-out эффект.
<start_sample, ss> - Укажите количество стартовых образцов (сэмплов) для плавности применения эффекта. По умолчанию '0'.
<nb_samples, ns>   - Укажите количество образцов (сэмплов), для длительности эффекта затухания. По умолчанию '44100'.
<start_time, st>   - Время начала применения fade эффекта. По умолчанию '0'. Принятый синтаксис:
[-]HH[:MM[:SS[.m...]]]
[-]S+[.m...]
<duration, d>      - Укажите длительность, в течении которой должен длиться эффект затухания. По умолчанию '0'. Принятый синтаксис:
[-]HH[:MM[:SS[.m...]]]
[-]S+[.m...]
<curve>  - Устанавливает кривые для эффектов перехода:
- <tri>  - Триангулярная (треугольная) кривая с линейным наклоном (по умолчанию)
- <qsin> - Четверть синусоиды.
- <hsin> - Половина синусоиды.
- <esin> - Экспоненциальная синусоидальная волна.
- <log>  - Логарифмическая кривая.
- <par>  - Перевёрнутая парабола.
- <qua>  - Квадратичная кривая.
- <cub>  - Кубическая кривая.
- <squ>  - Функция квадратного корня.
- <cbr>  - Функция кубического корня.

13. Atempo - Adjust audio tempo.

  • Фильтр принимает параметр, регулирующий темп (скорость) аудио. Если параметр не указан, то фильтр будет использовать номинальный, исходный параметр темпа равный - «1.0» (100%). Темп должен быть задан в диапазоне от [0.5 - 2.0]. Если ваш случай не укладывается в этот диапазон, то вы можете создать группу фильтров < atempo >, разделёных запятой
    Пример опций:
Замедление темпа аудио на 80%:
-af atempo=0.8
Ускорение темпа аудио на 25%
-af atempo=1.25

Для более-менее точной корректировки темпа аудиодорожки для видео, с 23,976 (24) кадр/сек до 25 кадров/сек - высчитываем изменение темпа в процентах по схеме: желаемый фрейрейт/исходный фреймрейт. Для начала, для наибольшей точности преобразовываем дробное к дробному: 25 - 25000/1001*100%=24.975 → (24.975/23.976=1.041666 ~ 1.04266), где:

Ускорение темпа аудио для видео с 23.976 до 25 (24.975) кадр/сек - на 4.26% от исходного темпа аудио.
-af atempo=1.0426

14. Asetrate - Set the sample rate without altering the PCM data.

  • Установка частоты дискретизации, без изменения данных PCM. Применение этого фильтра приводит к изменению скорости проигрывания аудиотрека и высоты его тона. Результат работы этого фильтра точнее, чем результат работы предыдущего фильтра < atempo >
    Фильтр принимает опции:
sample_rate, r
пример:
-af asetrate=r=48000

Для расчёта частоты используется формула: [исходная частота] * [желаемый фреймрейт] / [исходный фреймрейт] = [желаемая частота], например:

44100*25/24 = 45937.5 (если одно из значений фреймрейта дробное, то и другое значение тоже должно быть приведено к дробному, через деление его на /1001)
-af asetrate=r=45937.5

Для приведения частоты семплинга к стандартному после использования фильтра < asetrate >, уже без изменение скорости, нужно сконвертировать файл к требуемой частоте при помощи опции < -ar >, например:

ffmpeg -i /home/user/audio_45937.wav -c:a pcm_s16le -ar 48000 /home/user/audio_48000.wav

15. Subtitles - Draw subtitles on top of input video.

  • Фильтр для рисования субтитров поверх входного видео, используя библиотеку libass. Чтобы включить компиляцию этого фильтра необходимо настроить FFmpeg при установке с опцией < enable- libass > . Этот фильтр также требует сборки с кодеком libavformat и преобразовывает входной файл субтитров в формат ASS (Advanced Substation Alpha).
    Фильтр имеет опции:
< f, filename >   - Установка имени файла субтитров для чтения. Если опция <f> не указана, то предполагается что файл субтитров равен имени файла видео.
< original_size > - Установка размеров сторон видео, для которого был составлен файл. Необходимо для правильного масштабирования шрифтов.
< charenc >       - Установка входной кодировки субтитров. Имеет смысл только если входной файл не в формате UTF-8.
Пример загрузки данных из файла sub.srt:
subtitles=sub.srt - что эквивалентно - subtitles=filename=sub.srt
Файл субтитров должен располагаться в одной директории с видеофайлом.

Чтобы уменьшить размер шрифта, например в два раза, можно изменить (увеличить) опцию < original_size > относительно исходного размера кадра в два раза. Это несколько дикий способ, но работающий при необходимости.

  • Пример содержимого файла *.srt субтиров:
1
00:00:01,000 --> 00:00:03,000
— Саид, ты как здесь оказался?
(Белое Солнце Пустыни)

2
00:00:04,000 --> 00:00:06,000
— Стреляли…
(Белое Солнце Пустыни)
  • Основные параметры srt субтитров:
N
ЧЧ:ММ:СС:МКС --> чч:мм:сс:мкс
Первая строка фразы
Вторая строка фразы
где
N - номер фразы
ЧЧ:ММ:СС:МКС - время начала показа фазы в часах минутах, секундах и миллисекундах (мкс)
чч:мм:сс:мкс - время начала показа фазы в часах минутах, секундах и миллисекундах (мкс)
между временем и стрелкой пробел. Фразы отделяются друг от друга пустой строкой.

Мультиплексация-Демультиплексация средствами FFmpeg

1. Демультиплексация.

  • Для демультиплексации многопотокового видеофайла используется функция < -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

2. Мультиплексация.

  • Мультиплексация (сведение) AVI видеофайла c двумя и более аудиодорожками, в частности с MKV контейнером для файла на выходе:
ffmpeg -i /home/user/video/video.avi \
-i /home/user/video/audio.dts(ac3) \
-i /home/user/video/audio.ac3(dts) \ 
-vcodec copy -acodec copy \ 
-map 0:0 -map 1:0 -map 2:0 /home/user/video/video_out.mkv \

В случае сохранения выходного файла именно в контейнер *.mkv при перекодировании видеоматериала, может дать неопределённый профиль, например Container profile=Unknown@3.1. Но, так же, во избежание этого - эту операцию можно попытаться провести в программе mkvmerge из пакета mkvtoolnix из репозитория ubuntu.

  • Мультиплексация (сведение) MPEG-2 видеофайла c одной аудиодорожкой, в частности с 6-канальной аудиодорожкой в формате ac3:
ffmpeg -i /home/user/video/video.mpg(m2v) \ 
-i /home/user/video/audio.ac3(mp2) \ 
-vcodec copy -acodec copy -f vob /home/user/video/video_out.mpg \

Ключ < -f vob > может быть обязателен в случае, если у входного mpeg-файла несоответствующий mpeg размер кадра (стандартным размером для mpeg является 720×576 для PAL и 720×480 для NTSC), в этом случае аудиодорожка воспроизводиться не будет. В таком случае ключи < -f > обязательны. В некоторых, не очень удачных случаях при повреждении потоков, это придётся сделать с применением принудительного перекодирования потоков с сохранением исходного качества. Приблизительно, - это можно осуществить при помощи ключей < -q:v 0 >, < -q:a 0 >, что является ремейком устаревшей опции <sameq>. Возможные варианты ключей: < -f mpeg >, < -f dvd >, < -f vob >.

  • Мультиплексация (сведение) MPEG-2 видеофайла c двумя и более аудиодорожками:
ffmpeg -i /home/user/video/video.mpg(m2v) \ 
-i /home/user/video/audio.ac3(mp2) \ 
-i /home/user/video/audio.mp2(ac3) \ 
-vcodec copy -acodec copy \ 
-map 0:0 -map 1:0 -map 2:0 -f vob /home/user/video/video_out.mpg \

Видеозахват средствами ffmpeg

1. Запись видео с экрана монитора средствами ffmpeg
X11grab - возможность создание скринкастов, которая подразумевает захват видеосигнала происходящего на экране монитора. Скринкаст, буквально - отбросок экрана; отливка экрана.

  • Для захвата видеосигнала используется вывод графической подсистемы - X11grab. Состоит из опций:
-f x11grab   - графическая подсистема участвующая в записи видеосигнала
-i :0.0      - входное видеоустройство - монитор 0. Также позволяет задавать смещение от левого верхнего угла: < -i :0.0+100,100 > по 100 пикселей x,y
-s 1920x1080 - размер видеокадра захватываемого экрана - должен соответствовать разрешению вашего монитора, либо с учётом смещения упомянутого выше.
-r 25        - фреймрейт захватываемого сигнала.
-show_region - Опция обозначения захватываемой области экрана. Имеет смысл, когда вы захватываете, например, четверть экрана. Включение < -show_region 1 >
Опции кодирования видеосигнала (должно размещаться в конце строки) в синтаксисе 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 

Опция < -qscale 0 > в последних версиях ffmpeg означает тоже, что и < -sameq >, а точнее является её заменой. Для старых версий ffmpeg используйте < -sameq >. Для обеспечения наилучшего качества захвата видеоcигнала, используйте опцию < -qscale 1 > (она же < -q:v 1 >), при условии что не будет глюков и притормаживаний, в противном случае лучше всё же использовать < -qscale 0 >.

  • Пример строки ffmpeg для записи скринкастов со звуком при использовании свободного lossless кодека qtrle в контейнере *.mov:
 ffmpeg -y -f alsa -i pulse -f x11grab -s 1920x1080 -r 25 -i :0.0 -vcodec qtrle -f mov -acodec pcm_s16le /home/user/video.mov 

Cвободный lossless кодек qtrle - имеет меньшую по сравнению с mpeg4 нагрузку на процессор и память и по этому несколько более рекомендован для видеозахвата.

  • Дополнительные примеры по смещениям, для захвата части экрана:
Предопределяет необходимость изменения опции < -s > во избежание выхода за пределы экрана.
Нижняя правая четверть экрана разрешением 1920x1080 с захватываемой областью 960x540:
ffmpeg -f alsa -i pulse -f x11grab -show_region 1 -s 960x540 -r 25 -i :0.0+960,540 -vcodec qtrle -f mov -acodec pcm_s16le /home/user/video.mov
Верхняя правая четверть экрана разрешением 1920x1080 с захватываемой областью 960x540:
ffmpeg -f alsa -i pulse -f x11grab -show_region 1 -s 960x540 -r 25 -i :0.0+960,0 -vcodec qtrle -f mov -acodec pcm_s16le /home/user/video.mov

Смотрите также: Запись скринкастов (видео с рабочего стола). Для тех кто использует Ubuntu в дуалбуте с Windows, - осуществить захват экрана на Win можно через DirectShow фильтр.

2. Видеозахват с вебкамеры средствами ffmpeg
Для видеозахвата с вебкамер в среде Linux используется программный интерфейс video4linux2 или кратко «v4l2», например:

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 /home/user/video/video-out.avi

или

ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 /home/user/video/video-out.avi

, где < /dev/video0 > - это устройство, которое у вас должно возникнуть в dev при подключении камеры к компьютору.

  • Если вам нужно установить некоторые конкретные параметры камеры, вы можете сделать это с помощью инструмента v4l2-ctl tool. Его можно найти в дистрибутивах fedora/ubuntu/debian в пакете v4l-utils. Подробнее смотрите здесь: How to capture a webcam input

3. Видеозахват по шине FireWire через порт IEEE1394 средствами ffmpeg
Видеозахват по шине FireWire через порт IEEE1394 осуществляется с помощью iec61883. Чтобы включить это устройство ввода, необходимо наличие в системе установленных библиотек libiec61883, libraw1394 и libavc1394. Используйте опцию –enable-libiec61883 to compile with the device enabled.

  • iec61883 имеет опции:

< dvtype > - Выключает автоопределение DV/HDV. Это должно использоваться только тогда, когда автоматическое определение не работает точно, или если использование другого типа видео на входе должно быть запрещено. Попытка ввода DV устройства в качестве HDV устройства (или наоборот) не будет работать и может привести к непредсказуемым последствиям. Допустимы значения: dv, hdv. Значения по умолчанию - auto.
< dvbuffer > - Установка максимального размера буфера для поступающих данных, в кадрах. Для DV - это будет точное значение. Для HDV - это не точное количество кадров, так как HDV не имеет фиксированного размера кадра.
< dvguid > - Выбор устройства захвата с указанием на GUID. Захват будет производиться только с указанного устройства и не будет выполняться, если ни одно устройство с указанным GUID не найдено. Это может быть полезно для выбора входа, если подключено несколько устройств одновременно. Смотрите в /sys/bus/firewire/devices чтобы узнать идентификаторы GUID.

  • Пример строки по умолчанию:
ffmpeg -f iec61883 -i auto
  • Ввод в FireWire DV/HDV устройства, с использованием буфера пакетов. 100000 пакетов - если источником является HDV.
ffmpeg -f iec61883 -i hdv -hdvbuffer 100000 /home/user/videoout.mpg

Покадровый вывод видео средствами FFmpeg

Image file demuxer. image2-2 - Image file demuxer - демультиплексор файлов изоражений. Предполагает форматирование файла при помощи опции < -f image2 >, которая преобразует кадры видео в формат image2, поддерживающий вывод кадров в графические форматы (демультиплексация), типа jpg, png и пр. Для мультиплексации при помощи этой функции - размеры, пиксельные форматы, и формат расширения файла каждого из изображений в последовательности, - должны быть одинаковыми для всех файлов. Применение этой опции может быть актуально, если вы например хотите очистить определённый участок видео от помех, дефектов и артефактов при помощи графических редакторов.

  • Покадровое разложение всего видеофайла:
ffmpeg -i /home/usr/video/video.avi -r 25 -f image2 /home/usr/video/tmp/%09d.png

созданные файлы изображений (кадров) будут последовательно пронумерованы как: 000001.png, 000002.png 000003.png и т.д.

  • Покадровое склеивание видео c перекодированием:
ffmpeg -r 25 -i /home/usr/video/tmp/%09d.png -vcodec ffvhuff /home/usr/video/video_out.avi

изображения должны иметь имена 000001.png, 000002.png 000003.png и т.д.

  • Покадровый вывод временного диапазона кадров в пределах указанного интервала:
ffmpeg -ss 00:01:00 -t 00:02:00 -i /home/usr/video/video.avi -r 1 -f image2 /home/usr/video/tmp/%09d.png
  • Вывод 25-ти кадров только первой секунды видеоролика:
ffmpeg -i /home/usr/video/video.avi -r 25 -t 00:00:01 -f image2 /home/usr/video/tmp/%09d.png
  • Скриншот заданной временной метки видеоролика:
ffmpeg -i /home/usr/video/video.avi -r 1 -t 01:10:10 -f image2 /home/usr/video/tmp/%09d.png

Автоматизация кодирования

  • Для автоматизации кодирования директорий при помощи ffmpeg, можно воспользоваться опциями bash. Например, этот приведённый скрипт сможет перекодировать все файлы дериктории с расширением *.wav в те же файлы, но сжатые кодеком libmp3lame и с расширением *.mp3 .. Пример скрипта:
for f in /home/user/music/my_tracks/*.wav ; 
do
ffmpeg -i "$f" -f mp3 -acodec libmp3lame -q:a 1 -b:a 320k -ar 44100 -ac 2 -vol 256 $f.mp3
done
  • Автоматизация кодирования аудио треков директории из формата *.wav в формат *.flac c предварительным апсемплом (увеличение частоты и битности) и созданием промежуточных temp-фйлов .. Пример скрипта:
for a in /home/user/music/my_tracks/*.wav ;
do
name=${a%.*}
ffmpeg -i "$a" -c:a pcm_s24le -ar 192000 -vol 256 "$name"_tmp.wav ;
ffmpeg -i "$name"_tmp.wav -c:a flac -f flac "$name.flac"
done
  • Поочерёдное (последовательное) выполнение команд осуществляется с применением bash оператора < ; > .. Например:
ffmpeg -i /home/audio.wav -c:a pcm_s32le -ar 192000 /home/audio-32-192.wav ; ffmpeg -i /home/audio-32-192.wav -c:a flac /home/audio-24-192.flac

Принцип постановки операторов и команд bash для данного случая см. здесь Основы BASH. Часть 2. Так же можно обратиться к детальной статье о bash Advanced Bash Scripting по-русски

Пресеты FFmpeg

Версии FFmpeg из Git устанавливаются в домашнюю папку с папками: /home/user/bin , /home/user/ffmpeg_build , /home/user/ffmpeg_sources

  • Пресеты последних версий FFmpeg хранятся в /home/user/ffmpeg_build/share/ffmpeg. Их перечень можно посмотреть через консоль, дав команду в терминале:
ls /home/user/ffmpeg_build/share/ffmpeg
  • Все пресеты - это текстовые файлы. Каждый из них можно просмотреть и даже изменить, а также создать новый, свой. Но в перспективе подхода к кодированию со знание дела, пресеты не являются на столько уж необходимой функцией и их вполне могут заменить самосозданные шаблоны типов кодирования, в которых перед кодированием изменяются только входные-выходные пути и, если потребуется, цетовые пространства. Вот вам список стандартных пресетов для последних версий FFmpeg из Git:
libvpx-1080p50_60.ffpreset
libvpx-1080p.ffpreset
libvpx-360p.ffpreset
libvpx-720p50_60.ffpreset
libvpx-720p.ffpreset
libx264-ipod320.ffpreset
libx264-ipod640.ffpreset

На их основе и на основе изучения FFmpeg вы можете сделать свои собственные пресеты. Или так же обойтись без них, используя самосозданные шаблоны для кодирования с использованием разных форматов и кодеков.

Применение

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

  • Разжатие видеофайла в Uncompressed:
ffmpeg -i "/home/usr/video/movie.avi" -vcodec rawvideo -acodec pcm_m16le "/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"
  • Разжатие видеофайла в Lossless FFV1:
ffmpeg -i "/home/usr/video/movie.avi" -c:v ffv1 -g 1 -qmin 1 -qmax 1 -c:a 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,27%)=(25/23,976023976 x 100%), - или, если видеопоток ускорялся с 23,976 до 25, то точнее будет с предварительным преобразованием параметров до дробных значений -((25/1001)/(24/1001) x 100% = 1.0416666666 ~ 1,0426 ←или→ (24,975024975/23,976023976 x 100%). Это преобразование темпа так же можно сделать при помощи фильтров < atempo > и < asetrate > (см. раздел фильтры). А так же в аудиоредакторе для Ubuntu - 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 "/home/user/video.avi" -vn -acodec libmp3lame -ab 192 -f mp3 "/home/user/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, фреймрейтом исходника 25fps, для потокового видео в сети (HD ли DVD источник, предварительно разжатый в ffvhuff или rawvideo):
ffmpeg -i "/home/usr/video/movie.avi" -s 856x480 -sar 1:1 -aspect 16:9 -r 25 -g 25 -keyint_min 1 -f mp4 -vcodec libx264 -profile high -b:v 1140K -me_method umh -subq 6 -me_range 32 -bf 2 -intra-refresh 1 -b-pyramid 1 -refs 1 -qdiff 1 -fast-pskip 0 -mbtree 0 -threads 2 -thread_type 2 -acodec aac -strict experimental -ac 2 -b:a 192K -ar 48000 "/home/usr/video/movie_out.mp4"
  • Кодирование в xvid и mp3:
ffmpeg "/home/user/video.avi" -vcodec libxvid -qscale 2 -s 720x400 -acodec libmp3lame -ac 2 -ab 128k -y "/home/user/video_out.avi"
  • Некоторые ключи для кодирования MPEG-4 высокого качества, по совету разработчиков ffmpeg:
-vcodec mpeg4 -mbd rd -flags +mv4+aic+mv0 -mpv_flags skip_rd+qp_rd -trellis 2 -cmp 2 -subcmp 2 -bf 2
  • Кодирование в формат amv средствами ffmpeg. FFmpeg принимает для amv следующие размеры экрана: 128×90, 128×128, 160×120. Корректно обрабатывает аудиопоток без сжатия (Uncompressed PCM).
ffmpeg -i "/home/user/video.avi" -f amv -s 160x120 -ac 1 -ar 22050 -qmin 3 -qmax 3 "/home/user/video.amv"
  • Кодирование в MPEG-4/IEC для старых мобильных телефонов с экраном 320×240:
ffmpeg -i "/home/user/video-input" -pix_fmt yuv420p -s 320x240 -r 25 -f mp4 -vcodec mpeg4 -b 500k -g 250 -bf 2 -keyint_min 25 -flags +aic+mv4+loop+mv0 -mpv_flags +skip_rd+qp_rd+cbp_rd -mbd rd -cmp 2 -subcmp 2 -me_method dia -me_range 8 -subq 5 -trellis 2 -acodec libvo_aacenc -ab 96K -ar 22050 -vol 256 -af aresample=async=1000 "/home/user/video-out.mp4"
  • Примечание: Кавычки в пути к файлу нужны для того, чтобы избежать проблем с пробелами в именах файлов. Это относится к так называемым «правилам экранирования».

Ссылки, авторство

  • Автор около 70% перевода, написания, коррекции и интерпретации текста статьи - archiver(c)