Welche H.264 / H.265-Videokomprimierungsparameter bieten eine DVD-äquivalente Qualität bei besserer Komprimierung?

11

Ich habe eine Schachtel mit DVD-Videodisketten, die ich entfernen möchte, während ich die Videos behalten möchte, indem ich sie in MP4-Dateien konvertiere, um sie auf einer Festplatte zu speichern.

Angesichts der Überlegenheit der modernen H.264 AVC- und H.265 HEVC-Komprimierungsalgorithmen gegenüber dem DVD-Standard MPEG2 hoffe ich, Festplattenspeicher durch Komprimieren des Videos zu sparen und dabei ~ 99% der DVD-Originalqualität zu sparen.

Was

  • H.264 (FFMPEG + libx264) Komprimierungsparameter
  • H.265 (FFMPEG + libx265) Komprimierungsparameter

soll ich verwenden, um mein Ziel zu erreichen?

Mit Parametern meine ich die CBR / CRF-Werte, die Voreinstellung (bitte kein Veryslow / Placebo), Flags usw.

PS: Ich würde es vorziehen, den Fall auf die Verwendung zu beschränken -pix_fmt yuv420pund -profile:v baseline -level 3.0sicherzustellen, dass die Datei auf allen Geräten, einschließlich alten Geräten, die auf alten Hardware-Decoder-Chips basieren, einwandfrei abgespielt wird. Die Verwendung einer etwas erhöhten I-Frames-Frequenz (unter Verwendung des -gParameters) ist ebenfalls wünschenswert, um die Mediennutzung mit niedriger Geschwindigkeit und hoher Latenz zu erleichtern.

Für HEVC würde ich es auch vorziehen, Parameter zu verwenden, die eine reibungslose hardwarebeschleunigte Wiedergabe auf Geräten gewährleisten, die dies unterstützen, aber ich möchte mich nicht auf diese Einschränkung konzentrieren, da ich keine Geräte gesehen habe, die hardwarebeschleunigtes H.265 anbieten überhaupt noch dekodieren.

Ivan
quelle

Antworten:

14

Beachten Sie, dass Sie hierfür immer die neueste ffmpeg-Version verwenden und diese vorzugsweise selbst kompilieren sollten . Auf diese Weise erhalten Sie Zugriff auf die neuesten Versionen libx265 und libfdk-aac für die Audiokodierung.

Außerdem werden die Einsparungen bei der Datenrate drastisch sein, wenn Sie von einer DVD mit ~ 10 MBit / s auf etwa 1–2 MBit / s für H.264-Videos und 0,5–1 MBit / s für H.265-Videos wechseln. Das Ändern der Qualität in den folgenden Schritten kann die Bitraten beeinflussen, dennoch sollte die Datenreduzierung erheblich sein.

H.264

Für die Qualitäts- / Ratenkontrolle möchten Sie den CRF-Modus in libx264 anstelle einer konstanten Bitrate verwenden. Durch die Verwendung von CRF wird sichergestellt, dass eine durchschnittliche Qualität erhalten bleibt, unabhängig von der ursprünglichen Videoauflösung oder ihrer Komplexität. Eine konstante Bitrate ist nur dann wirklich nützlich, wenn Sie durch das Übertragungsmedium eingeschränkt sind (z. B. Festplattengeschwindigkeit, Internetdurchsatz).

Die Auswahl des CRF-Werts ist der schwierige Teil. Sie müssen sich die Ausgabe ansehen. Die Standardeinstellung für libx264 (23) bietet einen recht guten Kompromiss zwischen Größe und Qualität. Da Ihre ursprüngliche Quelle jedoch bereits komprimiert ist (und im Vergleich zu Blu-rays keine sehr gute Qualität aufweist), möchten Sie die CRF möglicherweise etwas niedriger einstellen, z. B. 20. Dadurch wird die erforderliche Bitrate um etwa ein Drittel erhöht .

Wählen Sie die Voreinstellung entsprechend der Wartezeit. slowscheint hier ein guter Wert zu sein.

ffmpeg -i input \
-c:v libx264 -crf 20 -pix_fmt yuv420p \
-x264-params keyint=240:min-keyint=20 \
-preset:v slow -profile:v baseline -level 3.0 \
-c:a libfdk_aac -vbr 4 \
output.mp4

Der integrierte ffmpeg-AAC-Encoder kann verwendet werden, wenn libfdk-aac nicht verfügbar ist. Verwenden Sie -c:a aac -strict experimental -b:a 128kanstelle von -c:a libfdk_aac -vbr 4.

H.265

Untersuchungen legen nahe, dass die Verwendung von HEVC zu einer Bitratenersparnis von bis zu 74% im Vergleich zu H.264 führt. Dies basiert auf subjektiven Betrachtungsdaten von Ultra-HD-Sequenzen. Dies hängt natürlich von der zeitlichen Komplexität des Quellinhalts ab, und die gespeicherte Datenmenge ist bei schwer zu codierenden Sequenzen nicht so hoch. In beiden Fällen können Sie mit Sicherheit sagen, dass eine Datenreduzierung von 50% absolut möglich ist.

Die Standard-CRF für libx265 ist 28. Bei Verwendung des gleichen Quellinhalts ergibt sich etwa die Hälfte der Bitrate im Vergleich zu libx264 bei CRF 23. Dies ist unabhängig von der tatsächlichen Bitrate, dh wenn die H.264-Version 1,5 MBit / s benötigt. dann verwendet H.265 ungefähr 750 kBit / s, aber es ist 750 kBit / s gegenüber 350 kBit / s für eine andere Sequenz. Ich habe es auf einigen Sequenzen mit DVD-PAL-Auflösung ausgeführt und konnte keinen Qualitätsunterschied feststellen.

ffmpeg -i input \
-c:v libx265 -pix_fmt yuv420p \
-x265-params crf=28:keyint=240:min-keyint=20 \
-preset:v slow \
-c:a libfdk_aac -vbr 4 \
output.mp4

Weitere Informationen finden Sie hier:

slhck
quelle
Vielen Dank für eine gute Antwort. Was bedeutet keyint übrigens praktisch?
Ivan
1
Das keyintin x264 / x265 ist das Intervall zwischen IDR-Frames, dh das Intervall zwischen Keyframes, in dem der Decoder aktualisieren kann. Dazwischen kann es I-Frames ohne Keyframe geben, z. B. wenn ein Szenenschnitt auftritt. Es entspricht dem -gParameter, wenn ich mich nicht irre.
Slhck
Übrigens, @slhck, eine Sache, die mich in Ihrer Antwort überrascht hat - die Aufmerksamkeit, die Sie der Wahl einer AAC-Codierungsbibliothek widmen. Früher dachte ich, dass sie alle fast gleich sind und wenig oder gar keinen Unterschied machen, dass die Dinge im Audio-Teil einfach sind (wählen Sie einfach die Bitrate und los geht's und dass alle wichtigen verlustbehafteten Codecs wie MP3, AAC und Vorbis fast oder genau klingen das gleiche bei 128 kbps und höher). Meinst du, es gibt tatsächlich einen bemerkenswerten Unterschied zwischen libfdk-aac und gewöhnlichem aac?
Ivan
1
@Ivan Die Zeranoe-Builds sollten es Ihnen definitiv ermöglichen, das zu tun -c:a aac -strict experimental, was in meiner Antwort angegeben ist. Und ich stimme zu, ich würde nicht versuchen, es unter Windows zu erstellen.
Slhck
2
@Ivan (1. Kommentar): Siehe ffmpeg-wiki : "Basierend auf der Qualität von hoch nach niedrig: libopus > libvorbis >= libfdk_aac > aac > libmp3lame >= libfaac >= eac3/ac3 > libtwolame > vorbis > mp2 > wmav2/wmav1Nur für AAC: (Weil es ein bisschen verwirrend ist, mit 3 verfügbaren Encodern): libfdk_aac > aac > libfaacDas Zeichen> = bedeutet größer oder gleich Qualität."
Golar Ramblar