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

16763
Ivan

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

In Anbetracht der Überlegenheit der modernen H.264 AVC- und H.265-HEVC-Kompressionsalgorithmen 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

  • Komprimierungsparameter für H.264 (FFMPEG + libx264)
  • H.265-Komprimierungsparameter (FFMPEG + libx265)

sollte ich verwenden, um mein ziel zu erreichen?

Mit Parametern meine ich die CBR / CRF-Werte, das Preset (bitte nicht sehr langsam / Placebo), Flags usw.

PS: Ich würde es vorziehen, den Fall mit der Verwendung zu beschränken -pix_fmt yuv420pund -profile:v baseline -level 3.0sicherzustellen, dass die Datei auf allen Geräten einschließlich der alten Geräte, 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. Ich möchte mich jedoch nicht auf diese Einschränkung konzentrieren, da ich bisher keine Geräte mit hardwarebeschleunigtem H.265 gesehen habe überhaupt noch decodieren.

9

1 Antwort auf die Frage

12
slhck

Beachten Sie, dass Sie dazu immer die neueste ffmpeg-Version verwenden und diese möglichst selbst kompilieren sollten . Damit haben Sie Zugriff auf die neuesten Versionen von libx265 und libfdk-aac für die Audiocodierung.

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

H.264

Für die Qualitäts- / Ratensteuerung 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 unabhängig von der ursprünglichen Videoauflösung oder ihrer Komplexität erhalten bleibt. Die 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 Originalquelle jedoch bereits komprimiert ist (und nicht im Vergleich zu Blu-rays eine sehr gute Qualität aufweist), möchten Sie möglicherweise die CRF-Datei etwas niedriger einstellen (z. B. 20). Dies erhöht die erforderliche Bitrate um etwa ein Drittel .

Wählen Sie die Voreinstellung danach, wie lange Sie warten möchten. 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 128kstatt -c:a libfdk_aac -vbr 4.

H.265

Forschungsergebnisse deuten darauf hin, dass die Verwendung von HEVC im Vergleich zu H.264 zu einer Bitrateneinsparung von bis zu 74% führt. Dies basiert auf subjektiven Betrachtungsdaten von Ultra-HD-Sequenzen. Natürlich hängt es von der zeitlichen Komplexität des Quellinhalts ab, und die Menge der gespeicherten Daten ist für schwer zu codierende Sequenzen nicht so hoch. In jedem Fall 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 wird H.265 ungefähr 750 kBit / s verwenden, aber es sind 750 kBit / s gegenüber 350 kBit / s für eine andere Sequenz. Ich habe es mit einer Reihe von Sequenzen mit DVD-PAL-Auflösung laufen lassen und konnte den Qualitätsunterschied nicht erkennen.

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:

Vielen Dank für eine gute Antwort. Was bedeutet keyint übrigens praktisch? Ivan vor 9 Jahren 0
Die Schlüsselzahl in x264 / x265 ist das Intervall zwischen IDR-Frames, dh das Intervall zwischen Keyframes, bei dem der Decoder auffrischen kann. Dazwischen können I-Frames ohne Keyframes vorhanden sein, z. B. wenn ein Szenenausschnitt auftritt. Es ist gleichbedeutend mit dem `-g`-Parameter, wenn ich mich nicht irre. slhck vor 9 Jahren 1
Ü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 keinen oder nur einen geringen Unterschied machen, dass die Dinge im Audioteil einfach sind (wählen Sie einfach die Bitrate und gehen Sie und gehen Sie los) und alle großen verlustbehafteten Codecs wie MP3, AAC und Vorbis klingen fast oder genau das gleiche bei 128 kbps und darüber). Meinen Sie, es gibt tatsächlich einen bemerkenswerten Unterschied zwischen libfdk-aac und gewöhnlichen aac? Ivan vor 9 Jahren 0
+1 bei der Erwähnung der letzten Builds, da bei alten Versionen möglicherweise nicht die richtige Anzahl von `-refs` für libx264 festgelegt wird, wie durch den gewünschten` -level` definiert (alter Fehler 3307 und ein anderer IIRC). LordNeckbeard vor 9 Jahren 0
Nun, @Ivan, es hängt davon ab, wie viel von einem Audiophilen du bist oder wie viel Aufmerksamkeit du der Audioqualität schenkst. In der Tat, wie Sie schon erwähnen, wird es an einer Bitratenschwelle keinen Unterschied zwischen den Encodern geben, aber ich versuche, die Leute dazu zu ermutigen, libfdk zu verwenden, wann immer dies möglich ist, da die libvo-aacenc, die Sie mit den meisten ffmpeg-Builds erhalten, [wirklich schlechte Qualität hat ] (http://d.hatena.ne.jp/kamedo2/20120729/1343545890) (nur japanisch, sorry). Das eingebaute ist schön, aber kein VBR. slhck vor 9 Jahren 0
Ich verwende die neuesten Zeranoe FFmpeg Win32-Builds von http://ffmpeg.zeranoe.com/builds/. Die einzige Möglichkeit, AAC herauszuholen, war `-c: a libvo_aacenc`. Ich würde versuchen, es selbst zu erstellen, wenn ich GNU / Linux ausführen würde, habe aber Angst, Software aus anderen Quellen als einem VisualStudio-Projekt unter Windows zu erstellen ... Ivan vor 9 Jahren 0
@Ivan Die Zeranoe-Builds sollten auf jeden Fall "-c: a aac -strict experimental" wie in meiner Antwort angegeben ermöglichen. Und ich stimme zu, ich würde nicht versuchen, es unter Windows zu erstellen. slhck vor 9 Jahren 1
@Ivan (1. Kommentar): Siehe [ffmpeg-wiki] (https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio): "Basierend auf Qualität, die von hoch nach niedrig erzeugt wird:` libopus> libvorbis> = libfdk_aac> aac > libmp3lame> = libfaac> = eac3 / ac3> libtwolame> vorbis> mp2> wmav2 / wmav1` Nur für AAC: (Da es etwas verwirrend ist, mit 3 verfügbaren Encodern): `libfdk_aac> aac> libfaac` The> = Zeichen bedeutet mehr oder dieselbe Qualität. " Golar Ramblar vor 7 Jahren 1