Ffmpeg upscale und letterbox ein video

5

Ich habe ein Video mit einer Auflösung von 480x360. Ich möchte dieses Video auf 1280: 720 hochskalieren und nicht das ursprüngliche Seitenverhältnis des Videos verlieren (Letterbox links und rechts).

Ich weiß also, dass die Leute diese Aufgabe mit ffmpeg erfüllen können, aber bisher bin ich dazu nicht in der Lage

Kann mir also jemand einen ffmpeg empfehlen ???

Vielen Dank für Ihre Hilfe

Levan
quelle
1
Warum willst du hochskalieren?
Logan
1
Ich habe meine Gründe dafür :)
Levan

Antworten:

16
ffmpeg -i input.mp4 -vf "scale=(iw*sar)*min(1280/(iw*sar)\,720/ih):ih*min(1280/(iw*sar)\,720/ih), pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2" output.mp4

Lassen Sie mich diesen Befehl für Sie aufschlüsseln:

ffmpeg -i input.mp4

Dies ist die Standardeingabemethode für ffmpeg. Ersetzen Sie "input.mp4" durch den Namen Ihrer Eingabedatei.

-vf

Gibt an, dass im Befehl einige Videofilter folgen. Die angegebenen Videofilter werden nacheinander auf jedes Bild angewendet.

scale=(iw*sar)*min(1280/(iw*sar)\,720/ih):ih*min(1280/(iw*sar)\,720/ih)

Der erste Filter ist der Skalenfilter. Der Skalenfilter ist leistungsfähig, da er Wertersetzung und Mathematik ausführen kann. In diesem Fall berechnet die Mathematik die neue skalierte Breite und Höhe. Das Eingabebild wird so skaliert, dass es der Breite und / oder Höhe des gewünschten Ausgabeformats entspricht, ohne das Bild zu verzerren. Sie müssen keine Änderungen an den Skalenparametern vornehmen, da diese automatisch die tatsächlichen Werte für "iw", "sar" und "ih" ersetzen. Da Ihr Eingangsvideo 4x3 ist, wissen wir, dass die Berechnung auf eine Höhe von 720 aber eine Breite von weniger als 1280 skaliert werden kann. Weitere Informationen: https://ffmpeg.org/ffmpeg-filters. html # scale-1

pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2

Der zweite Filter ist der Pad-Filter. Es hat die gleichen mathematischen / Substitutionsfunktionen wie die Skalierungsfunktion. So wird es die genauen Zahlen für Sie herausfinden. Sie müssen nichts ändern, damit es funktioniert. Die Parameter weisen den Pad-Filter an, die Ausgabe auf 720 x 1280 zu stellen und das Eingabebild in der Mitte des Frames zu platzieren. Der Pad-Filter füllt das Ausgabebild überall dort mit Schwarz, wo das Eingabebild nicht bedeckt ist. Bei Ihrer Eingabe wissen wir, dass der Skalenfilter die Höhe auf 720 skaliert hat, die Breite jedoch 1280 nicht erreicht hat. Daher werden die Seiten mit schwarzen Balken versehen, um den Unterschied auszugleichen. Weitere Informationen: https://ffmpeg.org/ffmpeg-filters.html#pad

output.mp4

Dies gibt die Ausgabedatei an, in der ffmpeg die Ergebnisse ablegt. Möglicherweise müssen Sie alle Arten von Parametern für Format, Bitrate usw. hinzufügen, um Ihre genauen Anforderungen zu erfüllen.

Brian
quelle
Vielen Dank für die Antwort, aber ich möchte Ihnen diesen Befehl etwas näher erläutern. Sind dies zwei verschiedene Befehle, die ich mit scale oder pad verwenden kann, oder sollten beide gleichzeitig verwendet werden? und in (iw * sar) soll ich etwas in sie schreiben? Vielen Dank
Levan
1
Ich habe die Antwort bearbeitet, um weitere Details zum Befehl bereitzustellen. Fazit: Es ist ein einzelner Befehl. Das einzige, was Sie ändern sollten, sind "input.mp4" und "output.mp4", je nach gewünschter Quelle und Ziel.
Brian
1
Übrigens gibt es hier ein sehr ähnliches Q / A: superuser.com/questions/547296/…
Brian
Vielen Dank, ja, ich habe mir diese Antwort vor dem Posten angesehen, konnte sie aber nicht zum Laufen bringen. Nochmals vielen Dank für die Hilfe
Levan
Ich musste das Argument -aspect 16: 9-Seitenverhältnis hinzufügen, um ein genaues 16: 9-Metadaten-Flag zu erzwingen. Mir wurde klar, dass es ein kleines bisschen anders war, nachdem ich eine Eingabedatei über mp4box dash splitter ausgeführt hatte.
Wen