Wie kann man mit Crossfade 3 pngs den Hintergrund transparent halten, damit ich ihn auf ein Hintergrundvideo setzen kann?

587
Jamie Stenhouse

Ich versuche, 3 PNG-Bilder mit transparentem Hintergrund aufzunehmen und ein Crossfade-Video damit zu erstellen, sodass ich dieses Video dann in ein Hintergrundvideo einfügen kann. Ich verstehe, dass ich dies möglicherweise mit einem Befehl tun kann, aber ich möchte es getrennt halten, da das Hintergrundvideo möglicherweise austauschbar ist. Was ich bisher habe, ist;

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 

Das scheint zu funktionieren, aber der Hintergrund ist jetzt schwarz und nicht transparent. Ich habe versucht, verschiedene Dateitypen (avi, mov usw.) auszugeben, aber das hat keine Auswirkung. Der nächste Befehl, den ich ausführen möchte, lautet:

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 

Das scheint auch zu funktionieren, aber auch das Video, das ich überlagere, hat nicht die Transparenz, also sieht es schlecht aus. Gibt es eine Möglichkeit, mit dem ersten Video die Transparenz der ursprünglichen PNGs zu würdigen? Wenn es einen einzigen Befehl erfordert, bin ich froh, das zu tun, aber ich habe an dieser Stelle eine Wand getroffen. Jede Hilfe wird geschätzt.

0

1 Antwort auf die Frage

0
Gyan

Wechseln Sie im ersten Befehl format=yuv420pzu format=yuva420p. Transparenz erfordert einen Alphakanal, aber Sie konvertieren in ein Format ohne. format=yuva444pliefert eine etwas bessere Qualität.

Und noch wichtiger ist die Ausgabe an -map "[v]" -c:v png out.mov