Was ist 8-Bit-Video?
8-Bit-Video speichert jede Farbkomponente jedes Abtastwerts als Ganzzahl mit 8 Bit und bietet damit 256 mögliche Codewerte pro Komponente. Dies ist die einzige Bittiefe von VP8 und den Profilen Constrained Baseline, Main und High von H.264, während ITU-R BT.2100 seine ganzzahligen HDR-Signale mit 10 oder 12 Bit spezifiziert.
So funktioniert 8-Bit-Video
Die Bittiefe ist die Anzahl der Bits, mit denen jede Komponente eines Abtastwerts quantisiert wird. Acht Bit ergeben 256 Codewerte, doch der Signalbereich bestimmt, welche davon Bildinformationen tragen. ITU-R BT.709, der HDTV-Standard, legt Schwarz für Luma und R′G′B′ auf den Codewert 16 und nominelles Spitzenweiß auf 235. Die Farbdifferenzkomponenten sind innerhalb von 16 bis 240 um 128 zentriert, und 0 sowie 255 sind für Zeitreferenzen reserviert; Video mit vollem Wertebereich verwendet stattdessen 0 bis 255. Die Darstellung mit 10 Bit desselben Standards reicht von 64 bis 940, mit vier Stufen für jede Stufe bei 8 Bit. Diese gröbere Abstufung bei 8 Bit erklärt, warum Verläufe unterhalb von 10 Bit pro Komponente sichtbare Bänder zeigen können. Chroma-Subsampling und Wertebereich werden unabhängig von der Bittiefe gewählt: Ein Pixelformat benennt eine Kombination aus Bittiefe und Chroma-Anordnung, ein Codec-Profil begrenzt die Kombinationen, die ein Stream verwenden darf, und der Wertebereich wird normalerweise durch ein separates Tag signalisiert. HDR bildet eine Ausnahme von dieser Wahlfreiheit: BT.2100 definiert ganzzahlige PQ- und HLG-Signale nur mit 10 oder 12 Bit.
Wichtige Fakten
- Ob ein Codewert mit 8 Bit Schwarz, Weiß oder keines von beiden bedeutet, hängt vom Signalbereich ab. Im begrenzten Wertebereich (TV oder MPEG) liegt Luma-Schwarz bei 16 und nominelles Weiß bei 235, mit Farbdifferenzwerten von 16 bis 240; im vollen Wertebereich (PC oder JPEG) reicht die Skala von 0 bis 255. Wird Video mit begrenztem Wertebereich als Video mit vollem Wertebereich gelesen, verliert es Kontrast, da Schwarz und Weiß bei 16 und 235 statt bei 0 und 255 liegen. Halten Sie daher das Wertebereichs-Tag bei jeder Konvertierung mit den Abtastwerten konsistent und aktualisieren Sie es, sobald eine Konvertierung den Wertebereich ändert. YouTube konvertiert beispielsweise Uploads mit vollem Wertebereich in den begrenzten Wertebereich.
- Ein Codec-Profil begrenzt die Bittiefen und Chroma-Formate, die ein Stream verwenden darf. H.264 Constrained Baseline, Main und High, HEVC Main, VP9 Profile 0 sowie VP8 sind auf 8 Bit mit Chroma 4:2:0 beschränkt (H.264 High erlaubt auch monochrome Bilder). Die beiden Videocodecs, die jeder WebRTC-Browser implementieren muss, VP8 und H.264 Constrained Baseline, unterstützen somit nur 8 Bit. Für 10 Bit mit 4:2:0 ist ein höheres Profil wie H.264 High 10, HEVC Main 10 oder VP9 Profile 2 erforderlich. Für 8 Bit mit 4:2:2 oder 4:4:4 sind Profile wie H.264 High 4:2:2, H.264 High 4:4:4 Predictive oder VP9 Profile 1 erforderlich. H.264 High 10 und HEVC Main 10 erlauben auch Video mit 8 Bit. Ein Profilname allein legt die Bittiefe daher nicht fest.
- Transkodieren allein garantiert keine Ausgabe mit 8 Bit und 4:2:0. Der Encoding-Leitfaden von FFmpeg für H.264 warnt, dass die Ausgabe je nach Quelle ein Pixelformat verwenden kann, das QuickTime und die meisten anderen Player nicht abspielen können, und empfiehlt,
yuv420pexplizit anzufordern. In der Benennung von FFmpeg stehtyuv420pfür 8 Bit mit 4:2:0, undyuv420p10leist das Gegenstück mit 10 Bit. Prüfen Sie daher das Pixelformat sowohl der Quelle als auch der Ausgabe. Ein Pixelformat beschreibt nicht die Übertragungsfunktion. FFmpeg dokumentiert Tone-Mapping zwischen Dynamikbereichen als separaten Filter namenstonemap. Die Anforderung vonyuv420pmacht eine PQ- oder HLG-Quelle daher nicht zu SDR. - Die Reduzierung von Material mit höherer Bittiefe auf 8 Bit kann in nahezu gleichförmigen Bildbereichen Banding verursachen, und Dithering ist keine garantierte Lösung. Der Filter
zscalevon FFmpeg bietet geordnetes, zufälliges und fehlerdiffusionsbasiertes Dithering, wendet standardmäßig aber keines davon an. FFmpeg dokumentiert seinen Debanding-Filtergradfunausschließlich für die Wiedergabe, da verlustbehaftete Kompression das Dithering tendenziell entfernt und die Bänder wieder sichtbar macht.
Wann 8-Bit-Video relevant ist
Wählen Sie eine Ausgabe mit 8 Bit für die Auslieferung mit Standarddynamikbereich, die auf möglichst vielen Browsern und Playern abspielbar sein muss. Fordern Sie das Pixelformat explizit an, da ein Encoder sonst ein Quellformat mit höherer Bittiefe oder 4:2:2 beibehalten kann. Bittiefe ist nicht Dynamikbereich: Eine Quelle mit 10 Bit ist nicht zwangsläufig HDR, und die Reduzierung einer HDR-Quelle auf ein Pixelformat mit 8 Bit konvertiert sie allein noch nicht zu SDR. Planen Sie für die HDR-Auslieferung mindestens 10 Bit zusammen mit einer PQ- oder HLG-Übertragungsfunktion ein. Untersuchen Sie zuerst nahezu gleichförmige Bildbereiche und weiche Verläufe, wenn Sie ein Encoding mit 8 Bit auf Banding prüfen.
So hilft Transloadit bei 8-Bit-Video
Der Robot /video/encode von Transloadit übergibt die Optionen seines Parameters ffmpeg an FFmpeg. Diese Optionen haben Vorrang vor der gewählten Voreinstellung. So kann eine Assembly explizit eine Ausgabe mit 8 Bit und 4:2:0 anfordern, beispielsweise indem pix_fmt auf yuv420p gesetzt wird, statt sich auf die Quelle oder die Voreinstellung zu verlassen.
Die Tabellen der Voreinstellungen führen Container, Codecs, Bitraten und Auflösung auf, aber kein Pixelformat. Bestätigen Sie daher die Bittiefe einer codierten Datei durch eine Untersuchung der Datei.
Quellen
- Empfehlung ITU-R BT.709-6: Parameterwerte für die HDTV-Standards (PDF)
- Empfehlung ITU-R BT.2100-3: Bildparameterwerte für Fernsehen mit hohem Dynamikbereich (PDF)
- MDN: Leitfaden zu Web-Videocodecs
- WebM Project: Encoding-Profile für VP9
- RFC 7742: Anforderungen an Videoverarbeitung und Codecs in WebRTC
- FFmpeg-Wiki: Leitfaden zum Video-Encoding mit H.264
- FFmpeg-Filterdokumentation (scale, zscale, gradfun, tonemap)
- Quellcode von FFmpeg n7.1: Pixelformatdefinitionen in libavutil/pixfmt.h
- YouTube-Hilfe: Empfohlene Encoding-Einstellungen für Uploads
- YouTube-Hilfe: Videos mit hohem Dynamikbereich (HDR) hochladen