Konvertieren von Videos von 1080p in 720p mit geringstem Qualitätsverlust mithilfe von ffmpeg

45

Ich staple mit meinem hochwertigen Film: 1080p mit 60fps. Das Problem ist Verzögerungen beim Spielen.

Ich habe versucht, es mit ffmpeg auf 720p zu konvertieren:

ffmpeg -i MyMovie.mkv -r 60 -s hd720 MyMovie_720p.mkv

Ich habe jedoch einen signifikanten Qualitätsverlust, da die Bitrate von 32,3 Mbit / s auf 2,8 Mbit / s gesunken ist. Wie kann ich die richtige Bitrate für den Videostream festlegen und alle anderen kopierten Streams unverändert lassen?

Eingabedatei mediainfo:

ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 2h 58mn
Bit rate                                 : 32.3 Mbps
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 59.940 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.260
Stream size                              : 40.2 GiB (92%)
Writing library                          : x264 core 116 r2019 9cc407d
Encoding settings                        : cabac=1 / ref=4 / deblock=1:-2:-1 / analyse=0x3:0x113 / me=umh / subme=10 / psy=1 / psy_rd=0.80:0.20 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-3 / threads=6 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=6 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=0 / crf=14.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=50000 / vbv_bufsize=62500 / crf_max=0.0 / nal_hrd=none / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:0.60
Language                                 : English
Default                                  : Yes
Forced                                   : No
Matrix coefficients 

                 : BT.709-5, BT.1361, IEC 61966-2-4 709, SMPTE RP177
atomAltera
quelle

Antworten:

93

Hier ist ein Beispiel, das Ihnen Videos in höchster Qualität liefern soll (ich spreche nicht über die resultierende Dateigröße). Beachten Sie, dass dieses Video möglicherweise nicht auf allen Geräten oder Playern wiedergegeben werden kann:

ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 0 -preset veryslow -c:a copy MyMovie_720p.mkv

Um eine "visuell verlustfreie" Qualität zu erhalten, können Sie Folgendes verwenden:

ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 18 -preset veryslow -c:a copy MyMovie_720p.mkv

Nun wollen wir sehen, was wir hier haben:

Der Skalierungsvideofilter dient zum Ändern der Videogröße. Sie legen nur eine Größe fest - in diesem Beispiel die Höhe - und verwenden sie -1für die andere Dimension. ffmpeg berechnet den korrekten Wert unter Beibehaltung des Seitenverhältnisses automatisch neu.

Qualitätskontrolliert mit der -crfOption:

Der Bereich der Quantisiererskala liegt zwischen 0 und 51: Dabei ist 0 verlustfrei, 23 ist die Standardeinstellung und 51 ist die schlechteste Einstellung. Ein niedrigerer Wert ist eine höhere Qualität und ein subjektiv vernünftiger Bereich liegt zwischen 18 und 28. Betrachten Sie 18 als visuell verlustfrei oder nahezu verlustfrei: Es sollte genauso oder nahezu genauso aussehen wie die Eingabe, ist aber technisch nicht verlustfrei.

Der Bereich ist exponentiell, sodass das Erhöhen des CRF-Werts +6 ungefähr die Hälfte der Bitrate und -6 ungefähr die doppelte Bitrate beträgt. Im Allgemeinen wird der höchste CRF-Wert gewählt, der noch eine akzeptable Qualität bietet. Wenn die Ausgabe gut aussieht, versuchen Sie es mit einem höheren Wert. Wenn die Ausgabe schlecht aussieht, wählen Sie einen niedrigeren Wert.

Weitere Informationen finden Sie in der x264-Codierungsanleitung .

Mit den -presetOptionen steuern Sie den Kompromiss zwischen Videokodierungsgeschwindigkeit und Komprimierungseffizienz . Diese sind ultraschnell, superschnell, sehr schnell, schnell, mittel, langsam, langsamer und sehr langsam . Die Standardeinstellung ist mittel . Die Veryslow- Option bietet die beste Komprimierungseffizienz (was zu einer geringeren Dateigröße bei gleicher Qualität führt), ist jedoch - wie der Name schon sagt - sehr langsam.

Das Audio wird ohne Änderungen direkt von der Eingabedatei in die Ausgabedatei kopiert .

Nikola Dimitrijevic
quelle
2
LordNeckbeard - danke für die Bearbeitung. Ich hatte nicht genug Zeit, um alle Details zu tippen
Nikola Dimitrijevic
1
In Ihrem Beispiel wird die Höhe auf 720 und nicht die Breite eingestellt.
Chovy
Können Sie dies rückwärts tun video.stackexchange.com/questions/20439/…
William
2
Um Untertitel auch in mkv zu kopieren, ohne sie zu konvertieren, können Sie sie hinzufügen -scodec copy.
Casper
2
Ich denke, um 720p zu bekommen muss man die Breite also nicht -vf scale=-1:720aber auf 1280 einstellen -vf scale=1280:-1.
cdlvcdlv
0

Falls Sie in einer anderen Größe skalieren möchten, gelten einige Einschränkungen für die FFMPEG-Skalierungsdimensionen. Es werden nicht alle Höhen akzeptiert. Hier finden Sie eine kleine Liste der besten Empfehlungen für Abmessungen.

Videocodecs erzielen eine bessere Leistung, wenn die Breite und Höhe in Pixel ein Vielfaches von 16 beträgt. Während Sie in Ihren Codierungseinstellungen eine beliebige Breite und Höhe verwenden können, können nicht optimale Abmessungen zu einer schlechten Bildqualität und einer verringerten Bildrate führen. Für die beste Bildqualität und Wiedergabe sollten Sie für Ihr Video Breiten- und Höhenmaße verwenden, die ein Vielfaches von 16 sind. Ihre nächstbeste Wahl ist ein Vielfaches von 8 und danach ein Vielfaches von 4.

Recommended width and height for videos with 16:9 aspect ratios:

Best Choice:     2nd Best:        3rd Best:
Multiples of 16  Multiples of 8   Multiples of 4
1920 x 1080      1792 x 1008      1856 x 1044
1280 x 720       1152 x 648       1216 x 684
1024 x 576        896 x 504       1088 x 612
 768 x 432        640 x 360        960 x 540
 512 x 288        384 x 216        832 x 468
 256 x 144        128 x 72         704 x 396
                                   576 x 324
                                   448 x 252
                                   320 x 180
                                   192 x 108
Ewald Bos
quelle