
Ich habe zwei Videos
- deskshare.webm 1280x720 ohne Audio
- webcams.webm 640x480 mit Audio
Die unten beschriebenen Befehle funktionieren nach Bedarf
ffmpeg -i deskshare.webm -i webcams.webm -filter_complex
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=w+640" out.mp4
ffmpeg -i deskshare.webm -i webcams.webm -filter_complex
"[0:v]pad=(iw+640):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4
Gibt es eine Syntax, mit der ich die manuelle Eingabe der Auflösung des zweiten Videos (in meinem Fall 640 Pixel) umgehen kann?
Ist es möglich, etwas wie [1:v]width zu verwenden, um diesen Wert automatisch zu erhalten?
Bei mir funktioniert das auch prima
ffmpeg -i deskshare.webm -i webcams.webm -filter_complex "[0:v]pad=(iw+iw/2):ih[bg]; [bg][1:v]overlay=main_w-overlay_w" out.mp4
Dies funktioniert jedoch nur, wenn die Breite des ersten Videos doppelt so groß ist wie die Breite des zweiten Videos.
Antwort1
Dies kann auch auf Umwegen geschehen.
Verwenden
ffmpeg -i deskshare.webm -i webcams.webm -filter_complex
"[1:v][0:v]scale2ref=main_w:ih[sec][pri];
[sec]setsar=1,drawbox=c=black:t=fill[sec];[pri][sec]hstack[canvas];
[canvas][1:v]overlay=main_w-overlay_w" out.mp4
Scale2ref skaliert eine Kopie des sekundären Videos auf die Höhe des Hauptvideos, wobei die ursprüngliche Breite erhalten bleibt. Anschließend wird es mit Schwarz gefüllt und rechts neben dem Hauptvideo gestapelt.
Eine zweite Kopie des sekundären Videos wird dann auf die erweiterte Leinwand gelegt.
Sie benötigen ffmpeg 4.0 oder neuer.