Я пытаюсь взять 3 PNG-изображения с прозрачным фоном и сделать с ними видео с плавным переходом, чтобы затем я мог поместить это видео в фоновое видео. Я понимаю, что могу сделать это, возможно, в одной команде, но хотел бы сохранить это отдельно, так как фоновое видео может быть взаимозаменяемым. То, что я до сих пор есть;

ffmpeg -loop 1 -t 1 -i 1.png -loop 1 -t 1 -i 2.png -loop 1 -t 1 -i 3.png -
filter_complex "[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-
(if(gte(T,0.5),1,T/0.5)))'[b1v]; [2:v][1:v]blend=all_expr='A*
(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; [0:v][b1v][1:v]
[b2v][2:v]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

Кажется, это работает, но фон теперь черный, а не прозрачный, я попытался сделать вывод разных типов файлов (avi, mov и т.д.), Но это не имеет никакого эффекта. Следующая команда, которую я выполняю:

ffmpeg -i out.mp4 -i video.mp4 -filter_complex "[0:v]scale=1080:-2[fg1]; 
[1:v]scale=1920:-1,setpts=PTS-STARTPTS[bg];[bg]
[fg1]overlay=400:400:shortest=1,format=yuv420p[v]" -map "[v]" -movflags 
+faststart final.mp4

Это также, кажется, работает, но опять же видео, которое я накладываю, не имеет прозрачности, поэтому выглядит плохо. Есть ли способ, которым я могу заставить первое видео соблюдать прозрачность от оригинальных png? Если для этого требуется одна команда, я с удовольствием это сделаю, но в этот момент я столкнулся со стеной. Любая помощь приветствуется.

1 ответ1

0

В первой команде измените format=yuv420p на format=yuva420p . Прозрачность требует альфа-канала, но вы в настоящее время конвертируете в формат без такового. format=yuva444p обеспечит немного лучшее качество.

И что более важно, выведите -map "[v]" -c:v png out.mov

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