man ffmpeg Печать
Добавил(а) microsin   

ffmpeg - ffmpeg media converter

ffmpeg [global_options] {[input_file_options] -i input_url} ...
       {[output_file_options] output_url} ...

[Описание]

ffmpeg это универсальный media-конвертер. Он может читать различные входные данные, включая устройства захвата/записи (grabbing/recording devices) - filter, и перекодировать их в изобилие выходных форматов.

ffmpeg читает из произвольного количества входных "файлов", которые могут быть обычными файлами, каналами (pipes), сетевыми потоками, устройствами захвата и т. п., указанными опцией "-i", и записывает произвольное количество выходных "файлов", которые указываются простым выходным адресом (plain output url). Все, что найдено в командной строке, которое не может рассматриваться как опция, рассматривается как такой output url.

Каждый входной или выходной url может, в принципе, содержать любое количество потоков различных типов (video/audio/subtitle/attachment/data). Разрешенное количество и/или типы потоков может быть ограничено форматом контейнера. Выбор, какие потоки из каких входов подадут в какие выходы, либо осуществляется автоматически, либо с помощью опции "-map" (см. раздел "Выбор потока").

Чтобы ссылаться на входные файлы в опциях, вы должны использовать их индексы (начиная с 0). Например, первый входной файл имеет индекс 0, второй 1, и т. д. Аналогично на потоки в файле ссылаются по их индексам. Например, "2:3" означает четвертый поток в третьем входном файле. См. также раздел "Спецификаторы потоков").

Как основное правило, опции применяются к следующему указанному файлу. Таким образом, порядок их указания имеет значение, и у вас может встречаться в командной строке одна и та же опция несколько раз. Каждое появление опции тогда применяется к следующему входному или выходному файлу. Исключение из этого правила составляют глобальные опции (например уровень подробности сообщений, verbosity level), которые должны указываться первыми.

Не смешивайте входные и выходные файлы - сначала укажите все входные файлы, затем все выходные файлы. Также не смешивайте опции, которые принадлежат разным файлам. Все опции применяются ТОЛЬКО к следующему за ними входному или выходному файлу, и их действие сбрасывается между файлами.

Ниже показаны несколько простых примеров.

• Преобразование входного media-файла input.avi в другой формат, путем перекодирования media-потоков:

   ffmpeg -i input.avi output.mp4

• Установка битрейта видео выходного файла на 64 килобита/сек:

   ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4

• Принудительная установка частоты кадров выходного файла на 24 fps:

   ffmpeg -i input.avi -r 24 output.mp4

• Принудительная установка частоты кадров входного файла (это допустимо только для raw-форматов) на 1 fps, и частоты кадров выходного файла на 24 fps:

   ffmpeg -r 1 -i input.m2v -r 24 output.mp4

Может понадобиться опция формата для входных raw-файлов.

[Подробное описание]

Процесс транскодирования в ffmpeg для каждого вывода может быть описан следующей диаграммой:

                _______              ______________
               |       |            |              |
               | input |  demuxer   | encoded data |   decoder
               | file  | ---------> | packets      | -----+
               |_______|            |______________|      |
                                                          v
                                                      _________
                                                     |         |
                                                     | decoded |
                                                     | frames  |
                                                     |_________|
                ________             ______________       |
               |        |           |              |      |
               | output | < ------- | encoded data | < ---+
               | file   |   muxer   | packets      |   encoder
               |________|           |______________|

ffmpeg вызывает библиотеку libavformat (содержащую демультиплексоры demuxers), чтобы прочитать входные файлы и получить пакеты, содержащие закодированные данные из них. Когда обрабатываются несколько входных файлов, ffmpeg пытается сохранять их синхронизированными, отслеживая самую минимальную метку времени на любом активном входном потоке.

Закодированные пакеты затем передаются в декодер (за исключением выбора streamcopy для потока, см. описание далее). Декодер генерирует несжатые кадры (raw video/PCM audio/...), которые далее могут обрабатываться фильтрацией (см. следующую секцию). После фильтрации кадры попадают в encoder, который их кодирует и выводит закодированные пакеты. В завершение они попадают в мультиплексор (muxer), который записывает закодированные пакеты в выходной файл.

Фильтрация. Перед кодированием ffmpeg может обработать сырой звук (raw audio) и сырые кадры видео (raw video), используя фильтры из библиотеки libavfilter. Несколько собранных в цепочку фильтров образуют filter graph. ffmpeg разделяет два типа filtergraph: simple и complex.

Simple filtergraph. Простые (simple) filtergraph-ы это те, у которых есть ровно один вход и выход, и оба они одинакового типа. На предыдущей диаграмме они могут быть представлены простой вставкой дополнительного шага между декодированием и кодированием:

                _________                        ______________
               |         |                      |              |
               | decoded |                      | encoded data |
               | frames  |\                   _ | packets      |
               |_________| \                  /||______________|
                            \   __________   /
                 simple     _\||          | /  encoder
                 filtergraph   | filtered |/
                               | frames   |
                               |__________|

Simple filtergraph кодируются опцией -filter, применяющейся на поток (с алиасами -vf и -af для видео и аудио соответственно). Простой filtergraph для видео может выглядеть примерно так:

                _______        _____________        _______        ________
               |       |      |             |      |       |      |        |
               | input | ---> | deinterlace | ---> | scale | ---> | output |
               |_______|      |_____________|      |_______|      |________|

Обратите внимание, что некоторые фильтры меняют свойства кадра, но не содержимое кадра. Например, фильтр "fps" в примере выше меняет количество кадров, но не касается содержимого кадра. Другой пример - фильтр "setpts", который только установит метки времени и в противном случае передает кадры без изменений.

Complex filtergraph. Сложные (complex) filtergraph-ы это те, которые не могут быть описаны простой линейной цепочкой обработки, примененной к одному потоку. Это случай, например, когда у графа больше одного входа и/или выхода, или когда тип выходного потока отличается от типа входного потока. Они могут быть представлены следующей диаграммой:

                _________
               |         |
               | input 0 |\                    __________
               |_________| \                  |          |
                            \   _________    /| output 0 |
                             \ |         |  / |__________|
                _________     \| complex | /
               |         |     |         |/
               | input 1 |---->| filter  |\
               |_________|     |         | \   __________
                              /| graph   |  \ |          |
                             / |         |   \| output 1 |
                _________   /  |_________|    |__________|
               |         | /
               | input 2 |/
               |_________|

Complex filtergraph-ы конфигурируются опцией -filter_complex. Обратите внимание, что эта опция глобальная, поскольку complex filtergraph, по своей природе, не может быть однозначно связан с одним потоком или файлом.

Опция -lavfi эквивалентна -filter_complex.

Тривиальный пример complex filtergraph-а это фильтр "overlay", у которого два входа video и один выход video, содержащий одно video накладываемое поверх другого. Его звуковой аналог - фильтр "amix".

Stream copy. Копия потока это режим, выбранный параметром "copy" для опции -codec. Она побуждает ffmpeg опускать шаг декодирования и кодирования для указанного потока, так что выполняется только demuxing и muxing. Это полезно для изменения формата контейнера, или для модификации метаданных на уровне контейнера. Показанная выше диаграмма в этом случае упрощается до такой:

                _______              ______________            ________
               |       |            |              |          |        |
               | input |  demuxer   | encoded data |  muxer   | output |
               | file  | ---------> | packets      | -------> | file   |
               |_______|            |______________|          |________|

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

[Выбор потока]

ffmpeg предоставляет опцию "-map" для ручного управления выбором потока в каждом выходном файле. Пользователи могут пропустить "-map" и позволить ffmpeg выполнить автоматический выбор потока, как описано далее. Опции "-vn / -an / -sn / -dn" могут использоваться для пропуска включения видео, аудио, субтитров и данных соответственно, происходит ли ручное отображение или автоматическое, за исключением тех потоков, которые являются выходными для complex filtergraph-ов.

Приведенные далее подсекции описывают различные правила, применяемые в выборе потока. Даются примеры, как эти правила применяются на практике.

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

Автоматический выбор потока. При отсутствии map-опций для определенного выходного файла, ffmpeg инспектирует выходной формат для проверки, какой поток данных может быть в него включен, а именно video, audio и/или субтитры. Для каждого допустимого типа потока ffmpeg будет брать один поток, когда он доступен, из всех входов.

Этот выбор потока основывается на следующем критерии:

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

В случае, когда несколько потоков одного типа имеют одинаковую скорость, выбирается поток с наименьшим индексом.

Потоки данных или вложений не выбираются автоматически и могут быть подключены только с помощью "-map".

Выбор потока вручную. Когда используется "-map", вы выходной файл включаются только выбранные пользователем потоки, с одним описанным далее возможным исключением для выходов filtergraph.

Complex filtergraph-ы. Если есть какие-либо сложные выходные потоки filtergraph с немаркированными площадками, они будут добавлены в первый выходной файл. Это приведет к неустранимой ошибке, если тип потока не поддерживается выходным форматом. При отсутствии map-опции включение этих потоков приводит к тому, что автоматический выбор потоков их типов пропускается. Если map-опции присутствуют, эти потоки filtergraph включаются в дополнение к отображенным потокам.

Выходные потоки complex filtergraph с маркированными площадками будут отображаться один и только один раз.

Stream handling. Обработка потока не зависит от выбора потока, за исключением для субтитров, что описано далее. Обработка потока устанавливается через опцию "-codec", адресованную потокам в определенном выходном файле. В частности, опции кодека применяются ffmpeg после процесса выбора потока, и таким образом не влияют на последний. Если не была указана опция "-codec" для типа потока, то ffmpeg выберет кодер по умолчанию, зарегистрированный muxer выходного файла.

Для субтитров есть исключение. Если для выходного файла указан кодер субтитров, то будет включен первый найденный поток субтитров любого типа, text или image. ffmpeg не проверяет, может ли указанный кодер преобразовать выбранный поток, или является ли выбранный поток приемлемым в выходном формате. Это также относится к общему правилу: когда пользователь устанавливает кодер вручную, процесс выбора потока проверяет, может ли кодируемый поток быть мультиплексирован в выходной файл. Если это невозможно, то ffmpeg оборвет операцию и все выходные файлы не будут обработаны.

Следующие примеры иллюстрируют поведение, причуды и ограничения методов выбора потоков ffmpeg.

Предполагается, что есть 3 входных файла:

               input file 'A.avi'
                     stream 0: video 640x360
                     stream 1: audio 2 channels

               input file 'B.mp4'
                     stream 0: video 1920x1080
                     stream 1: audio 2 channels
                     stream 2: subtitles (text)
                     stream 3: audio 5.1 channels
                     stream 4: subtitles (text)

               input file 'C.mkv'
                     stream 0: video 1280x720
                     stream 1: audio 2 channels
                     stream 2: subtitles (image)

Пример автоматического выбора потока:

         ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

Здесь указаны 3 выходных файла, и для первых двух не установлены опции "-map", поэтому ffmpeg будет автоматически выбирать потоки для этих двух файлов.

out1.mkv это файл с контейнером Matroska, и он принимает потоки video, audio и subtitle, так что ffmpeg попытается выбрать по одному каждого типа потока. Для video он выберет "stream 0" из B.mp4, у которого самое высокое разрешение из всех видеопотоков. Для audio будет выбран "stream 3" из B.mp4, поскольку в нем больше всего каналов. Для субтитров будет выбран "stream 2" из B.mp4, который является первым потоком субтитров между A.avi и B.mp4.

out2.wav принимает только потоки audio, так что только будет выбран "stream 3" из B.mp4.

Для out3.mov, поскольку установлена опция "-map", не будет автоматического выбора потоков. Опция "-map 1:a" выберет все потоки audio из второго входного файла B.mp4. В этот выходной файл не будет включены никакие другие потоки.

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

Для третьего выходного файла установлена опция кодека "copy" для потоков audio, поэтому не будет и не может быть никаких операций decoding-filtering-encoding. Пакеты выбранных потоков будут переданы з входного файла и мультиплексированы в выходной файл.

Еще пример, автоматический выбор субтитров:

         ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

Хотя у out1.mkv контейнер Matroska, который принимает потоки субтитров, будут выбраны потоки video и audio. Поток субтитров C.mkv основан на image, а кодер субтитров по умолчанию мультиплексора Matroska основан на text, так что ожидаемая операция перекодирования невозможна, и поток не выбран. Однако в out2.mkv указан кодер субтитров в команде, и таким образом выбран поток субтитров в дополнение к потоку video. Присутствие "-an" запрещает выбор потока audio для out2.mkv.

Пример не помеченных выходов filtergraph:

         ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

Здесь настройка filtergraph использует опцию "-filter_complex", и состоит из одного фильтра video. Фильтр "overlay" требует ровно двух входных video, но ничего не указано, так что будут использованы первые два доступных потока video, A.avi и C.mkv. Выходная площадка фильтра не имеет метки, и поэтому посылается в первый выходной файл out1.mp4. По этой причине автоматический выбор потока video пропускается, что выбрало бы поток в B.mp4. Поток audio с самым большим количеством каналов, а именно "stream 3" в B.mp4, будет выбран автоматически. Однако поток субтитров не выбирается, поскольку у формата MP4 нет зарегистрированного по умолчанию кодера субтитров, и пользователь не указал кодер субтитров.

2-й выходной файл out2.srt принимает только основанные на text потоки субтитров. Таким образом, даже не смотря на то, что первый поток субтитров принадлежит C.mkv, он основан на image, и поэтому пропускается. Выбранный поток "stream 2" в B.mp4, это первый основанный на text поток субтитров.

Пример помеченных выходов filtergraph:

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
                      -map '[outv]' -an        out1.mp4 \
                                               out2.mkv \
                      -map '[outv]' -map 1:a:0 out3.mkv

Команда выше потерпит неудачу, поскольку выходная площадка, помеченная "[outv]", отображена дважды. Ни один из выходных файлов не должен обрабатываться.

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
                      -an        out1.mp4 \
                                 out2.mkv \
                      -map 1:a:0 out3.mkv

Команда выше также потерпит неудачу, поскольку у hue-фильтра метка "[outv]", и она никуда не отображена.

Эту команду следует изменить так:

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
                       -map '[outv1]' -an        out1.mp4 \
                                                 out2.mkv \
                       -map '[outv2]' -map 1:a:0 out3.mkv

Поток видео из B.mp4 посылается в фильтр hue, выход которого клонируется один раз с использованием фильтра split, и оба выхода помечены. Затем каждая копия отображается на первый и третий выходные файла.

Фильтр overlay (наложение), требующий двух входов video, использует первые два не используемых потока video. Это потоки из A.avi и C.mkv. Выход overlay не помечен, так он будет послан в первый выходной файл out1.mp4, независимо от присутствия опции "-map".

Фильтр aresample посылает первый не используемый поток audio в A.avi. Поскольку этот выход фильтра также не маркирован, он также отображается на первый выходной файл. Присутствие "-an" подавляет только автоматический или ручной выбор потоков для audio, из filtergraph не посылается выход. Оба этих отображаемых потоков должны быть упорядочены перед отображаемым потоком в out1.mp4.

Потоки video, audio и subtitle, отображаемые в "out2.mkv", полностью определяются автоматически.

out3.mkv состоит из клонированного вывода video из фильтра hue и первого потока audio из B.mp4.

[Опции]

Все числовые опции, если не указано что-то иное, принимают строку, представляющую число в качестве ввода, за которым может идти Си единица префикса, например: 'K', 'M' или 'G'.

Если 'i' добавляется к префиксу единицы Си, полный префикс будет интерпретироваться как префикс единицы для двоичных кратных, основанных на степенях 1024 вместо степеней 1000. Добавление 'B' к префиксу единицы Си умножает значение на 8. Это позволяет использовать, например: 'KB', 'MiB', 'G' и 'B' в качестве суффиксов числа.

Параметры, которые не принимают аргументы, являются логическими параметрами, и устанавливают соответствующее значение true. Для них можно установить значение false путем префикса имени параметра с помощью "no". Например, при использовании "-nofoo" логическому параметру с именем "foo" присваивается значение false.

Спецификаторы потоков. Некоторые опции применяются на поток, например bitrate или codec. Спецификаторы потоков используются для точного указания, к какому потоку (потокам) относится данная опция.

Спецификатор потока это строка, обычно добавляемая к имени параметра, и отделяемая от него двоеточием. Например "-codec:a:1 ac3" содержит спецификатор потока "a:1" который соответствует второму потоку audio. Таким образом, это выберет кодек ac3 для второго потока audio.

Спецификатор потока может соответствовать нескольким потокам, так что опция применяется ко всем из них. Например, спецификатор потока в "-b:a 128k" соответствует всем звуковым потокам.

Пустой спецификатор потока соответствует всем потокам. Например, "-codec copy" или "-codec: copy" будет делать копию всех потоков без перекодировки.

Возможные формы спецификаторов потоков:

stream_index

Соответствует потоку с этим индексом. Например "-threads:1 4" установит thread count для второго потока на 4. Если stream_index используется в качестве дополнительного спецификатора потока (см. далее), то это выберет номер потока stream_index из совпавших потоков. Нумерация потока основана на порядке потоков, как обнаружено libavformat, за исключением случая, когда также указан program ID. В этом случае это основано на порядке потоков в программе.

stream_type[:additional_stream_specifier]

stream_type это одно из следующего: 'v' или 'V' для video, 'a' для audio, 's' для subtitle, 'd' для data и 't' для attachments. 'v' соответствует всем потокам video, 'V' соответствует только потокам video, которые не являются прикрепленными картинками, миниатюрами video или обложками (cover arts). Если используется additional_stream_specifier, тогда он соответствует потокам, которые все имеют этот тип, и совпадают с additional_stream_specifier. Иначе он соответствует всем потокам указанного типа.

p:program_id[:additional_stream_specifier]

Соответствует потокам, которые в программе с идентификатором program_id. Если используется additional_stream_specifier, то он совпадает с потоками, которые все являются частями программы, и соответствуют additional_stream_specifier.

#stream_id или i:stream_id

Соответствуют потоку по идентификатору (например PID в контейнере MPEG-TS).

m:key[:value]

Соответствует потокам с тегом метаданных key, у которого указанное значение value. Если value не указано, то соответствует потокам, которые содержат этот тег с любым значением.

u

Соответствует потокам с полезной (usable) конфигурацией, кодек должен быть определен и должна присутствовать существенная информация, такая как размерность video или частота дискретизации звука (audio sample rate).

Обратите внимание, что в ffmpeg соответствие метаданных правильно работает только для входных файлов.

Общие опции. Эти опции используются и другими инструментами ff*.

-L

Покажет лицензию.

-h, -?, -help, --help [arg]

Покажет справку по использованию. Может быть указан дополнительный параметр, чтобы напечаталась подсказка по определенной теме. Если никаких аргументов не указано, то будут показаны только базовые (не продвинутые) опции.

Для arg возможны значения:

   long

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

   full

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

   decoder=decoder_name

   Напечатает подробную информацию по декодеру с именем decoder_name. Используйте опцию -decoders для получения списка всех декодеров.

   encoder=encoder_name

   Напечатает подробную информацию по кодеру с именем encoder_name. Используйте опцию -encoders для получения списка всех кодеров.

   demuxer=demuxer_name

   Напечатает подробную информацию по демультиплексору с именем demuxer_name. Используйте опцию -formats для получения списка всех демультиплексоров и мультиплексоров.

   muxer=muxer_name

   Напечатает подробную информацию по мультиплексору с именем muxer_name. Используйте опцию -formats для получения списка всех демультиплексоров и мультиплексоров.

   filter=filter_name

   Напечатает подробную информацию по фильтру с именем filter_name. Используйте опцию -filters для получения списка всех фильтров.

   bsf=bitstream_filter_name

   Напечатает подробную информацию по bitstream-фильтру с именем bitstream_filter_name. Используйте опцию -bsfs для получения списка всех bitstream-фильтров.

   protocol=protocol_name

   Напечатает подробную информацию по протоколу с именем protocol_name. Используйте опцию -protocols для получения списка всех протоколов.

-version

Покажет версию.

-buildconf

Покажет конфигурацию сборки, по одной опции на строку.

-formats

Покажет доступные форматы (включая устройства).

-demuxers

Покажет доступные демультиплексоры.

-muxers

Покажет доступные мультиплексоры.

-devices

Покажет доступные устройства.

-codecs

Покажет все доступные кодеки для libavcodec.

Обратите внимание, что термин 'codec', используемый в этой документации, более корректно было бы заменить на формат потока данных (media bitstream format).

-decoders

Покажет доступные декодеры.

-encoders

Покажет все доступные кодеры.

-bsfs

Покажет доступные bitstream-фильтры.

-protocols

Покажет доступные протоколы.

-filters

Покажет доступные libavfilter фильтры.

-pix_fmts

Покажет доступные pixel-форматы.

-sample_fmts

Покажет доступные sample-форматы.

-layouts

Покажет имена каналов и стандартные макеты (layouts) каналов.

-dispositions

Покажет диспозиции потоков.

-colors

Покажет распознанные имена цветов.

-sources device[,opt1=val1[,opt2=val2]...]

Покажет распознанные источники устройства ввода (input device). Некоторые устройства могут предоставлять зависящие от системы имена источника, которые не могут быть определены автоматически. Возвращенный список не может всегда подразумеваться полным.

   ffmpeg -sources pulse,server=192.168.0.4

-sinks device[,opt1=val1[,opt2=val2]...]

Покажет автоматически определенные сливы устройства вывода (output device). Некоторые устройства могут предоставлять зависящие от системы имена сливов, которые не могут быть определены автоматически. Возвращенный список не может всегда подразумеваться полным.

   ffmpeg -sinks pulse,server=192.168.0.4

-loglevel [flags+]loglevel | -v [flags+]loglevel

Установит уровень лога и флаги, используемые библиотекой.

Опциональные префиксы flags могут состоять из следующих значений:

   repeat

   Показывает, что повторяющийся лог не сжимается до первой строки, и опускается строка "Last message repeated n times".

   level

   Показывает, что вывод лога должен добавить префикс "[level]" для каждой строки сообщения. Это может использоваться как альтернатива подкраски лога, например когда лог сбрасывается в файл.

Флаги могут также использоваться отдельно добавлением префикса '+'/'-' для установки/сброса одиночного флага без влияния на другие флаги или изменения loglevel. Когда установлены оба flags и loglevel, ожидается разделитель '+' между последним значением flags и перед loglevel.

loglevel это строка, содержащая одно из следующих значений:

   quiet, -8

   Вообще ничего не показывать; работать тихо.

   panic, 0

   Покажет только фатальные ошибки, которые приведут к краху процесса, такие как assertion failure. Это в настоящее время не используется для чего-либо.

   fatal, 8

   Покажет только фатальные ошибки. Это такие ошибки, после которых процесс абсолютно не может продолжаться.

   error, 16

   Покажет все ошибки, включая те, из которых возможно восстановление.

   warning, 24

   Покажет все предупреждения и ошибки. Будут показаны любые сообщения, связанные с потенциально некорректным или неожиданными событиями.

   info, 32

   Покажет информационные сообщения во время обработки, дополнительно к предупреждениям и ошибкам. Это значение по умолчанию.

   verbose, 40

   То же, что и "info", только более подробно.

   debug, 48

   Покажет все, включая информацию отладки.

   trace, 56

Например, чтобы разрешить повторяющийся вывод лога, добавьте префикс "level", и установите loglevel в "verbose":

   ffmpeg -loglevel repeat+level+verbose -i input output

Другой пример, который разрешает повторяющийся вывод в лог без влияния на текущее состояние префикса флага "level" или loglevel:

   ffmpeg [...] -loglevel +repeat

По умолчанию программа выводит логи в stderr. Если терминал поддерживает цвета вывода, то используется цветовая маркировка текста для ошибок и предупреждений. Раскраску лога можно запретить переменной окружения AV_LOG_FORCE_NOCOLOR, или включить принудительно установкой переменной AV_LOG_FORCE_COLOR.

-report

Дамп всей командной строки и вывод лога в файл "program-YYYYMMDD-HHMMSS.log", находящийся в текущей директории. Этот файл может быть полезен для bug-репортов. Эта опция также подразумевает "-loglevel debug".

Установка переменной окружения FFREPORT в любое значение даст такой же эффект. Если значение состоит из последовательности значений с разделителем ':', то эти опции будут влиять на отчет; значения опций должны быть экранированы, если они содержат специальные символы или символ разделителя ':' (см. секцию "Quoting and escaping" в руководстве ffmpeg-utils).

Распознаются следующие опции:

   file

   Установит имя файла, используемого для отчета; %p расширяется в имя программы, %t в метку времени, "%%" расширяется в просто символ "%".

   level

   Установит подробность лога указанием числового значения (см. "-loglevel").

Например, для вывода отчета в файл с именем ffreport.log, с использованием уровня лога 32 (псевдоним для уровня лога "info"):

   FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

Ошибки парсинга переменной окружения не фатальны, и не будут появляться в отчете.

-hide_banner

Подавляет печать баннера. Все утилиты FFmpeg будут обычно выводить сообщение копирайта, опции сборки и версии библиотек. Эта опция может использоваться для подавления печати этой информации.

-cpuflags flags (global)

Позволяет установить и очистить флаги cpu. Эта опция предназначена для тестирования. Не используйте её, если не знаете, что делаете.

   ffmpeg -cpuflags -sse+mmx ...
   ffmpeg -cpuflags mmx ...
   ffmpeg -cpuflags 0 ...

Возможные флаги для этой опции:

   x86

      mmx
      mmxext
      sse
      sse2
      sse2slow
      sse3
      sse3slow
      ssse3
      atom
      sse4.1
      sse4.2
      avx
      avx2
      xop
      fma3
      fma4
      3dnow
      3dnowext
      bmi1
      bmi2
      cmov

   ARM

      armv5te
      armv6
      armv6t2
      vfp
      vfpv3
      neon
      setend

   AArch64

      armv8
      vfp
      neon

   PowerPC

      altivec

   Specific Processors

      pentium2
      pentium3
      pentium4
      k6
      k62
      athlon
      athlonxp
      k8

-cpucount count (global)

Отменяет детектирование количества CPU. Эта опция предназначена для тестирования. Не используйте её, если не знаете, что делаете.

   ffmpeg -cpucount 2

-max_alloc bytes

Установит максимальный лимит на выделение блока памяти в куче семейством malloc-функций ffmpeg. Будьте предельно осторожны при использовании этой опции. Не используйте её, если не понимаете всех последствий. Значение по умолчанию INT_MAX.

AVOptions

Эти опции представлены непосредственно библиотеками libavformat, libavdevice и libavcodec. Чтобы увидеть список доступных AVOptions используйте опцию -help. Эти опции поделены на 2 категории:

   generic

   Эти опции могут быть установлены для любого контейнера, кодека или устройства. Generic-опции перечислены под опциями AVFormatContext для контейнеров/устройств и под опциями AVCodecContext для кодеков.

   private

   Эти опции специфичны для указанного контейнера, устройства или кодека. Private-опции перечислены в соответствующих описаниях containers/devices/codecs.

Например, чтобы записать заголовок ID3v2.3 вместо умолчательного ID3v2.4 для файла MP3, используйте private-опцию id3v2_version для MP3 muxer:

   ffmpeg -i input.flac -id3v2_version 3 out.mp3

Все опции кодека AVOptions применяются на поток, и таким образом к ним должен быть присоединен спецификатор потока:

   ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k \
    -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

В приведенном выше примере многоканальный поток audio дважды отображается на вывод. Первый экземпляр кодируется кодеком ac3 и битрейтом 640k. Второй экземпляр микшируется вниз до 2 каналов и кодируется кодекомaac. Битрейт 128k указан для использования абсолютного индекса выходного потока.

Замечание: синтаксис -nooption не может использоваться для двоичных опций AVOptions, используйте -option 0/-option 1.

Замечание: старый недокументированный способ указания per-stream AVOptions путем добавления v/a/s к именам опций теперь устарел, и скоро будет удален.

Основные опции

-f fmt (input/output)

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

-i url (input)

Ссылка на входной файл.

-y (global)

Перезапишет выходные файлы без запроса.

-n (global)

Не перезапишет выходные файлы и сразу завершит работу, если указанный выходной файл уже существует.

-stream_loop number (input)

Установит количество number циклов повтора для входного потока. 0 означает без циклов повтора, -1 означает бесконечный цикл.

-recast_media (global)

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

-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)

Выберет кодер (когда используется перед выходным файлом) или декодер (когда используется перед входным файлом) для одного или большего количества потоков. Здесь codec это имя декодера/кодера или специальное значение "copy" (только для вывода), чтобы показать, что поток не должен перекодироваться.

Следующий пример закодирует все потоки video с libx264 и копирует все потоки audio:

   ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

Длч каждого потока применяется последняя соответствующая "c", так что следующий пример будет копировать все потоки, кроме второго video, которое будет кодироваться libx264 и 138th audio, кодированием с libvorbis:

   ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

-t duration (input/output)

Когда используется вместе с опцией ввода (перед "-i"), ограничит длительность (duration) чтения данных из входного файла. Когда используется как опция вывода (перед output url), остановит запись после того, как длительность достигнет duration. Здесь duration должна быть спецификацией времени, см. секцию "Time duration" в руководстве ffmpeg-utils(1).

Опции -to и -t взаимоисключающие, и -t имеет приоритет.

-to position (input/output)

Остановит запись вывода или чтение ввода на указанной позиции position. Здесь position должно быть спецификацией длительности по времени, см. секцию "Time duration" в руководстве ffmpeg-utils(1).

Опции -to и -t взаимоисключающие, и -t имеет приоритет.

-fs limit_size (output)

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

-ss position (input/output)

Когда используется как опция ввода (перед "-i"), переустановит позицию ввода входного файла на position. Обратите внимание, что для большинства форматов невозможна точная установка позиции, так что ffmpeg будет делать seek на ближайшую позицию. Когда транскодирование и -accurate_seek разрешены (по умолчанию), этот дополнительный сегмент между точкой seek и position будет декодирован и отброшен. Когда делается копирование потока или когда используется -noaccurate_seek, эта часть расхождения позиции будет сохранена.

Когда используется как опция вывода (перед output url), декодирует, но выбрасывает входные данные при достижении метки времени указанной позиции.

Здесь position должно быть спецификацией длительности по времени, см. секцию "Time duration" в руководстве ffmpeg-utils(1).

-sseof position (input)

Наподобие опции "-ss", но позиция указывается относительно конца файла (EOF). Отрицательные значения более ранние в файле, 0 это EOF.

-isync input_index (input)

Назначает ввод как источник синхронизации.

При этом будет учтена разница между начальным временем целевого и эталонного входов, и временные метки целевого файла будут смещены на эту разницу. Для получения ожидаемых результатов исходные временные метки двух входов должны быть получены из одного и того же источника синхронизации. Если задано "copyts", то необходимо также задать "start_at_zero". Если у какого-либо из входов отсутствует начальная временная метка, корректировка синхронизации не производится.

Допустимые значения — это значения, относящиеся к допустимому индексу входного сигнала ffmpeg. Если ссылка синхронизации — это сам целевой индекс или -1, то корректировка меток времени целевых данных не производится. Источник синхронизации не может быть синхронизирован с каким-либо другим входным сигналом.

Значение по умолчанию -1.

-itsoffset offset (input)

Установит смещение времени ввода.

Здесь offset должно быть спецификацией длительности времени, см. секцию "Time duration" в руководстве ffmpeg-utils(1).

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

-itsscale scale (input,per-stream)

Масштабирует входные метки времени. Здесь scale должно быть значением с плавающей запятой.

-timestamp date (output)

Установит метку времени записи (recording timestamp) в контейнере.

Здесь date должно быть спецификацией времени, см. секцию "Date" в руководстве ffmpeg-utils(1).

-metadata[:metadata_specifier] key=value (output,per-metadata)

Установит пару key/value метаданных.

Может быть предоставлен опциональный metadata_specifier для установки metadata на потоках, частях или программах. Для дополнительной информации см. документацию "-map_metadata".

Эта опция переназначает metadata, установленные опцией "-map_metadata". Это также может удалить метаданные с помощью пустого значения.

Например, установка title в выходном файле:

   ffmpeg -i in.avi -metadata title="my title" out.flv

Для установки языка первого потока audio:

   ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

-disposition[:stream_specifier] value (output,per-stream)

Установит диспозицию для потока.

По умолчанию диспозиция копируется из входного потока, кроме случая, когда выходной поток эта опция применяет для подачи в complex filtergraph - в этом случае диспозиция по умолчанию отменяется.

Здесь value это последовательность элементов, разделенных '+' или '-'. Первый элемент также может быть с префиксом '+' или '-', в таком случае эта опция модифицирует значение по умолчанию. Иначе (когда первый элемент без префикса) эта опция переназначит значение по умолчанию. Префикс '+' добавляет указанную диспозицию, '-' удаляет. Также можно очистить диспозицию установкой в 0.

Если для выходного файла не указаны опции "-disposition", то ffmpeg автоматически установит расположение 'default' для первого потока каждого типа, когда в выходном файле есть несколько потоков этого типа, и ни один поток этого типа не отмечен как поток по умолчанию.

Опция "-dispositions" перечислит известные диспозиции.

Например, чтобы сделать второй поток audio потоком по умолчанию:

   ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv

Чтобы сделать второй поток субтитров потоком по умолчанию и удалить диспозицию по умолчанию из первого потока субтитров:

   ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv

Чтобы добавить встроенную обложку (cover/thumbnail):

   ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

Не все мультиплексоры поддерживают embedded thumbnails, и те кто это может делать, поддерживают только несколько форматов, наподобие JPEG или PNG.

-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)

Создаст программу с указанным заголовком (title), program_num и добавит к ней указанный поток (потоки).

-target type (output)

Укажет тип целевого файла ("vcd", "svcd", "dvd", "dv", "dv50"). Здесь type может быть с префиксом "pal-", "ntsc-" или "film-" для использования соответствующего стандарта. Все опции формата (bitrate, codecs, buffer sizes) тогда установятся автоматически. Вы можете просто ввести:

   ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

Тем не менее вы можете указать дополнительные параметры, если уверены, что они не противоречат стандарту, например:

   ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

Применяются следующие наборы параметров для каждой target.

   VCD

      < pal>:
      -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
      -s 352x288 -r 25
      -codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
      -ar 44100 -ac 2
      -codec:a mp2 -b:a 224k

      < ntsc>:
      -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
      -s 352x240 -r 30000/1001
      -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
      -ar 44100 -ac 2
      -codec:a mp2 -b:a 224k

      < film>:
      -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
      -s 352x240 -r 24000/1001
      -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
      -ar 44100 -ac 2
      -codec:a mp2 -b:a 224k

   SVCD

      < pal>:
      -f svcd -packetsize 2324
      -s 480x576 -pix_fmt yuv420p -r 25
      -codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
      -ar 44100
      -codec:a mp2 -b:a 224k

      < ntsc>:
      -f svcd -packetsize 2324
      -s 480x480 -pix_fmt yuv420p -r 30000/1001
      -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
      -ar 44100
      -codec:a mp2 -b:a 224k

      < film>:
      -f svcd -packetsize 2324
      -s 480x480 -pix_fmt yuv420p -r 24000/1001
      -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
      -ar 44100
      -codec:a mp2 -b:a 224k

   DVD

      < pal>:
      -f dvd -muxrate 10080k -packetsize 2048
      -s 720x576 -pix_fmt yuv420p -r 25
      -codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
      -ar 48000
      -codec:a ac3 -b:a 448k

      < ntsc>:
      -f dvd -muxrate 10080k -packetsize 2048
      -s 720x480 -pix_fmt yuv420p -r 30000/1001
      -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
      -ar 48000
      -codec:a ac3 -b:a 448k

      < film>:
      -f dvd -muxrate 10080k -packetsize 2048
      -s 720x480 -pix_fmt yuv420p -r 24000/1001
      -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
      -ar 48000
      -codec:a ac3 -b:a 448k

   DV

      < pal>:
      -f dv
      -s 720x576 -pix_fmt yuv420p -r 25
      -ar 48000 -ac 2

      < ntsc>:
      -f dv
      -s 720x480 -pix_fmt yuv411p -r 30000/1001
      -ar 48000 -ac 2

      < film>:
      -f dv
      -s 720x480 -pix_fmt yuv411p -r 24000/1001
      -ar 48000 -ac 2

"dv50" target идентична "dv" target за исключением формата pixel, установленного "yuv422p" для всех трех стандартов.

Любое установленное пользователем значение для указанного выше параметра отменит предустановленное значение target. В этом случае вывод может не удовлетворять целевому стандарту.

-dn (input/output)

В качестве опции input блокирует все потоки данных файла от фильтрации или от того, чтобы они были автоматически выбраны или отображены на любой вывод. См. опцию "-discard" для индивидуального запрета потоков.

В качестве опции output запретит запись данных, например автоматический выбор или отображение любого потока данных. Для полного ручного контроля см. описание опции "-map".

-dframes number (output)

Установит количество number кадров данных для вывода. Это устаревший псевдоним для "-frames:d", который стоит использовать вместо этой опции.

-frames[:stream_specifier] framecount (output,per-stream)

Остановит запись потока после framecount кадров.

-q[:stream_specifier] q (output,per-stream)
-qscale[:stream_specifier] q (output,per-stream)

Использует фиксированное масштабирование качество (fixed quality scale, VBR). Это означает, что q/qscale зависит от кодека. Если qscale используется без stream_specifier, то это применяется только к потоку video, так что сохранится совместимость с предыдущим поведением и поскольку указание одного и того же значения, специфичного для кодека, для двух различных кодеков, то есть аудио и видео, в общем случае не является тем, что предполагается, если не используется stream_specifier.

-filter[:stream_specifier] filtergraph (output,per-stream)

Создаст указанный filtergraph и будет его использовать для фильтрации потока.

filtergraph это описание фильтр-графа, применяемого к потоку, и он должен иметь один вход и один выход одного и того же типа потока. В filtergraph данные input ассоциированы с меткой "in", и данные output с меткой "out". См. руководство ffmpeg-filters для дополнительной информации по синтаксису filtergraph.

См. опцию -filter_complex, если хотите создать filtergraph-ы с несколькими входами и/или выходами.

-filter_script[:stream_specifier] filename (output,per-stream)

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

-reinit_filter[:stream_specifier] integer (input,per-stream)

Эта двоичная опция определяет, будут ли переинициализированы графы фильтров, на которые поступает этот поток, при изменении параметров входного кадра во время потока. Этот параметр включен по умолчанию, поскольку большинство видео- и аудиофильтров не могут обрабатывать отклонения в свойствах входного кадра. При переинициализации текущее состояние фильтра теряется, например, ссылка на количество кадров "n", доступная в некоторых фильтрах. Все кадры, буферизированные на момент переинициализации, теряются. Свойства, изменение которых запускает переинициализацию: для видео — разрешение кадра или формат пикселей; для аудио — формат дискретизации, частота дискретизации, количество каналов или схема каналов.

-filter_threads nb_threads (global)

Определяет, как много потоков используется для обработки конвейера фильтра (под потоком здесь понимается ресурс процессора, thread). Каждый конвейер будет формировать пул потоков (thread pool) с множеством thread-ов, доступных для параллельных вычислений. По умолчанию количество потоков соответствует количеству доступных CPU.

-pre[:stream_specifier] preset_name (output,per-stream)

Указывает пресет для соответствующего потока (потоков).

-stats (global)

Печатает прогресс/статистику кодирования. Это включено по умолчанию, для явного запрета укажите "-nostats".

-stats_period time (global)

Установит период обновления прогресса/статистики кодирования. По умолчанию 0.5 секунды.

-progress url (global)

Посылает удобную для чтения из программы информацию прогресса по адресу ссылки url.

Информация прогресса записывается периодически и по окончанию кодирования. Она построена из строк "key=value". Здесь key состоит из любых цифро-буквенных символов. Последний key последовательности прогресса всегда "progress".

Период обновления устанавливается с помощью "-stats_period".

-stdin

Разрешает взаимодействие со стандартным вводом. Включено по умолчанию кроме случая, когда стандартный ввод используется как input. Для явного запрета вам нужно указать "-nostdin".

Запрет взаимодействия со стандартным вводом полезно, например, если ffmpeg находится в группе фоновых процессов. Грубо тот же результат может быть получен с помощью "ffmpeg ... < /dev/null", но это требует наличия шелла.

-debug_ts (global)

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

См. также опцию "-fdebug ts".

-attach filename (output)

Добавит attachment к выходному файлу. Это поддерживается некоторыми форматами, наподобие Matroska, например для шрифтов, используемых для отрисовки субтитров. Attachments реализованы как специальный тип потока, так что эта опция добавит к файлу новый поток. После этого можно будет использовать параметры для каждого потока как обычно. Потоки вложений, созданные с помощью этого параметра, будут создаваться после всех остальных потоков (т.е. созданных с помощью "-map" или автоматического сопоставления).

Обратите внимание, что для Matroska вы также должны установить тег mimetype метаданных (подразумевается, что поток attachment будет третьим в выходном файле):

    ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

-dump_attachment[:stream_specifier] filename (input,per-stream)

Извлечет совпавший attachment-поток в файл filename. Если filename пустое, то используется значение "filename" тега метаданных.

Например, для извлечения первого attachment в файл с именем 'out.ttf':

   ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

Для извлечения всех attachment в файлы, определенные тегом "filename":

   ffmpeg -dump_attachment:t "" -i INPUT

Техническое замечание: attachments реализованы как дополнительные данные кодека (codec extradata), так что эта опция может фактически использоваться для распаковки extradata из любого потока, не только для извлечения attachments.

Video Options

-vframes number (output)

Установит количество кадров video для вывода. Это устаревший псевдоним для "-frames:v", который должен использоваться вместо этой опции.

-r[:stream_specifier] fps (input/output,per-stream)

Установит частоту кадров (frame rate, значение в Гц, в виде дробного числа или аббревиатуры).

В качестве опции input игнорирует любые метки времени, сохраненные в файле, и генерирует вместо этого метки времени, подразумевая постоянную частоту кадров fps. Это не то же самое, что опция -framerate, используемая для форматов наподобие image2 или v4l2 (то же самое было и в старых версиях FFmpeg). В случае сомнений используйте -framerate вместо входной опции -r.

В качестве опции output:

   video encoding

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

   video streamcopy

   Показывает для muxer, что fps это частота кадров потока. В этом случае никакие данне не отбрасываются или не дублируются. Это может привести к генерации некорректных файлов, если fps не соответствует фактической частоте кадоров, как это определено метками времени пакета. См. также bitstream-фильтр "setts".

-fpsmax[:stream_specifier] fps (output,per-stream)

Установит максимальную частоту кадров (значение в Гц, дробное число или аббревиатура).

Ограничивает выходную частоту кадров, если она установлена ​​автоматически и превышает указанное значение. Полезно при пакетной обработке или когда входная частота кадров ошибочно определяется как очень высокая. Невозможно установить вместе с опцией "-r". Игнорируется при streamcopy.

-s[:stream_specifier] size (input/output,per-stream)

Установит размер кадра.

В качестве опции input это шорткат для private-опции video_size, распознаваемой некоторыми демультиплексорами, для которых размер кадра не сохранен в файле, или конфигурируемый - например для raw video или захвата видео (video grabbers).

В качестве опции output, вставит video-фильтр "scale" в конец соответствующего filtergraph. Используйте "scale" фильтр напрямую для встави его в начало или какое-то другое место.

Формат используется wxh (по умолчанию - такой же, как в источнике).

-aspect[:stream_specifier] aspect (output,per-stream)

Установит соотношение сторон видео (video display aspect ratio), указанное параметром aspect.

Здесь aspect может быть числом с плавающей запятой, заданным строкой, либо строкой в форме num:den, где num и den это числитель и знаменатель соотношения сторон экрана. Например, допустимы значения "4:3", "16:9", "1.3333", и "1.7777".

Если используется вместе с -vcodec copy, то будет влиять на aspect ratio, сохраненное на уровне контейнера, но не на aspect ratio, сохраненное в закодированных кадрах, если это имеет место.

-display_rotation[:stream_specifier] rotation (input,per-stream)

Установит метаданные поворота video.

Здесь rotation это десятичное число, указывающее количество градусов, на которое video должно быть повернуто по часовой стрелке перед отображением.

Эта опция отменит rotation/display transform metadata, сохраненные в файле, если таковые есть. Когда video перекодируется (вместо копирования), и разрешено "-autorotate", видео будет повернуто на стадии фильтрации. Иначе metadata будут записаны в выходной файл, если muxer это поддерживает.

Если предоставлены опции "-display_hflip" и/или "-display_vflip", то они применяются после поворота, указанного этой опцией.

-display_hflip[:stream_specifier] (input,per-stream)

Усановит, должна ли картинка на дисплее быть показана отраженной по горизонтали.

См. описание опции "-display_rotation" для дополнительной информации.

-display_vflip[:stream_specifier] (input,per-stream)

Усановит, должна ли картинка на дисплее быть показана отраженной по вертикали.

См. описание опции "-display_rotation" для дополнительной информации.

-vn (input/output)

В качестве опции input блокирует все потоки video файла от фильтрации или автоматического выбора или отображения для любого вывода. См. описание опции "-discard" для индивидуального запрета потоков.

В качестве опции output запрещает запись video, т. е. автоматический выбор или отображение любого потока video. Для полного ручного управления см. опцию "-map".

-vcodec codec (output)

Установит кодек video. Это псевдоним для "-codec:v".

-pass[:stream_specifier] n (output,per-stream)

Выберет номер прохода (1 или 2). Это используется для кодирования видео за 2 прохода. Статистика video записывается на первом проходе в лог-файл (см. также опцию -passlogfile), и на втором проходе лог-файл используется для генерации video с точно запрошенным битрейтом. На проходе 1 вы можете просто деактивировать audio и установить output в null, например для Windows и Unix:

   ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
   ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

-passlogfile[:stream_specifier] prefix (output,per-stream)

Установит префикс two-pass файла лога в prefix, по умолчанию префикс имени файла "ffmpeg2pass". Полное имя файла будет PREFIX-N.log, где N это номер определенного выходного потока.

-vf filtergraph (output)

Создаст filtergraph и будет его использовать для фильтрации потока.

Это псевдоним для "-filter:v", см. описание опции -filter.

-autorotate

Автоматически повернет video в соответствии с метаданными файла. Разрешено по умолчанию, исопользуйте -noautorotate для запрета этой фичи.

-autoscale

Автоматически масштабирует video в соответствии с разрешением первого кадра. Разрешено по умолчанию, используйте -noautoscale для запрета. Когда autoscale запрещено, все выходные кадры фильтр-графа могут не иметь такое же разрешение, и могут быть неадекватными для некоторых кодеров/мультиплексеров. Таким образом, не рекомендуется это запрещать, если вы не уверены, что делаете. Запрещайте autoscale на свой риск.

Advanced Video опции

-pix_fmt[:stream_specifier] format (input/output,per-stream)

Установит pixel формат. Используйте "-pix_fmts", чтобы показать все поддерживаемые pixel форматы. Если выбранный pixel формат не может быть выбран, ffmpeg будет печатать предупрежнение, и выберет лучший pixel формат, поддерживаемый кодером. Если pix_fmt снабжен префиксом "+", то ffmpeg выйдет с ошибкой, если запрошенный pixel формат не может быть выбран, и автоматические преобразования внутри filtergraph-ов запрещены. Если pix_fmt это одиночный символ "+", то ffmpeg выберет тот же pixel формат, что и у input (или у graph output) и автоматические преобразования запрещены.

-sws_flags flags (input/output)

Установит флаги по умолчанию flags для библиотеки libswscale. Эти флаги используются автоматически вставленными фильтрами "scale" и простыми filtergraph-ами, если это не переопределено определением filtergraph. См. руководство ffmpeg-scaler для списка опций масштабирования.

-rc_override[:stream_specifier] override (output,per-stream)

Переопределение управления скоростью для определённых интервалов, отформатированных как список "int,int,int", разделённых косыми чертами. Два первых значения это номера начального и конечного кадров, а последнее это квантизер, если число положительное, или коэффициент качества, если отрицательное.

-psnr

Вычислит PSNR сжатых кадров. Эта опция устарела, вместо неё передайте флаг PSNR кодеру, исопльзуя "-flags +psnr".

-vstats

Дамп статистики кодирования video в файл vstats_HHMMSS.log. См. секцию с описанием формата файла vstats.

-vstats_file file

Дамп статистики кодирования video в файл. См. секцию с описанием формата файла vstats.

-vstats_version file

Указывает, какая версия формата vstats используется. По умолчанию 2. См. секцию с описанием формата файла vstats.

-vtag fourcc/tag (output)

Принудительно установит video tag/fourcc. Это псевдоним для "-tag:v".

-vbsf bitstream_filter

Устарело, см. -bsf.

-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)
-force_key_frames[:stream_specifier] expr:expr (output,per-stream)
-force_key_frames[:stream_specifier] source (output,per-stream)

Здесь force_key_frames может получать аргументы в следующей форме:

   time[,time...]

   Если аргумент состоит из меток времени, то ffmpeg округлит указанные времена на ближайшую метку времени output по базе времени кодера, и принудительно установит ключевой кадр (keyframe) на первый кадр, у которого метка времени равна или больше чем вычисленная метка времени. Обратите внимание, что если база времени кодера слишком грубая, то ключевые кадры могут быть установлены на кадры с метками времени, которые меньше указанного времени. По умолчанию база времени кодера это инверсия от частоты кадров output, но может быь установлена через "-enc_time_base".

   Если одно из времен ""chapters"[delta]", то это расширяется во время начала всех частей в файле, сдвинутых на delta, выраженную как время в секундах. Эта опция может быть полезна для гарантии, что позиция seek находится на метке главы или в любом другом указанном месте выходного файла.

   Например, чтобы вставить key frame на 5 минутах, плюс ключевые кадры за 0,1 секунды до начала каждой главы:

      -force_key_frames 0:05:00,chapters-0.1

   expr:expr

   Если аргумент имеет префикс с  "expr:", то строка expr интерпретируется как выражение, вычисляемое для каждого кадра. Ключевой кадр принудительно устанавливается в случае, если оценка не равна нулю.

   Выражение в expr может содержать следующие константы:

      n

      Номер текущего обработанного кадра, начиная с 0.

      n_forced

      Количество принудительно установленных кадров.

      prev_forced_n

      Номер предыдущего установленного кадра, это будет "NAN", когда еще не был утановлен keyframe.

      prev_forced_t

      Время предыдущего установленного кадра, это будет "NAN", когда еще не был утановлен keyframe.

      t

      Время текущего обработанного кадра.

      Например, для принудительной установки ключевого кадра каждые 5 секунд, вы можете указат:

         -force_key_frames expr:gte(t,n_forced*5)

      Для установки ключевого кадра после 5 секунд от последнего установленного, начиная с секунды 13:

         -force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))

   source

   Когда аргумент "source", ffmpeg принудительно создаст ключевой кадр, если текущий кодируемый кадр помечен как ключевой кадр в источнике. В тех случаях, когда этот конкретный исходный кадр должен быть отброшен, вместо этого следует использовать следующий доступный кадр в качестве ключевого кадра.

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

-copyinkf[:stream_specifier] (output,per-stream)

Когда выполняется копирование потока, копируются также не ключевые кадры (non-key), найденные в начале.

-init_hw_device type[=name][:device[,key=value...]]

Инициализирует новое аппаратное устройство типа type с именем name, используя указанные параметры устройства. Если имя не указано, то будет принято имя по умолчанию в форме "type%d".

Значение device и последующих аргументов зависит от type устройства:

   cuda

   device это номер устройства CUDA.

   Распознаются следующие опции:

      primary_ctx

      Если установлено в 1, то используется контекст основного устройства (primary device context) вместо создания нового.

      Примеры:

      -init_hw_device cuda:1

      Выбрать второе устройство в системе.

      -init_hw_device cuda:0,primary_ctx=1

      Выбрать первое устройство и использовать primary device context.

   dxva2

   device это номер адаптера экрана Direct3D 9.

   d3d11va

   device это номер адаптера экрана Direct3D 11.

   vaapi

   device это либо имя дисплея X11, либо DRM render node, либо индеем адаптера DirectX. Если это не указано, то будет сделана попытка открыть дисплей X11 по умолчанию ($DISPLAY), а затем первый узел визуализации DRM (DRM render node /dev/dri/renderD128) или адаптер DirectX по умолчанию в Windows.

   vdpau

   device это имя дисплея X11. Если не указано, то будет сделана попытка открыть дисплей X11 по умолчанию ($DISPLAY).

   qsv

   device выберет значение в MFX_IMPL_*. Допустимы значения:

      auto
      sw
      hw
      auto_any
      hw_any
      hw2
      hw3
      hw4

      Если не указано, то используется auto_any. Обратите внимание, что может быть проще достичь желаемого результата для QSV, создав подходящее для платформы подустройство (subdevice dxva2 или d3d11va или vaapi), а затем извлечь из этого устройство QSV.

      Альтернативно child_device_type поможет выбрать подходяй для платформы (platform-appropriate) тип подустройства. На Windows d3d11va используется как тип подустройства по умолчанию.

      Примеры:

      -init_hw_device qsv:hw,child_device_type=d3d11va

      Выберет GPU subdevice с типом d3d11va, и создаст устройство QSV с MFX_IMPL_HARDWARE.

      -init_hw_device qsv:hw,child_device_type=dxva2

      Выберет GPU subdevice с типом dxva2, и создаст устройство QSV с MFX_IMPL_HARDWARE.

   opencl

   device выбирает платформу и устройство как platform_index.device_index.

      Набор устройств также может быть отфильтрован с помощью пар ключ/значение (key-value), чтобы найти только устройства, совпадающие с определенной строкой платформы или устройства.

      Полезные строки и фильтры:

      platform_profile
      platform_version
      platform_name
      platform_vendor
      platform_extensions
      device_name
      device_vendor
      driver_version
      device_version
      device_profile
      device_extensions
      device_type

      Индексы и фильтры совместно должны уникально выбирать устройство.

      Примеры:

      -init_hw_device opencl:0.1

      Выберет второе устройство на первой платформе.

      -init_hw_device opencl:,device_name=Foo9000

      Выберет устройство с именем, содержащим строку Foo9000.

      -init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16

      Выберет устройство GPU на второй платформе, поддерживающее расширение cl_khr_fp16.

   vulkan

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

      Распознаются следующие опции:

      debug

      Если установлено в 1, то разрешает слой проверки (validation layer), если он установлен.

      linear_images

      Если установлено в 1, то изображения, выделяемые аппаратурой (hwcontext), будут линейными и доступными для локального отображения.

      instance_extensions

      Список (разделитель +) дополнительных расширений экземпляров для включения.

      A plus separated list of additional instance extensions to enable.

      device_extensions

      Список (разделитель +) дополнительных расширений устройств для включения.

      Примеры:

      -init_hw_device vulkan:1

      Выберет второе устройство в системе.

      -init_hw_device vulkan:RADV

      Выберет первое устройство с именем, содержащим строку RADV.

      -init_hw_device

      vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

      Выберет первое устройство и разрешит расширения экземпляра Wayland и XCB.

-init_hw_device type[=name]@source

Инициализирует новое аппаратное устройство типа type с именем name, полученное из существующего устройства с именем source.

-init_hw_device list

Список всех типов аппаратных устройств, поддерживаемых этой сборкой ffmpeg.

-filter_hw_device name

Передача имени аппаратного устройства name во все фильтры в любом filter graph. Это может быть использовано для установки устройства на выгрузку в фильтр "hwupload", или для отображения устройства на фильтр с "hwmap". Другие фильтры могут также использовать этот параметр, когда они требуют аппаратного устройства. Обратите внимание, что это обычно требуется только тогда, когда input еще не находится в аппаратных кадрах - когда это так, фильтры будут получать устройство, которое им требуется, из контекста кадров, которые они получают в качестве input.

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

-hwaccel[:stream_specifier] hwaccel (input,per-stream)

Использовать аппаратное ускорение для декодирования совпавшего потока (потоков). Допустимы значения для hwaccel:

   none

   Не использовать любое аппаратное ускорение (по умолчанию).

   auto

   Автоматичечски выбрать метод аппаратного ускорения.

   vdpau

   Использовать аппаратное ускорение VDPAU (Video Decode and Presentation API for Unix).

   dxva2

   Использовать аппаратное ускорение DXVA2 (DirectX Video Acceleration).

   d3d11va

   Использовать аппаратное ускорение D3D11VA (DirectX Video Acceleration).

   vaapi

   Использовать аппаратное ускорение VAAPI (Video Acceleration API).

   qsv

   Использовать ускорение Intel QuickSync Video для транскодирования видео.

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

   Чтобы это работало, обе стороны - декодер и кодер - должны поддерживать ускорение QSV, и не должны использоваться фильтры.

   Эта опция не дает эффекта, если выбранный hwaccel недоступен или не поддерживается выбранным декодером.

   Обратите внимание, что большинство методов ускорения предназначены для воспроизведения, и на современных CPU они не будут работать быстрее, чем программное декодирование. Дополнительно для ffmpeg обычно нужно копировать декодированные кадры из памяти GPU в системную память, что приводит к дополнительному снижению производительности. Эта опция полезна главным образом для тестирования.

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)

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

Эта опция имеет смысл только когда также указана опция -hwaccel. Это может ссылаться либо на существующее устройство, созданное с помощью -init_hw_device по имени name, либо может быть создано новое устройство, как если бы -init_hw_device type:hwaccel_device было вызвано непосредственно перед этим.

-hwaccels

Список всех аппаратных компонентов ускорения, разрешенных в этой сборке ffmpeg. Фактическая runtime доступность зависит от аппаратуры и её подходящего установленного драйвера.

-fix_sub_duration_heartbeat[:stream_specifier]

Установит определенный выходной поток видео как "поток сердцебиения" (heartbeat stream) в соответствии с которым разделяются и проталкиваются текущие субтитры после приема пакета произвольного доступа.

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

Требует установки -fix_sub_duration для соответствующего входного потока субтитров, чтобы это имело какой-либо эффект, а также для входного потока субтитров, который должен быть непосредственно отображен на тот же выход, в котором находится heartbeat-поток.

Опции звука

-aframes number (output)

Установит количество кадров audio на output. Это устаревший псевдоним для "-frames:a", который вы должны использовать вместо него.

-ar[:stream_specifier] freq (input/output,per-stream)

Установит частоту дискретизации звука (audio sampling frequency). Для потоков output по умолчанию это устанавливается на частоту, соответствующую потоку input. Для потоков input эта опция имеет смысл только для устройств захвата звука (audio grabbing devices) и raw демультиплексоров, и это отображается на соответствующие опции demuxer.

-aq q (output)

Установит качество звука (зависит от кодека, VBR). Это псевдоним для -q:a.

-ac[:stream_specifier] channels (input/output,per-stream)

Установит количество каналов audio. Для выходных потоков это устанавливается по умолчанию в количество входных каналов audio. Для входных потоков эта опция имеет смысл только для устройств захвата audio и raw демультиплексеров, и она отображается на соответствующие опции демультиплексора.

-an (input/output)

В качестве input-опции блокирует все потоки звука файла от фильтрации, или автоматического выбора, или отображения для любого вывода. См. параметр -discard для отключения потоков по отдельности.

В качестве output-опции запрещает запись audio, например автоматический выбор или отображение любого потока audio. Для полного ручного контроля см. опцию -map.

-acodec codec (input/output)

Установит кодек звука. Это псевдоним для "-codec:a".

-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

Установит формат выборки звука. Используйте "-sample_fmts" для получения списка поддерживаемых форматов выборки.

-af filtergraph (output)

Создаст filtergraph и использует его для фильтрации потока.

Это псевдоним для "-filter:a", см. описание опции -filter.

Продвинутые опции звука

-atag fourcc/tag (output)

Принудительно установит звук tag/fourcc. Это псевдоним для "-tag:a".

-absf bitstream_filter

Устарело, см. -bsf

-guess_layout_max channels (input,per-stream)

Если какая-то компоновка канала input неизвестна, то делается попытка угадать, только если она соответствует максимум указанному количеству каналов. Например, 2 предписывает ffmpeg распознавать 1 канал как моно и 2 канала как стерео, а не 6 каналов как 5.1. По умолчанию всегда нужно пытаться угадать. Используйте 0, чтобы отключить все догадки.

Опции субтитров

-scodec codec (input/output)

Установит кодек субтитров. Это псевдоним для "-codec:s".

-sn (input/output)

В качестве input-опции блокирует все потоки субтитров файла от фильтрации, или от автоматического выбора, или отображения на любой output. См. опцию "-discard" для индивидуального запрета потоков.

В качестве output-опции запретит запись субтитров, т. е автоматический выбор или отображение любого потока субтитров. Для полного ручного контроля см. опцию -map.

-sbsf bitstream_filter

Устарело, см. -bsf

Продвинутые опции субтитров

-fix_sub_duration

Исправит длительность субтитров. Для каждого субтитра ждет следующего пакета в том же потоке, и подстраивает длительность первого, чтобы избежать перекрытия. Это необходимо для некоторых кодеков субтитров, особенно для субтитров DVB, потому что продолжительность в исходном пакете является только приблизительной оценкой, а конец фактически отмечен пустым кадром субтитров. Если не использовать эту опцию при необходимости, это может привести к увеличению длительности или сбоям мультиплексирования из-за немонотонных временных меток.

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

-canvas_size size

Установит размер холста для рендеринга субтитров.

Продвинутые опции

-map [-]input_file_id[:stream_specifier][?] | [linklabel] (output)

Создаст один или большее количество потоков в выходном файле. У этой опции две формы для указания источника (источников) данных: первая выбирает один или большее количество потоков из каког-то входного файла (указанного "-i"), второй берет выход из какого-нибудь complex filtergraph (указывается "-filter_complex" или "-filter_complex_script").

В первой форме выходной поток создается для каждого потока входного файла с индексом input_file_id. Если указан stream_specifier, то используются только те потоки, которые совпадут со спецификатором (см. секцию "Спецификаторы потоков" для синтаксиса stream_specifier).

Символ "-" перед идентификатором потока создает "отрицательное" отображение. Это запрещает совпавшие потоки из уже созданных отображений.

Завершающий "?" после индекса потока позволит отображению быть опциональным: если отображение не совпало ни с одним потоком, то отображение будет игнорироваться вместо ситуации ошибки. Обратите внимание, что при использовании недопустимого индекса входного файла map по-прежнему будет сбойной; например, если map ссылается на несуществующие входные данные.

Альтернативная [linklabel] форма будет отображать выходы из complex filter-графов (см. опцию -filter_complex) на выходной файл. linklabel должна соответствовать определенной метке ссылки вывода (output link label) в графе.

Эта опция может использоваться несколько раз, каждая добавляет потоки к выходному файлу. Любой имеющийся входной поток может быть также отображен любое количество раз как источник для различных выходных потоков, например для использования различных опций кодирования и/или фильтров. Потоки создаются в выводе в том же порядке, в котором параметры -map заданы в командной строке.

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

Примеры:

   Отобразить все. Чтобы отобразить ВСЕ потоки из первого входного файла на выход:

      ffmpeg -i INPUT -map 0 output

   Выбрать определенный поток. Если у вас два потока audio в первом входном файле, то эти потоки идентифицируются как 0:0 и 0:1. Вы можете использовать "-map" для выбора, какие потоки поместить в выходной файл. Например:

      ffmpeg -i INPUT -map 0:1 out.wav

      отобразит второй входной поток в INPUT на (один) выходной поток в out.wav.

   Создание нескольких потоков. Чтобы выбрать поток с индексом 2 из входного файла a.mov (указанный идентификатором 0:2), и поток с индексом 6 из входного b.mov (указанный идентификатором 1:6), и копировать их в выходной файл out.mov:

      ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov

   Создание нескольких потоков 2. Для выбора всех потоков video третьего потока audio из входного файла:

      ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT

   Отрицательное отображение (negative map). Чтобы отобразить все потоки audio, кроме второго, используется negative mappings.

      ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

   Опциональное отображение. Чтобы отобразить потоки video и audio из первого входа, с использованием завершающего "?" игнорируется отображение audio, если в первом входе нет потоков audio:

      ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT

   Отображение по языку. Для взятия потока English audio stream:

      ffmpeg -i INPUT -map 0:m:language:eng OUTPUT

-ignore_unknown

Игнорировать входные потоки с неизвестным типом вместо генерации ошибки, если была попытка копировать такие потоки.

-copy_unknown

Позволить копирование входных потоков неизвестного типа вместо ошибки, если была попытка копировать такие потоки.

-map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]

Эта опция устарела и будет удалена. Она может быть заменена pan фильтром. В некоторых случаях может быть проще использовать некоторую комбинацию фильтров channelsplit, channelmap или amerge.

Отобразит канал audio из имеющегося входа на выход. Если output_file_id.stream_specifier не установлен, то канал audio будет отображен на все потоки audio.

Использование "-1" вместо input_file_id.stream_specifier.channel_id отобразит заглушенный (muted) канал.

Завершающий "?" позволит map_channel быть опциональным: если map_channel не получил совпадение с каналом, то map_channel будет игнорироваться вместо возникновения ошибки.

Для примера предположим, что INPUT это stereo файл audio, вы можете подключить два канала audio командой:

      ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

Если вы хотите заглушить первый канал, оставив второй:

      ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT

Порядок опции "-map_channel" определяет порядок каналов в выходном потоке. Компоновка выходного канала угадывается из количества отображенных каналов (mono если один "-map_channel", stereo если два, и т. п.). Использование "-ac" в комбинации с "-map_channel" делает уровни усиления канала обновляемыми, если компоновки каналов входа и выхода не совпадают (например две опции "-map_channel" и "-ac 6").

Вы можете также извлечь каждый канал входа на определенные выходы; следующая команда извлекает два канала audio потока INPUT (file 0, stream 0) в соответствующие выходы OUTPUT_CH0 и OUTPUT_CH1:

      ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1

Следующий пример разбивает каналы stereo входа на два отдельных потока, которые помещаются в один и тот же выходной файл:

      ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg

Обратите внимание, что в настоящий момент каждый выходной поток может содержать только каналы из одного потока входа; например вы не можете использовать "-map_channel", чтобы взять несколько входных каналов audio, содержащихся в разных потоках (из одного или разных файлов) и слить их в один выходной поток. Таким образом, сейчас невозможно, к примеру, превратить два отдельных потока mono в один поток stereo. Однако разделение потока stereo на два одноканальных потока mono возможно.

Если вам нужна эта фича, то есть обходной способ решения проблемы с использованием фильтра amerge. Например, если вам нужно слить media (здесь input.mkv) с 2 mono audio потоками в один stereo канал потока audio (и сохранить поток video), то вы можете использовать следующую команду:

      ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv

Для отображения первых двух каналов audio из первого ввода и использования "?" будет игнорироваться отображение канала audio, если первый вход оказался mono вместо stereo:

      ffmpeg -i INPUT -map_channel 0.0.0 -map_channel 0.0.1? OUTPUT

-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)

Установит информацию метаданных (metadata) следующего выходного файла из infile. Обратите внимание, что это индексы файлов (отсчитываемые от 0), а не имена файлов. Опциональные параметры metadata_spec_in/out указывают, какие метаданные копировать. Спецификатор metadata может иметь следующие формы:

   g

   Глобальные метаданные, например которые применяются ко всему файлу.

   s[:stream_spec]

   Метаданные на поток (per-stream metadata). Здесь stream_spec это спецификатор потока, как описано в главе "Спецификаторы потока". В спецификаторе входных метаданных первый совпадающий поток копируется из. В спецификаторе выходных метаданных все совпадающие потоки копируются в.

   c:chapter_index

   Метаданные на главу (per-chapter metadata). Здесь chapter_index индекс главы, отсчитываемый от 0.

   p:program_index

   Метаданные на программу (per-program metadata). Здесь program_index индекс программы, отсчитываемый от 0.

   Если спецификатор metadata опущен, то он по умолчанию глобальный.

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

   Например, для копирования метаданных из первого потока входного файла в глобальные метаданные выходного файла:

      ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

   Чтобы сделать наоборот, т. е. копировать глобальные метаданные во все потоки audio:

      ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

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

-map_chapters input_file_index (output)

Копирует главы (chapters) из входного файла с индексом input_file_index в следующий выходной файл. Если не указано отображение chapter, то главы копируются из первого входного файла с как минимум одной главой. Использование отрицательного индекса файла запрещает копирование каких-либо глав.

-benchmark (global)

Покажет информацию производительности (benchmarking) по окончании кодирования. Покажет использованное реальное (real), системное (system) и пользовательское (user) время, и максимальное потребление памяти. Максимальное потребление памяти не поддерживается на всех системах, в таком случае обычно отображается 0, если не поддерживается.

-benchmark_all (global)

Показывает информацию производительности во время кодирования. Покажет реальное, системное и пользовательское затраченное время на различных шагах процесса (audio/video encode/decode).

-timelimit duration (global)

Выйдет после истечение duration секунд времени работы ffmpeg, измеряется пользовательское время процессора (CPU user time).

-dump (global)

Дамп каждого входного пакета в stderr.

-hex (global)

Когда выполняется дамп пакетов, также делается дамп полезной нагрузки (payload).

-readrate speed (input)

Ограничивает скорость чтения входа.

Его значение является положительным числом с плавающей запятой, которое представляет максимальную продолжительность media в секундах, который должен быть принят за одну секунду времени wallclock. Значение по умолчанию равно нулю и не представляет собой наложенное ограничение скорости поглощения. Значение 1 представляет скорость в реальном времени и эквивалентно "-re".

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

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

-re (input)

Считывание входных данных с собственной частотой кадров. Это эквивалентно установке параметра "-readrate 1".

-readrate_initial_burst seconds

Установит начальное время пакета чтения в секундах, после чего будет применено -re/-readrate.

-vsync parameter (global)
-fps_mode[:stream_specifier] parameter (output,per-stream)

Установит режим метода синхронизации видео / частоты кадров (video sync method / framerate mode). Здесь vsync применяется ко всем выходным потокам video, но это может быть отменено для потока установкой fps_mode. Опция vsync устарела и будет удалена в будущем.

По соображениям совместимости некоторые значения для vsync могут быть указаны как числа (показано круглыми скобками в следующей таблицы).

   passthrough (0)

   Каждый кадр передается со своей меткой времени из demuxer в muxer.

   cfr (1)

   Кадры будут дублироваться и отбрасываться, чтобы достичь точного значения постоянной частоты кадров (constant frame rate).

   vfr (2)

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

   drop

   То же самое, что passthrough но уничтожает все метки времени, давая muxer генерировать свежие метки времени на основе частоты кадров.

   auto (-1)

   Автоматический выбор между cfr и vfr в зависимости от возможностей muxer. Это метод по умолчанию.

Обратите внимание, что после этого метки времени могут быть дополнительно модифицироваться muxer-ом. Например, в случае, когда разрешена опция формата avoid_negative_ts.

С -map вы можете выбрать, из какого потока будут браться метки времени. Вы можете оставить либо video, либо audio не измененным, и синхронизировать остальной поток (потоки) на тот, что не изменен.

-frame_drop_threshold parameter

Порог отбрасывания кадров, который определяет, насколько сильно могут отставать видеокадры до их отбрасывания. Задается в единицах частоты кадров, поэтому 1.0 - это один кадр. Значение по умолчанию - -1.1. Один из возможных случаев использования - чтобы избежать кадрирования в случае шумных временных меток, или увеличить точность кадрирования в случае точных временных меток.

-apad parameters (output,per-stream)

Добавляет выходной поток (потоки) audio. Это то же самое, что и применение "-af apad". Здесь аргумент это строка параметров фильтра, составленная так же, как с фильтром "apad" filter. Должно быть установлено "-shortest" для этого вывода, чтобы опция давала эффект.

-copyts

Не обрабатывать входные метки времени, но сохранить их значения, не пытаясь их сделать правильными. В частности, не удаляет начальное значение смещения времени старта (initial start time offset).

Обратите внимание, что в зависимости от опции vsync или специфической обработки muxer (например в случае разрешенной опции формата avoid_negative_ts) выходные метки времени могут не совпадать с входными метками, даже если выбрана эта опция.

-start_at_zero

При использовании вместе с copyts, смещает входные метки времени так, что они начинаются с нуля. Это означает, что использование, например, "-ss 50" приведет к тому, что выходные временные метки начнутся через 50 секунд, независимо от того, в какое время был запущен входной файл.

-copytb mode

Укажет, как установить базу времени кодера, когда копируется поток. Здесь mode это целочисленное значение, и подразумевается, что это одно из следующего:

   1

   Использовать базу времени demuxer.

   База времени копируется в выходной кодер из соответствующего входного demuxer. Это иногда требуется, чтобы избежать монотонно увеличивающихся меток времени, когда копируются потоки video с переменной частотой кадров (variable frame rate).

   0

   Использовать базу времени декодера. База времени копируется в выходной кодер из соответствующего входного декодера.

   -1

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

Значение по умолчанию -1.

-enc_time_base[:stream_specifier] timebase (output,per-stream)

Установит базу времени кодера. Здесь timebase может подразумеваться одним из следующих значений:

   0

   Назначить значение по умолчанию в соответствии с типом носителя (media type). Для video используется 1/framerate, для audio используется 1/samplerate.

   demux

   Использовать базу времени из demuxer.

   filter

   Использовать базу времени из filtergraph.

   a positive number

   Использовать предоставленное число как базу времени.

   Это поле может быть предоставлено как соотношение двух целых чисел (например 1:24, 1:48000), или как десятичное число (например 0.04166, 2.0833e-5).

Значение по умолчанию 0.

-bitexact (input/output)

Разрешить bitexact режим для демультиплексора / мультиплексора) и декодера / кодера.

-shortest (output)

Завершить кодирование, когда закончится самый короткий выходной поток.

Обратите внимание, что эта опция может потребовать буферизации кадров, что вводит дополнительную задержку. Максимальная величина этой задержки может управляться опцией "-shortest_buf_duration".

-shortest_buf_duration duration (output)

Опция "-shortest" может потребовать потенциально буферизации больших объемов данных, когда как минимум один поток "sparse" ("редкий", например имеет большие промежутки между кадрами – это обычно для случая субтитров).

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

Значение по умолчанию 10 секунд.

-dts_delta_threshold threshold

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

Коррекция разрыва временной метки, разрешенная этой опцией, применяется только к входным форматам, принимающим разрыв временной метки (для которых разрешен флаг "AV_FMT_DISCONT"), например MPEG-TS и HLS, и автоматически отключается при использовании опции "-copy_ts" (если не обнаружено wrapping).

Если обнаруживается разрыв временной метки, абсолютное значение которого больше порогового значения, ffmpeg удалит разрыв путем уменьшения/увеличения текущего DTS и PTS на соответствующее значение дельты.

Значение по умолчанию 10.

-dts_error_threshold threshold

Порог дельты ошибки метки времени, выраженный десятичным числом секунд.

Коррекция метки времени, включенная этой опцией, применяется только к входным форматам, не принимающим разрыв метки времени (для которых флаг "AV_FMT_DISCONT" не включен).

Если обнаруживается разрыв временной метки, абсолютное значение которого больше порогового значения, то ffmpeg удалит значение временной метки PTS/DTS.

Значение по умолчанию "3600*30" (30 hours), что выбрано произвольно и довольно консервативно.

-muxdelay seconds (output)

Установит максимум задержки demux-decode.

-muxpreload seconds (output)

Установит начальную задержку demux-decode.

-streamid output-stream-index:new-value (output)

Назначит выходному потоку новое значение идентификатора потока (stream-id). Эта опция должна быть указана перед именем выходного файла, к которому применяется. Для ситуации, когда существует несколько выходных файлов, streamid может быть переназначен на другое значение.

Например, для установки stream 0 PID на 33 и stream 1 PID на 36 для выходного файла mpegts:

      ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts

-bsf[:stream_specifier] bitstream_filters (output,per-stream)

Установит фильтры bitstream для совпавших потоков. Здесь bitstream_filters это список фильтров bitstream с разделителем запятой. Используйте опцию "-bsfs" для получения списка фильтров bitstream.

      ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
      ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt

-tag[:stream_specifier] codec_tag (input/output,per-stream)

Принудительно установит tag/fourcc для совпавших потоков.

-timecode hh:mm:ssSEPff

Указывает Timecode для записи. SEP это сепаратор ':' для не отбразываемого timecode и ';' (or '.') для отбрасывания.

      ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg

-filter_complex filtergraph (global)

Определит сложный фильтрграф (complex filtergraph), т. е. такой, у которого произвольное количество входов и/или выходов. Для простого графа (это такой граф, у которого один вход и один выход одинакового типа) см. описание опций -filter. Здесь filtergraph это описание фильтрграфа, как задано в разделе "Синтаксис filtergraph" руководства ffmpeg-filters.

Метки входных ссылок могут ссылаться на входные потоки с помощью синтаксиса "[file_index:stream_specifier]" (т. е. так же, как используется -map). Если stream_specifier совпадет с несколькими потоками, то будет использоваться первый из них. Не помеченный вход будет подключен к первому не используемому входному потоку соответствующего типа.

Метки выходных ссылок обозначаются -map. Не помеченные выходы добавляются к первому выходному файлу.

Обратите внимание, что с этой опцией можно использовать только источники lavfi без обычных входных файлов.

Например, чтобы наложить (применив фильтр overlay) картинку на video:

      ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
      '[out]' out.mkv

Здесь "[0:v]" ссылается на первй поток video в первом входном файле, который связан с первым (основным) фильтром overlay. Подобным обрзом первый поток video на втором входе связан со вторым (overlay) входом наложения.

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

      ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
      '[out]' out.mkv

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

      ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv

Как специальное исключение, мы можем использовать в качестве входа поток bitmap субтитра: он будет преобразован в video такого же размера, как самое большое video в файле, или 720x576, если никакое видео не представлено. Обратите внимание, что это экспериментальное и временное решение. Оно будет удалено, когда libavfilter получит правильную поддержку для субтитров.

Например, для hardcode субтитров поверх записи DVB-T, сохраненной в формате MPEG-TS, применена задержка субтитров на 1 секунду:

      ffmpeg -i input.ts -filter_complex \
         '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
         -sn -map '#0x2dc' output.mkv

0x2d0, 0x2dc and 0x2ef это идентификаторы MPEG-TS PID соответственно для потоков video, audio и subtitles; 0:0, 0:3 и 0:7 также будут работать.

Для генерации 5 чистого красного video, используя источник lavfi "color":

      ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv

-filter_complex_threads nb_threads (global)

Определяет, сколько потоков (threads) процессора используется для обработки сложного фильтрграфа. Работает подобно filter_threads, но используется только для "-filter_complex" графов. По умолчанию используется доступное количество ядер CPU.

-lavfi filtergraph (global)

Определит complex filtergraph, например такой, у которого произвольное количество входов и/или выходов. Эквивалентно -filter_complex.

-filter_complex_script filename (global)

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

-accurate_seek (input)

Эта опция разрешит или запретит точное позиционирование во входных файлах с опцией -ss. По умолчанию это разрешен, так что при перекодировании позиционирование точное. Используйте -noaccurate_seek, чтобы это запретить, что может быть полезно например когда некоторые потоки копируются, а другие перекодируются.

-seek_timestamp (input)

Эта опция разрешает или запрещает позиционирование по метке времени во входных файлах с опцией -ss. По умолчанию это запрещено. Если разрешено, то аргумент опции -ss считается фактической меткой времени, а не смещением на начальное время файла. Это имеет значение только для файлов, которые не начинаются с метки времени 0, таких как транспортные потоки.

-thread_queue_size size (input/output)

Для входа эта опция установит максимальное количество ожидающих пакетов, когда происходит чтение из файла или устройства. С потоками реального времени малой задержки / высокой скорости пакеты могут быть отброшены, если они не были прочитаны в нужное время; установка этого значения заставит ffmpeg использовать отдельный входной thread и читать пакеты сразу при их поступлении. По умолчанию ffmpeg так поступает если указано несколько входов.

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

-sdp_file file (global)

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

-discard (input)

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

   none

   Не отбрасывает никакой кадр.

   default

   Умолчание, которое не отбрасывает кадры.

   noref

   Отбросит все не ссылочные кадры.

   bidir

   Отбросит все двунаправленные кадры.

   nokey

   Отбросит все кадры кроме ключевых.

   all

   Отбросит все кадры.

-abort_on flags (global)

Stop и abort при различных условиях. Доступны следующие флаги flags:

   empty_output

   В muxer не были переданы никакие пакеты, выход пустой.

   empty_output_stream

   В muxer не были переданы пакеты в некоторых выходных потоках.

-max_error_rate (global)

Установит долю ошибок декодирования кадров по всем входам, которые при пересечении вернут код 69 на выходе ffmpeg. Пересечение этого порога не прекращает обработку. Диапазон это дробное число с плавающей запятой между 0 и 1. По умолчанию 2/3.

-xerror (global)

Остановка и выход при ошибке.

-max_muxing_queue_size packets (output,per-stream)

При перекодировании потоков audio и/или video, ffmpeg не будет начинать запись в выход, пока не будет создан один пакет для каждого такого потока. В ожидании этого пакеты для других потоков буферизуются. Эта опция устанавливает размер этого буфера в пакетах для соответствующего выходного потока.

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

-muxing_queue_data_threshold bytes (output,per-stream)

Это минимальный порог, до которого размер очереди мультиплексирования не учитывается. Значение по умолчанию составляет 50 мегабайт на поток и зависит от общего размера пакетов, передаваемых мультиплексору.

-auto_conversion_filters (global)

Разрешает автоматическую вставку фильров преобразования формата во все фильтрграфы, включая те, что определены опциями -vf, -af, -filter_complex и -lavfi. Если согласование формата фильтра требует преобразования, инициализация фильтров завершится неудачей. Преобразования по-прежнему можно выполнить, вставив в график соответствующий фильтр преобразования (scale, aresample). По умолчанию для явного отключения необходимо указать "-noauto_conversion_filters".

-bits_per_raw_sample[:stream_specifier] value (output,per-stream)

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

-stats_enc_pre[:stream_specifier] path (output,per-stream)
-stats_enc_post[:stream_specifier] path (output,per-stream)
-stats_mux_pre[:stream_specifier] path (output,per-stream)

Запишет информацию кодирования по кадрам (per-frame encoding information) для совпавших потоков в файл, указанный параметром path.

Опция -stats_enc_pre запишет информацию о сырых кадрах video или audio сразу перед их отправкой на кодирование, в то время как опция -stats_enc_post запишет информацию о закодированных пакетах, когда они приняты из кодера. Опция -stats_mux_pre запишет информацию о пакетах сразу как только они посланы в muxer. Каждый кадр или пакет генерирует одну строку в указанном файле. Формат этой строки управляется -stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt.

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

-stats_enc_pre_fmt[:stream_specifier] format_spec (output,per-stream)
-stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream)
-stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream)

Указывает формат для строк, записанных опциями -stats_enc_pre / -stats_enc_post / -stats_mux_pre.

Здесь format_spec это строка, которая может содежать директивы в форме {fmt}. В строке format_spec используется экранирование обратным слешем (backslash-escaped), используйте \{, \} и \\, чтобы записать в вывод литеральные символы {, } и \ соответственно.

Применяемые директивы для fmt могут быть следующими:

   fidx

   Индекс выходного файла.

   sidx

   Индекс выходного потока в файле.

   n

   Номер кадра. Предварительное кодирование: количество кадров, отправленных на кодер до сих пор. Пост-кодирование: количество пакетов, полученных от кодировщика на данный момент. Muxing: количество пакетов, отправленных мультиплексору для этого потока.

   ni

   Номер входного кадра. Индекс входного кадра (например вывод кодера), который соответствует этому выходному кадру или пакету. -1 если недоступно.

   tb

   База времени, по которой выражаются метки времени этого кадра/пакета, как рациональное число в виде num/den (числитель/знаменатель). Обратите внимание, что у кодера и мультиплексора могут использоваться разные базы времени.

   tbi

   База времени для ptsi, как рациональное число num/den. Доступно, когда имеется ptsi, иначе 0/1.

   pts

   Временная метка представления кадра или пакета в виде целого числа. Для расчета времени презентации необходимо умножить на временную базу.

   ptsi

   Временная метка представления входного кадра (см. ni) в виде целого числа. Следует умножить на tbi для вычисления времени представления. Печатается как (2^63 - 1 = 9223372036854775807), когда недоступно.

   t

   Время представления кадра или пакета в виде десятичного числа. Равно pts, умноженному на tb.

   ti

   Время представления входного кадра (см. ni) в виде десятичного числа. Равно ptsi, умноженному на tbi. Напечатано как inf, когда недоступно.

   dts (packet)

   Расшифровка метки времени пакета в виде целого числа. Для расчета времени презентации необходимо умножить на временную базу.

   dt (packet)

   Время декодирования кадра или пакета в виде десятичного числа. Равно dts, умноженному на tb.

   sn (frame,audio)

   Число выборок звука, отправленных на кодер до настоящего времени.

   samp (frame,audio)

   Количество выборок звука в кадре.

   size (packet)

   Размер закодированного пакета в байтах.

   br (packet)

   Текущий битрейт в битах на секунду. Только для пост-кодирования.

   abr (packet)

   Средний битрейт для всего потока до сих пор, в битах в секунду, -1, если он не может быть определен в этой точке. Только посткодирование.

Директивы, помеченные с packet, могут быть использованы только с -stats_enc_post_fmt и -stats_mux_pre_fmt.

Директивы, помеченные с frame, могут быть использованы только с -stats_enc_pre_fmt.

Директивы, помеченные с audio могут быть использованы только с потоками audio.

По умолчанию используются строки формата:

   pre-encoding

   {fidx} {sidx} {n} {t}

   post-encoding

   {fidx} {sidx} {n} {t}

В будущем могут быть добавлены новые элементы в конец строк форматирования по умолчанию. Users who depend on the format staying exactly the same, should prescribe it manually.

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

Файлы пресета

Файл пресета содержит последовательность пар option=value, по одной на каждую строку, указывая последовательность опций, которую было сложно задать в командной строке. Строки, начинающиеся с символа '#', игнорируются, и используются для вставки комментариев. Для примеров см. директорию presets дерева исходного кода FFmpeg.

Существует два типа файлов пресета: ffpreset и avpreset.

Файлы ffpreset. Эти файлы указываются с опциями "vpre", "apre", "spre" и "fpre". Опция "fpre" принимает на входе имя файла пресета вместо имени пресета, и может использоваться для любого вида кодека. Для опций "vpre", "apre" и "spre" опции, указанные в файле пресета, применяются к текущему выбранному кодеку того же типа, что и опция пресета.

Аргументы, переданные в "vpre", "apre" и "spre" опции пресета идентифицируют файл пресета для использования по соответствующим правилам:

Сначала ffmpeg ищет файл arg.ffpreset в директориях $FFMPEG_DATADIR (если эта переменная окружения установлена) и $HOME/.ffmpeg, и в директории datadir, определенной во время конфигурации (обычно PREFIX/share/ffmpeg), или в папке ffpresets вместе с исполняемым файлом на win32, в таком порядке. Например, если аргумент "libvpx-1080p", то ищется файл libvpx-1080p.ffpreset.

Если ни один такой файл не найден, то ffmpeg будет искать файл codec_name-arg.ffpreset в упомянутых выше директориях, где codec_name это имя кодека, к которому применяется файл опций пресета. Например, если вы выбрали video кодек "-vcodec libvpx" и используете "-vpre 1080p", то будет осуществляться поиск для файла libvpx-1080p.ffpreset.

Файлы avpreset. Это файлы пресета, указанные с опцией "pre". Они работают подобно файлам ffpreset, но они позволяют использовать только опции, специфичные для кодера. Таким образом, не может использоваться пара option=value для указания кодера.

Когда указана опция "pre", ffmpeg будет искать файлы с суффиксом .avpreset в директориях $AVCONV_DATADIR (если установлено), $HOME/.avconv, и директории datadir, определенной во время конфигурации (обычно PREFIX/share/ffmpeg), в таком порядке.

Сначала ffmpeg ищет файл codec_name-arg.avpreset в упомянутых выше директориях, где codec_name это имя кодека, к которому применяются опции файла пресета. Например, если вы выбрали video кодек "-vcodec libvpx" и используете "-pre 1080p", то будет происходить поиск файла libvpx-1080p.avpreset.

Если такой файл не найден, то ffmpeg будет искать файл arg.avpreset в тех же директориях.

Формат файла vstats

Опции "-vstats" и "-vstats_file" разрешают генерацию файла, содержащую статистику генерируемых выходов video.

Опция "-vstats_version" управляет версией формата генерируемого файла.

С version 1 формат следующий:

   frame= < FRAME> q= < FRAME_QUALITY> PSNR= < PSNR> f_size= < FRAME_SIZE> s_size= < STREAM_SIZE>kB time= < TIMESTAMP> br= < BITRATE>kbits/s avg_br= < AVERAGE_BITRATE>kbits/s

С version 2 формат следующий:

   out= < OUT_FILE_INDEX> st= < OUT_FILE_STREAM_INDEX> frame= < FRAME_NUMBER> q= < FRAME_QUALITY>f PSNR= < PSNR> f_size= < FRAME_SIZE> s_size= < STREAM_SIZE>kB time= < TIMESTAMP> br= < BITRATE>kbits/s avg_br= < AVERAGE_BITRATE>kbits/s

Значения, соответствующие каждому ключу:

avg_br

Средний битрейт, выраженный в килобитах/сек.

br

Битрейт, выраженный в килобитах/сек.

frame

Номер закодированного кадра.

out

Индекс выходного файла.

PSNR

Пиковое отношение сигнал/шум (Peak Signal to Noise Ratio).

q

Качество кадра.

f_size

Размер закодированного пакета в байтах.

s_size

Размер потока, выраженный в KiB.

st

Индекс потока выходного файла.

time

Время пакета.

type

Тип картинки.

См. также опции -stats_enc для альтернативного способа показать статистики кодирования.

[ПРИМЕРЫ]

Захват видео и звука (Video and Audio grabbing)

Если вы указали входной формат и устройство, то ffmpeg может напрямую захватывать video и audio.

      ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

Или с источником звука ALSA audio (mono input, card id 1) вместо OSS:

      ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg

Обратите внимание, что вы должны активировать правильный источник video и канал перед запуском ffmpeg с любым просмотрщиком TV, таким как < http://linux.bytesex.org/xawtv/> от Gerd Knorr. Вы также должны корректно установить уровни записи audio стандартным микшером.

X11 grabbing

Захват экрана X11

      ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg

0.0 это номер display.screen вашего сервера X11, то же самое, что и переменная окружения DISPLAY.

      ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg

0.0 это номер display.screen вашего сервера X11, то же самое, что и переменная окружения DISPLAY. 10 это x-offset и 20 y-offset для захвата.

Преобразование формата файла Video и Audio

Любые поддерживаемые ffmpeg форматы файлов и потоков можно использовать для входа, примеры:

• Вы можете использовать файлы YUV в качестве input:

      ffmpeg -i /tmp/test%d.Y /tmp/out.mpg

Это будет использовать файлы:

      /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
      /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, и т. д...

Y-файлы имеют в два раза большее разрешение, чем U-файлы и V-файлы. Это необработанные raw-файлы без заголовка. Их могут генерировать все приличные видеодекодеры. Необходимо указать размер изображения с параметром -s, если ffmpeg не может его угадать.

• Вы можете подавать input из raw-файла YUV420P:

      ffmpeg -i /tmp/test.yuv /tmp/out.avi

test.yuv это файл, содержащий планарные данные raw YUV. Каждый кадр составлен планом Y, за которым идут платы U и V половинным разрешением по вертикали и горизонтали.

• Вы можете выводить в raw-файл YUV420P:

      ffmpeg -i mydivx.avi hugefile.yuv

• Вы можете установить несколько входных и выходных файлов:

      ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

Преобразует audio файл a.wav и raw YUV video файл a.yuv в MPEG-файл a.mpg.

• Вы также можете одновременно производить преобразование audio и video:

      ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

Преобразует a.wav в MPEG audio на частоте выборок 22050 Гц.

• Вы можете кодировать в несколько форматов одновременно, и определить отображение из важного потока в выходные потоки:

      ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2

Преобразует a.wav в a.mp2 на 64 килобитах и в b.mp2 на 128 килобитах. '-map file:index' указывает, какой входной поток используется для каждого выходного потока, в порядке определения выходных потоков.

• Вы можете перекодировать расшифрованные VOB:

      ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame \
         -b:a 128k snatch.avi

Это типовой пример рипа DVD; на входе VOB-файл, на выходе AVI-файл с MPEG-4 video и MP3 audio. Обратите внимание, что в этой команде мы используем B-кадры, так что поток MPEG-4 совместим с DivX5, и размер GOP равен 300, что означает один внутренний кадр каждые 10 секунд для входного видео 29.97 кадров в секунду. Кроме того, аудиопоток кодирован в MP3, поэтому вам необходимо включить поддержку LAME, передав "--enable-libmp3lame" для настройки. Отображение особенно полезно для перекодировки DVD, чтобы получить желаемый язык звука.

Примечание: чтобы посмотреть поддерживаемые входные форматы, используйте "ffmpeg -demuxers".

• Вы можете извлечь изображения из video, или создать video из многих изображений. Для извлечения картинок из video:

      ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

Это извлечет по одному кадру в секунду из video, и выведет их в файлы с именами foo-001.jpeg, foo-002.jpeg, и т. д. Картинки будут масштабироваться под новый размер WxH.

Если вы хотите извлечь только ограниченное количество кадров, то можете использовать показанную выше команду с опцией "-frames:v" или "-t", или в комбинации с -ss, чтобы начать извлечение от определенной точки во времени.

Для создания video из нескольких картинок:

      ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

Синтаксис "foo-%03d.jpeg" указывает использовать десятичное число из трех цифр, дополненных нулями, чтобы представить последовательные номера файлов. Это такой же синтаксис, как у C-функции printf, но подойдут только нормальные целые числа.

Когда импортируется последовательность изображений, -i также внутренне поддерживает расширение wildcard-шаблонов, наподобие используемых шеллом (globbing), с помощью выбора image2-специфичной опции "-pattern_type glob".

Например, для создания video из имен файлов, совпавших под glob-шаблон "foo-*.jpeg":

      ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi

• Вы можете поместить несколько потоков одного и того же типа в выход:

      ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 \
       -c copy -y test12.nut

Результирующий выходной файл test12.nut будет содержать первые 4 потока из входных файлов в обратном порядке.

• Для принудительного вывода CBR video:

      ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v

• Четыре опции lmin, lmax, mblmin и mblmax используют единицы 'lambda', но вы можете использовать константу QP2LAMBDA для простого преобразования из единиц 'q':

      ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext

См. также:

ffmpeg-all(1), ffplay(1), ffprobe(1), ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)