Создание прозрачного видео из входного видео

#video #ffmpeg

Вопрос:

Я пытаюсь создать видео с прозрачным фоном из входного видео (с теми же размерами и т. Д.). Я попробовал несколько стратегий (с использованием chromakey фильтра и других), но ни одна из них не сработала… Я зашел так далеко:

 ffmpeg -i input.mp4 -filter_complex "color=color=black@0.0,format=yuva420p[bg],[bg][0:v]scale2ref[bg][0v],[bg]drawbox=x=10:y=10:w=100:h=100:color=pink@0.5;[0v]nullsink" -c:v qtrle -an "alpha.mov"
 
  • создание видеопотока с прозрачностью и установка прозрачного фона (black@0.0)
  • масштабирование прозрачного видео в соответствии с входным видео
  • [для целей тестирования: нарисуйте рамку поверх прозрачного видео. Я опустил ту часть, в которой я вставляю субтитры в видео, для простоты]
  • отбрасывание входного видеопотока
  • удаление аудиопотока

Это в основном работает, но обработка никогда не заканчивается — я не могу ограничить длину выходного видео, чтобы оно соответствовало длине входного видео… Я пробовал использовать эту -shortest опцию в любом месте команды — без успеха.

Ответ №1:

Итак, мне удалось решить эту проблему с помощью небольшого трюка, используя overlay фильтр (в частности, его shortest параметр), с его x и y установленными в некоторых координатах за пределами соответствующих границ, поэтому у нас остается эффект соответствующего ограничения длины видео:

 ffmpeg -i input.mp4 -filter_complex "color=color=black@0.0,format=yuva420p[bg],[bg][0:v]scale2ref[bg][0v],[bg]drawbox=x=10:y=10:w=100:h=100:color=pink@0.5[out];[out][0v]overlay=x=100000:y=100000:shortest=1" -c:v qtrle -an "alpha.mov"