1

Для проекта требуется дополнительная функция FFMPEG, доступная в версии 3.3.5. Пример команды:

ffmpeg -y -i original.mp4 -f lavfi -i color=c=black:s=960x540 \
  -filter_complex "[0:v]scale=-1:540[scaled], \
     [1:v][scaled]overlay=shortest=1:x‌​=(main_w-w)/2:eof_ac‌​tion=endall, \
          format=y‌​uv420p[vid], \
     [vid]dra‌​wtext=fix_bounds=tru‌​e:text='This is a comment':font=bold:x=(w-text_w)/2:y=h-(text_h*1)-40:borderco‌​lor=black@0.25:borde‌​rw=7[out], \
     [0:a]anull‌​[audio]" \
  -map "[out]" -map "[audio]" test.mp4

Однако эта версия захлебнулась от ошибки, представленной в версии 3.3.3. Некоторые связанные вопросы "решают" проблему, откатываясь на FFMPEG v3.2.x, но мой проект не может жить с v3.3.

Ранние отзывы от Mulvya предлагают несколько проблем с этой командой. Любое решение этой, казалось бы, тупиковой ситуации?

1 ответ1

2

Ваша оригинальная команда может быть изменена на

ffmpeg -y -i original.mp4 -f lavfi -i color=c=black:s=960x540=d=1 \
  -filter_complex "[0:v]scale=-1:540[scaled]; \
     [1:v][scaled]overlay=x‌​=(main_w-w)/2:eof_ac‌​tion=endall, \
          format=y‌​uv420p, \
          dra‌​wtext=fix_bounds=tru‌​e:text='This is a comment':font=bold:x=(w-text_w)/2:y=h-(text_h*1)-40:borderco‌​lor=black@0.25:borde‌​rw=7[out]; \
     [0:a]anull‌​[audio]" \
  -map "[out]" -map "[audio]" test.mp4

Кроме того, это дает тот же результат,

ffmpeg -y -i original.mp4 \
  -vf "scale=-1:540,pad=960:540:(ow-iw)/2,
          dra‌​wtext=fix_bounds=tru‌​e:text='This is a comment':font=bold:x=(w-text_w)/2:y=h-(text_h*1)-40:borderco‌​lor=black@0.25:borde‌​rw=7"
 test.mp4

Заметки:

1) Отдельные цепочки фильтров должны быть разделены точками с запятой, а не запятыми. Цепочка фильтров отличается, когда ее набор входов не идентичен набору выходов предыдущего фильтра, например, масштаб принимает один вход и испускает один выход. оверлей принимает два входа, следовательно, создается новая цепочка фильтров. Точно так же одиночный вывод drawtext не передается в anull, так что это другая цепочка фильтров. И наоборот, если выходные данные фильтра совпадают с входными данными для другого фильтра, они могут быть разделены запятой и метки на этом соединении не требуются.

2) Я держал аудиофильтр в моддированной команде, но он ничего не делает. Используется для тестирования разработчиками.

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

4) Альтернативный метод предпочтительнее, поскольку оверлей синхронизируется с базовым входом и удаляет кадры из оверлея, если частота кадров оверлея выше. Может не быть заметным в большинстве случаев, хотя.

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