Ich habe 45 Videos mit unterschiedlichen Seitenverhältnissen und Auflösungen. Ich muss sie alle so skalieren, dass sie genau in einen 640 x 360 (16 x 9) Container mit den folgenden Spezifikationen passen:
16x9, 640x360, 1600kbps, H.264, MP4, progressiv, 29,97
Einige Videos könnten beispielsweise 512 x 12 groß sein, andere 480 x 320, aber sie müssen alle skaliert und zentriert in ein neues 640 x 360-Ausgabevideo passen. Wenn ein Video nicht breit genug ist, um diesen Platz auszufüllen, sollten links und rechts schwarze Balken hinzugefügt werden.
Geht das mit ffmpeg?
Hier ist der Code, mit dem ich bisher gespielt habe:
ffmpeg -i "input.mov" -b:v 1600k -bufsize 1600k -r 29.97 -vf scale=640:360 -vcodec libx264 output.mp4
Dies scheint alles zu tun, was ich brauche, außer dynamisch auf diese feste Auflösung zu skalieren.
Weiß jemand, wie ich zu dem Ergebnis komme, das ich suche?
Vielen Dank!
Verwenden
ffmpeg -i "input.mov" -vf
"scale='if(gt(a*sar,16/9),640,360*iw*sar/ih)':'if(gt(a*sar,16/9),640*ih/iw/sar,360)',
pad=640:360:(ow-iw)/2:(oh-ih)/2,setsar=1"
-vcodec libx264 -b:v 1600k -bufsize:v 1600k -r 30000/1001 output.mp4
Die Skalierungsfilter verwenden den bedingten if(a,b,c)
Ausdruck, dh if a then b else c
. Ich überprüfe, ob das Video breiter als 16:9 ist. Wenn ja, skaliere ich die Breite auf 640 und die Höhe, um die Proportionen beizubehalten. Wenn nicht, skaliere ich die Höhe auf 360 und halte die Breite proportional. Dann wird das Ergebnis auf 640x360 aufgefüllt. Das setsar wird verwendet, um sicherzustellen, dass ffmpeg das Video als Quadratpixel registriert.
d13
Gyan
Akash Dubey