Я могу успешно использовать фильтр concat FFmpeg и фильтр drawtext в отдельных командах.

Но это требует двух прогонов кодирования.

Можно ли заставить оба этих фильтра работать в цепочке, чтобы выполнялась только одна кодировка? Как?

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

1 ответ1

3

Попробуй это:

ffmpeg -i inputfile1 -i inputfile2 -y \
-filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a];\
[v]drawtext=fontsize=72:fontcolor=White:fontfile=/usr/share/fonts/truetype/DejaVuSans.ttf:text=Text Line To Render:x=(w)/2:y=(h)/2[o]'\
-map '[o]' -map '[a]' ...other encoding parameters... outputfile

Обратите внимание, что [v] и [a] - просто метки - вы можете очень хорошо использовать [p] и [q] и это тоже подойдет. Только поток 0 идет к первой метке, а поток 1 - ко второй. Я предполагаю, что поток 0 - это видео.

Вы должны убедиться, что потоки в inputfile1 и inputfile2 имеют одинаковый порядок. Затем мы передаем вывод видеопотока в качестве входных данных фильтру drawtext, говоря [v]drawtext=....

Вывод этого теперь помечен как [o] в конце параметров drawtext . Говоря -map [o] , мы используем вывод из drawtext для передачи вперед к другим вашим параметрам кодирования.

Путь к шрифту, который я использую, взят из OpenSUSE. Ваш может быть другим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .