Ваша оригинальная команда может быть изменена на
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_action=endall, \
format=yuv420p, \
drawtext=fix_bounds=true:text='This is a comment':font=bold:x=(w-text_w)/2:y=h-(text_h*1)-40:bordercolor=black@0.25:borderw=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,
drawtext=fix_bounds=true:text='This is a comment':font=bold:x=(w-text_w)/2:y=h-(text_h*1)-40:bordercolor=black@0.25:borderw=7"
test.mp4
Заметки:
1) Отдельные цепочки фильтров должны быть разделены точками с запятой, а не запятыми. Цепочка фильтров отличается, когда ее набор входов не идентичен набору выходов предыдущего фильтра, например, масштаб принимает один вход и испускает один выход. оверлей принимает два входа, следовательно, создается новая цепочка фильтров. Точно так же одиночный вывод drawtext не передается в anull, так что это другая цепочка фильтров. И наоборот, если выходные данные фильтра совпадают с входными данными для другого фильтра, они могут быть разделены запятой и метки на этом соединении не требуются.
2) Я держал аудиофильтр в моддированной команде, но он ничего не делает. Используется для тестирования разработчиками.
3) по умолчанию используется оверлей с выходом yuv420p, поэтому формат не требуется.
4) Альтернативный метод предпочтительнее, поскольку оверлей синхронизируется с базовым входом и удаляет кадры из оверлея, если частота кадров оверлея выше. Может не быть заметным в большинстве случаев, хотя.