Параметры файлов
Параметры файлов соответствуют элементам параметры_файла командной строки FFmpeg.
Параметры могут применяться или к структуре контейнера, или одновременно к всем потокам файла, или к потокам определенного типа (например, только к потокам видео, аудио или субтитров), или только к потокам определенного формата (кодека). Общие параметры, не зависящие от кодека, описаны в подразделах 5.4-5.11 документации FFmpeg. Параметры, специфические для кодеков, описываются в разделах документации, посвященных конкретному кодеку.
Далее мы приведем описание некоторых самых часто используемых параметров.
Начало, конец и продолжительность видео фрагмента
-ss время -to время -t время -frames:v число_кадров
-ss), конец (-to), продолжительность по времени (-t) и число видео кадров (-frames:v). Параметры могут быть в любой комбинации и в любом порядке.время— продолжительность в секундах в целом формате или, при необходимости, формате с фиксированной точкой. Дополнительно через двоеточия могут задаваться минуты и часы. Обратите внимание, что результат применения параметра может не быть абсолютно точным (например, вы задаете ровно 5 секунд, а в реальности будет 4.96).
секунды минуты:секунды часы:минуты:секунды
3 — 3 секунды.1:02:03.04 — 1 час 2 минуты 3 и 4 сотых секунды.Вы также можете использовать видео и аудио фильтры trim и atrim с близкой функциональностью. Однако они работают несравнимо медленней.
Тип кодека
-c:v тип_кодека -c:a тип_кодека
-c:v libx264 -c:a aac. Специальный тип copy дает указание не только не менять тип кодека (он не будет меняться, если вы просто не зададите опцию с его типом), но и не производить перекодировку. Понятно, что это далеко не всегда возможно реализовать, в этом случае программа выдаст ошибку.Частота кадров
-r частота -r числитель_частоты/знаменатель_частоты -r аббревиатура_частоты
ntsc-filmили24000/1001— частота видеодисков NTSC =23.98 кадров в секунду. Используется практически везде.ntscили30000/1001— частота телевизионной трансляции NTSC =29.97 кадров в секунду. Изредка попадается.palили25— частота PAL и YouTube =25 кадров в секунду. Частота по умолчанию в FFmpeg.
Пиксельный формат
-pix_fmt пиксельный_формат
yuv420p— 8 бит формат.yuv420p10le— 10 бит формат.
Фильтры
аргументы_фильтра — это аргументы фильтра в формате, как изложено в описании командной строки FFmpeg.Вырезать по времени фрагменты потоков
-ss, -to и -t, вы не можете с помощью фильтра вырезать фрагмент всех потоков одновременно. Вы должны использовать отдельные фильтры для видео (trim) и аудио (atrim) и у вас принципиально отсутствует возможность то же самое проделать с субтитрами.trim=аргументы_фильтра,setpts=N/FRAME_RATE/TB atrim=аргументы_фильтра,asetpts=N/SR/TB
setpts=N/FRAME_RATE/TB и asetpts=N/SR/TB и зачем они нужны?» Можете считать их магическими заклинаниями, без них у вас появятся странные, сложно распознаваемые ошибки как во время работы программы FFmpeg, так и во время проигрывания медиафайлов.start=время— время начала фрагмента, по умолчанию с начала потока.end=время— время окончания фрагмента, по умолчанию до конца потока.duration=время— продолжительность фрагмента, по умолчанию до конца потока.
Объединить по времени фрагменты потоков
concat=аргументы_фильтра
n=число— количество входных сегментов.v=число— количество видео потоков в каждом сегменте.a=число— количество аудио потоков в каждом сегменте.
Фильтр принимает на вход n * (v + a) потоков и передает на выход (v + a) потоков, объединяя их по времени в каждом из (v + a) потоков по отдельности и синхронизируя по максимальному времени потока в каждом из входных сегментов кроме последнего. Входные потоки должны следовать в порядке: вначале все потоки 1-го сегмента, начиная с видео, затем 2-го и так далее. Это проще всего понять из примера:
[v1][a1][a2][v2][a3][a4]concat=n=2:v=1:a=2[vv][aa1][aa2]
1-й входной сегмент состоит из потоков [v1][a1][a2], 2-й из [v2][a3][a4].
Выходной поток [vv] будет включать [v1][v2], [aa1] включает [a1][a3], [aa2] включает [a2][a4].
Как потоки будут синхронизироваться по времени? Предположим, что все входные потоки имеют длительность в 1 секунду, кроме [v1] и [a4] по половине секунды. Тогда результат будет следующим.
Выходной поток [vv] будет включать [v1], затем паузу в половину секунду, затем [v2]. Всего — 2 секунды. Пауза появится потому, что максимальная длительность потоков 1-го сегмента [v1][a1][a2] составляет 1 секунду, поэтому после потока [v1] добавляется пауза в половину секунды, чтобы все потоки 1-го сегмента закончились в одно и то же время.
Длительность выходного потока [aa1] будет 2 секунды без пауз.
Длительность выходного потока [aa2] будет 1.5 секунды без пауз, поскольку более короткий поток [a4] находится в последнем сегменте. Поэтому, вместо добавления паузы, продолжительность выходного потока просто укорачивается.
Появление и затухание потоков
fade=аргументы_фильтра afade=аргументы_фильтра
fade — видео изображения и afade — аудио соответственно.type=inилиtype=out— тип переходного процесса, появление или затухание соответственно.st=время— начало переходного процесса относительно начала потока, 0 по умолчанию.duration=время— продолжительность переходного процесса.
Переход одного потока в другой
xfade=аргументы_фильтра acrossfade=аргументы_фильтра
xfade — видео изображения и acrossfade — аудио соответственно. На выходе вначале появится 1-й входной поток, который затем плавно перейдет во 2-й.duration=время— продолжительность переходного процесса.offset=время(только для xfade) — начало переходного процесса относительно начала 1-го потока, 0 по умолчанию. 2-й поток задерживается на этот промежуток времени относительно 1-го.transition=тип_xfade(только для xfade) — визуальный тип переходного процесса. На настоящий момент реализовано 44 разных типа, я сам использовалfade,radialиdissolve.
