Verwenden von ffmpeg zum Hinzufügen von Höhe (als schwarze Balken) zur Videodatei ohne Qualitätsverlust

Ich habe eine Datei mit einer Auflösung von 3840 x 1632, aber mein Fernseher streckt das Bild vertikal, um alle 2160 Pixel Höhe auszufüllen. Ist es möglich, ffmpeg zu verwenden, um eine leere / schwarze Höhe hinzuzufügen, während die Video- und Audioqualität erhalten bleibt?

Versucht, dies zu tun, was zu funktionieren schien (dauerte ungefähr 2 Stunden, die gleiche Länge wie das Video), aber die Dateigröße/Videoqualität wurde stark reduziert:

ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280" -c:a copy my_output_video.mkv

Gibt es einen Schalter, um zu sagen "alles andere bleibt gleich"?

Danke schön!

Antworten (3)

Sie müssen die Codierungsparameter manuell festlegen.

ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -crf 18 -preset faster -c:a copy my_output_video.mkv

Die CRF-Option legt den Kompromiss zwischen Größe und Qualität fest. Niedrigere Werte erzeugen eine bessere Qualität, aber größere Dateien. Die Voreinstellung erhöht die Geschwindigkeit, aber bei gleicher Qualität wird die Dateigröße größer.

Der Setsar-Filter wurde als Vorsichtsmaßnahme hinzugefügt, falls Ihr Player die in der Datei gespeicherte SAR liest und das Video basierend auf diesem Wert dehnt.

Sie können Transformationen mit -c:v libx264 -crf 0X264 im verlustfreien Modus durchführen, in den es mit eintritt -crf 0. Sie haben eine echte verlustfreie Videocodierung implementiert, dies ist nicht allgemein bekannt - aber es funktioniert perfekt.

Ich benutze es die ganze Zeit.

Seien Sie bereit - es braucht GBs - besonders für Videos aus dem wirklichen Leben (keine Grafiken usw.)

Bildschirmaufzeichnung für Programme und Grafiken in -crf 0- ist perfekt - es komprimiert sie wirklich großartig und verbraucht relativ wenig CPU-Leistung.

Sie können auch die verwendete Komprimierungskomplexität mit den Voreinstellungen ( fast, veryslow... usw.) steuern. Und Sie können auch verlustfrei in komprimierter verlustfrei rekomprimieren.

Alles für verlustfrei ist das gleiche wie für alle x264, außer dass es wirklich verlustfrei ist.

Das OP beabsichtigt, die Dateien auf einem Fernseher abzuspielen, und die meisten H / W- oder S / W-Decoder unterstützen das Hi444-Profil nicht, was crf/qp 0erforderlich ist.
@Gyan Ja, was du sagst, ist wahr. Außer ich sagte "Transformationen". Die Idee, die ich vertrete - Person weiß nicht, wie man mit verlustfreier Verarbeitung spielt. Er kann den Workflow schrittweise in verlustfreier Form entwickeln und dann alles in die verlustbehaftete Massenverarbeitung im laufenden Betrieb verlagern. Auch verlustfrei kann direkt verglichen werden. So wie ich es zwei Tage zuvor hatte. Wenn die Eingabedatei 11,8 GB hat, wäre die Letterbox-Datei auch 11,8 GB – Sie sehen sofort, dass alle Informationen erhalten bleiben. & Verlustfrei kann immer in verlustbehaftet kodiert werden.
Hier ist meine Lösung mit Erklärung
ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -c:a copy -c:v libx265 -x265-params lossless=1 my_output_video.mkv
----------111111111----------------2222-3333-4-555----------------------------------------------------------6666666666666666666

Legend
1 - input filename
2 - Target X dimension
3 - Target Y
4 - Bar's target X pos. Best: Floor( (Target X - Current X) / 2) . If the value is 0, no vertical baps will be present.
5 - Bar's target Y pos. Best: Floor( (Target Y - Current Y) / 2) . If the value is 0, no horizontal baps will be present.
6 - output filename

Notes
-c:a copy is to maintain lossless-ness
-x265-params lossless=1 option is for lossless encoding. Adding -crf 0 is not required.
-c:v libx265 - added to reduce output video quality while maintaining lossless-ness
Floor() - means to floor DOWN where applicable (ideally, no non-integer calculations occur)

Mein Beispielbefehl zum Hinzufügen von Balken von 1660 x 780 bis 1920 x 1080,

ffmpeg -i input.mp4 -filter:v "pad=1920:1080:130:150,setsar=1" -crf 0 -c:v libx265 -x265-params lossless=1 my_output_video.mp4
Quellen,