x265-Codierungstest: 12-Bit-Ergebnisse einer größeren Dateigröße als 8-Bit der gleichen Konfiguration?

Ich bin gerade neugierig auf dieses x265-HEVC-Format geworden und habe es an einem BDMV-Stream-Video mit 1920 x 1080i ausprobiert, eines mit 8-Bit-Tiefe und das andere mit 12-Bit-Tiefe. Die Ergebnisse sind, dass die 8-Bit-Ausgabe kleiner war. Beide Ausgänge sind 1280x720.

Ich frage mich, warum das so ist.

Hier die MediaInfo:

8 Bit:

Bildrate: 23,976 fps

Farbraum: YUV

Farbunterabtastung: 4:2:0

Bittiefe: 8 Bit

Schreibbibliothek: x265 1.9+54-291beccb6760:[Windows][GCC 5.3.0][64 Bit] 8bit+10bit+12bit

Kodierungseinstellungen: wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=2 / tu-inter-depth=2 / me=3 / subme=3 / merange =57 / rect / amp / max-merge=3 / temporal-mvp / no-early-skip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu -lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=250 / min-keyint=23 / scenecut=40 / rc-lookahead=30 / lookahead -slices=4 / bframes=8 / bframe-bias=0 / b-adapt=2 / ref=4 / limit-refs=2 / limit-modes / weightp / weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=6 / psy-rd=2.00 / rdoq-level=2 / psy-rdoq=1.00 / no-rd-refine / signhide / deblock / sao / no -sao-non-deblock / b-pyramide / cutree / no-intra-refresh / rc=crf / crf=18.0 / qcomp=0.60 / qpmin=0 / qpmax=51 / qpstep=4 / ipratio=1.40 / Verhältnis = 1,30

12bit: Bildrate: 23,976 fps

Farbraum: YUV

Farbunterabtastung: 4:2:0

Bittiefe: 12 Bit

Schreibbibliothek: x265 1.9+194-6d3849d648f0be5a:[Windows][GCC 5.3.0][64 Bit] 12bit: KG7x [x265.ru]

Kodierungseinstellungen: wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=2 / tu-inter-depth=2 / me=3 / subme=3 / merange =57 / rect / amp / max-merge=3 / temporal-mvp / no-early-skip / recursion-skip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=250 / min-keyint=23 / scenecut=40 / rc-lookahead =30 / lookahead-slices=4 / bframes=8 / bframe-bias=0 / b-adapt=2 / ref=4 / limit-refs=2 / limit-modes / weightp / weightb / aq-mode=1 / qg -size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=6 / psy-rd=2.00 / rdoq-level=2 / psy-rdoq=1.00 / no-rd-refine / signhide / deblock =0:0 / sao / no-sao-non-deblock / b-pyramide / cutree / no-intra-refresh / rc=crf / crf=18.0 / qcomp=0.60 / qpmin=0 / qpmax=51 / qpstep=4 / ipratio=1.40 / pbratio=1.30

Warum sollten Sie erwarten, dass die 12-Bit-Version kleiner ist? Höhere Bittiefe = mehr zu speichernde Bits. Jetzt können Sie bestimmte Materialien wie Animationen mit flachen Farben oder sanften Farbverläufen besser komprimieren, gelten jedoch nicht im Allgemeinen.
Ich verstehe auch die Argumentation hier nicht, 8 Bit hat weniger Informationen als 12 Bit, wodurch 12 Bit größer werden, selbst einfache Mathematik kann dies beantworten, ohne den gesamten Codierungs- / Komprimierungsprozess durchlaufen zu müssen
Kann man also davon ausgehen, dass die Komprimierung bei höherem CRF besser funktioniert hätte, und es hängt von Beispielvideos ab, da einige möglicherweise Körnung und einige mehr Bewegung als andere aufweisen, weshalb ich die Komprimierungsalgorithmen nicht effizient und stattdessen nur nutzen konnte kompromittiert die Datengröße für keine offensichtlichen Komprimierungsgewinne?
Ja, Sie gewinnen nichts, wenn Sie eine 8-Bit-Quelle auf 12-Bit erweitern. Ich würde vorschlagen, diese Quelle zu verwenden, um mit dem Encoder herumzuspielen: mango.blender.org
Ich wollte nur klarstellen, dass dies nur für 265 gilt. 264-Videos profitieren von der Biterweiterung. Siehe Diskussion hier
@AdamMannPro: Diese Art von einfacher Mathematik funktioniert nicht für verlustbehaftete Codecs, die sowieso quantisieren, bevor sie Daten an einen Entropiecodierer weitergeben. Siehe meine Antwort. Die Antwort auf die Frage zur Dateigröße hat alles mit dem CRF-Ratensteuerungsverhalten von x265 zu tun und sehr wenig damit, ob 12-Bit-x265 eine bessere, gleiche oder schlechtere Qualität pro Bitrate hat, wenn es zurück in 8-Bit konvertiert wird.

Antworten (1)

crf=18rate-control erzeugt größere Dateien im 12-Bit-Modus. Wenn Sie versuchen, einige Codierungseinstellungen zu finden, die für einige Inhalte gut funktionieren, sollten Sie nicht davon ausgehen, dass das gleiche CRF bei unterschiedlichen Bittiefen gleich ist. (Entweder das gleiche SSIM oder die gleiche visuelle Wahrnehmungsqualität).

Sie haben nichts über Qualität oder Qualität pro Dateigröße gesagt. Vermutlich sehen die größeren Dateien auch etwas besser aus, da 12-Bit x265 ungefähr die gleiche Qualität pro Bitrate hat wie 8-Bit x265. (Ich habe mit 10 vs. 8 getestet, aber nicht mit 12).

CRF ist keine exakte Zielqualitätseinstellung. Wenn Sie also Einstellungen vergleichen möchten, verwenden Sie für beide 2pass mit derselben Bitrate und schauen Sie sich die Qualität an. Verwenden Sie entweder SSIM oder vorzugsweise eine visuelle Inspektion durch Menschen. (Einige Leute pausieren/zoomen gerne, aber tun Sie das nicht einfach . Einige Arten von Artefakten/Verzerrungen sind bei der Wiedergabe des Videos wahrnehmbar, aber viele sind viel weniger wahrnehmbar. Pause/Zoom hilft bei der Überprüfung Ihres visuellen Eindrucks von " Schärfe" / "mehr Details", also finden Sie heraus, was Ihnen diesen Eindruck vermittelt hat, und vielleicht auch andere Dinge, auf die Sie achten müssen, um zu sehen, ob Sie sie beim Abspielen des Videos noch bemerken können.)

Für tatsächliche Codierungen, sobald Sie Einstellungen gefunden haben, die Ihnen gefallen, ist CRF großartig, aber es ist nicht gut, um die Qualität pro Bitrate verschiedener Codierungseinstellungen zu vergleichen.


8-Bit im Vergleich zu 10/12-Bit

Es mag immer noch einige Verbesserungen bei der Komprimierungseffizienz für x265 geben, aber sie sind definitiv kleiner, wenn sie überhaupt existieren. 10 oder 12-Bit sehen vielleicht sogar ein bisschen schlechter aus. Siehe Diskussion auf doom9 , verlinkt von Michael in einem Kommentar. Ich habe die neuesten Diskussionen nicht verfolgt, daher bin ich mir nicht sicher, was der aktuelle Konsens zu 10-Bit x265 für 8-Bit-Video ist. Selbst wenn es einen kleinen Gewinn gibt, ist es die Geschwindigkeitsstrafe möglicherweise nicht wert.

Es ist definitiv nicht annähernd ein Faktor von 12/8, wie einige Kommentatoren basierend auf "einfacher Mathematik" vorschlagen. Ein verlustbehafteter Videocodec wie h.265 ist einer einfachen verlustfreien Komprimierung wie ZIP nicht sehr ähnlich.

x264 profitiert im Allgemeinen davon, im 10-Bit-Modus ausgeführt zu werden, selbst wenn die Originalquelle 8-Bit ist, ebenso wie die endgültige Anzeige (aber auch hier sollten Sie nicht erwarten, dass der gleiche CRF die gleiche Bitrate oder die gleiche Qualität liefert unterschiedlich tief). 8-Bit-h.265 hat Bewegungsvektoren mit höherer Genauigkeit als 8-Bit-h.264, sodass ein Teil der Argumentation nicht auf x265 zutrifft.

Denken Sie daran, dass sowohl h.264 als auch h.265 die Informationen im Video als quantisierte Frequenzbereichskoeffizienten speichern. Mit trellis / rdoq optimiert es sogar die Quantisierung, um mit dem endgültigen Entropie-Codierer (z. B. CABAC in h.264) gut zu komprimieren, sodass die gleiche Anzahl von Bits die gleiche Menge an Informationen darstellen kann, unabhängig davon, ob der Entropie-Codierer 8- hatte Bit- oder 12-Bit-Eingang. 8-Bit ist in gewisser Weise nur ein Speed-Hack.

Mehr Bits bedeutet, dass Sie näher kommen können (kleinerer Fehler), während Sie immer noch einen Fehler haben. Der Encoder hat also mehr Auswahl beim Abwägen von Verzerrung und Bitrate. Dies kann teilweise der Grund dafür sein, dass 10-Bit-x264 weniger unter "Banding" -Artefakten in Gradienten leidet: Es hat mehr Auswahlmöglichkeiten bei der Darstellung des DC-Koeffizienten oder bei kleinen Werten in den AC-Koeffizienten.


Je höher die Eingangsbittiefe (für eine gegebene Ausgangsbitrate), desto mehr Bits muss der Encoder wegwerfen. Viele dieser zusätzlichen Bits sind Nullen, wenn Ihr ursprüngliches Video 8-Bit war. (Die verlustbehaftete Codierung wirft bereits viele Bits weg, z. B. von 12 bpp pro Frame (für YUV 4: 2: 0-Chroma-Sub-Sampling mit 8-Bit-Komponenten) bis hinunter zu 0,15 Bit / Pixel / Frame und sieht immer noch ziemlich nah aus visuell transparent, insbesondere bei hohen Auflösungen, wo der Informationsgehalt eines typischen Videos über mehr Pixel verteilt ist.)

Wenn Sie neu skalieren, wird vermutlich vor der Neuskalierung auf 10 oder 12 Bit gehen, damit die Neuskalierung Pixel mit weniger Informationsverlust mischt. (z. B. kann ein 10-Bit-Wert genau den Durchschnitt von vier 8-Bit-Werten speichern.)