Zugeschnittenes ffmpeg-Video ändert das Seitenverhältnis

Ich habe eine heterogene Gruppe von Videos (Codecs, Abmessungen, Größe), die ich mit ffmpeg oben abschneiden möchte. Ich habe diesen Code ein Jahr lang ohne Probleme erfolgreich verwendet (das Beispiel hier schneidet 64 Pixel ab):

ffmpeg -i in.avi -y -pix_fmt yuv420p -an -qscale 1 -vcodec libx264 -vf crop=in_w:in_h-64:0:64 out.mp4

Allerdings bin ich jetzt auf einen Fall gestoßen, in dem es nicht richtig funktioniert, und ich vermute, dass es etwas mit SAR und DAR zu tun hat. Ich habe einen Clip, der Pixelabmessungen von 960 x 720 [SAR 960:720 DAR 16:9] zeigt, das Original sieht ungefähr so ​​​​aus:

Original

Wenn ich den obigen Befehl verwende, erhalte ich am Ende ein Video, das laut ffprobe/ffmpeg 960 x 656 [SAR 4:3 DAR 80:41] ist, aber wenn ich es in einem Webbrowser oder Quicktime ansehe, wird es als 1280 x 656 angezeigt:

Ausgang

Wie kann ich den Befehl ändern, um diesen Anwendungsfall zu berücksichtigen, ohne das Zuschneiden aller anderen Clips zu unterbrechen? Hier ist, was ich erfolglos versucht habe:

ffmpeg -i in.avi -y -pix_fmt yuv420p -an -qscale 1 -vcodec libx264 -vf scale=960:656,setsar=1 -vf crop=in_w:in_h-64:0:64 out.mp4
ffmpeg -i in.avi -y -pix_fmt yuv420p -an -qscale 1 -vcodec libx264 -vf setsar=sar=0 -vf setdar=dar=0 -vf crop=in_w:in_h-64:0:64 out.mp4
Hier ist ein Archiv der Eingabe- und Ausgabedateien, die ich bekomme. ultraschalloftheweek.com/give/uploads/clips.zip
"Beachten Sie, dass das vom Setsar-Filter festgelegte Seitenverhältnis des Samples durch spätere Filter in der Filterkette geändert werden kann, z. B. wenn ein anderer "Setsar"- oder ein "Setdar"-Filter angewendet wird." - also ist die richtige Reihenfolge erforderlich und wie von @orgoro gesagt, versuchen Sie möglicherweise, Filter nicht zu trennen und stattdessen Folgendes zu tun: -vf "filter1=...,filter2=...,filter3"

Antworten (2)

Das sollte universell funktionieren.

ffmpeg -i in.avi -y -pix_fmt yuv420p -an -qscale 1 -vcodec libx264 -vf setsar=1,crop=in_w:in_h-64:0:64 out.mp4
@ user255406 libx264 ignoriert -qscale. Verwenden Sie -crfstattdessen .
Es sieht so aus, als ob Sie in einigen Fällen einfach setsar=oder sogar nur verwenden könnensetsar

ffmpeg akzeptiert nur einen Videofilter (markiert als -vf). Sie sollten alle gewünschten Videofilter in einer durch Kommas getrennten Zeichenfolge zusammenführen:

ffmpeg ... -vf setsar=1,crop=in_w:in_h-64:0:64 out.mp4