#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"