
Ich verwende derzeit den Befehl aus dieser Frage, um zwei Videos zu überblenden:
Überblenden zwischen 2 Videos mit ffmpeg
Mein Befehl:
ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i color=black - filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=640x360,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] output.mp4
Diese Überblendanimation funktioniert einwandfrei, außer dass sie das Video auf 480 x 360 statt auf die gewünschten 640 x 360 verkleinert. Die Metadaten zeigen fälschlicherweise an, dass die Abmessungen 640 x 360 betragen, aber ich bin sicher, dass dies nicht der Fall ist.
Ich bin auch sicher, dass beide Eingabevideos genau 640 x 360 sind.
Ich vermute, dass die Verkleinerung auf das Pixelformat zurückzuführen ist yuva420p
, bin mir aber nicht sicher, welche anderen Optionen ich habe. Ich habe versucht, das Pixelformat zu ändern, aber bisher hat nichts funktioniert.
Der oben angegebene Befehl wird ohne Fehler ausgeführt.
Antwort1
Verwenden
ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i "color=black:s=640x360:d=9"
-filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] output.mp4
Der Farbfilter gibt ein 320 x 240-Video aus, sofern nicht anders angegeben. Der Skalierungsfilter versucht, das Quellseitenverhältnis beizubehalten – in diesem Fall 4:3. Daher wird das Video als 640 x 360 codiert, aber mit einem Anzeigeseitenverhältnis von 4:3 als 480 x 360 angezeigt.