VP9 HDR-Codierung
High Dynamic Range-Videos (HDR) sind eine veraltete Technologie. Mittlerweile gibt es eine Reihe von Standards, die nach und nach harmonisiert werden.
Ein gepflegtes Bild der HDR-Videoentwicklung findest du im WikiPedia-Artikel High-Dynamic-range video.
FFmpeg kann zusammen mit VP9 verwendet werden, um (1) HDR-Quellen auf Standard-Dynamic-Range-Ausgabe (SDR) zu komprimieren oder (2) eine HDR-Quelle in für das Web geeignete HDR-Formate zu bündeln.
Eingabequellen
Bei der Codierung von HDR mit VP9 können derzeit alle von FFmpeg unterstützten Codebits mit hoher Bittiefe (z. B. VP9 Profil 2 und 3, H.264 (10-Bit), DNxHR, HEVC, ProRes usw.) verwendet werden. Außerdem findest du im YouTube-Supportartikel High Dynamic Range (HDR)-Videos hochladen.
Codierte Ausgabereichweite:
Zu den unterstützten Geräten gehören derzeit alle Geräte, die VP9 Profil 2 decodieren und auf ein HDR-Display übertragen können.
- Chromecast Ultra + HDR-fähiger Fernseher
- Chrome 64 Canary unter Windows 10 Fall Creators Update mit aktiviertem HDR-Flag. (Dies ist ein gutes Debugging-Tool.)
- HDR-Fernseher mit VP9-Profil 2
- Alle HDR-Modelle von Samsung (2017) (Flatpanelshd.com-Liste) und 2016er-Modelle, beginnend mit &KS
- Alle HDR-Modelle von LG 2017 (auch einige LG G6-Modelle von 2016)
- Auf Mobilgeräten, auf denen die beschleunigte VP9-Profilerstellung 2 unterstützt wird, 10-Bit-HDR-Decodierung (Meizu Pro 7)
- UHD Bluray aus dem Jahr 2017
FFmpeg-Befehlszeileneinstellungen zur Aktivierung von VP9 Profile 2 und HDR-OTT
Deine FFmpeg muss mit 10-Bit- oder sogar 12-Bit-Unterstützung ausgestattet sein.
In den folgenden Beispielen verwenden wir eine statisch erstellte ffmpeg
mit 10-Bit-Unterstützung.
Du kannst sie mithilfe unseres Build-Skripts selbst erstellen oder der Anleitung auf der FFmpeg-Website folgen.
Nachfolgend sehen Sie eine verwendbare FFmpeg-Befehlszeile für die HDR-Codierung nach SMPTE 2084 (PQ EOTF) mit VP9:
ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 1 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 /dev/null && \
ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 2 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 \
strobe_scientist_18Mbps.webm
Die hier eingeführten Schlüsselparameter können aufgeschlüsselt werden:
ffmpeg | Der statische Build mit 10-Bit-Unterstützung |
---|---|
-pass 1 |
HDR erfordert eine 2-Pass-Codierung. In diesem Beispiel wird der erste Pass an /dev/null ausgegeben und während des zweiten Passes im Arbeitsspeicher verarbeitet. |
-pix_fmt yuv420p10le |
Legt das YUV-Format 4:2:0 oder ein 10-Bit-Pixel fest |
-color_primaries 9 |
Legt BT2020 fest. Weitere Informationen finden Sie auf Seite 5 und 6 in diesem Dokument. |
-color_trc 16 |
16 legt die Übertragungseigenschaften auf SMPTE 2084 fest. PQ 18 legt Übertragungseigenschaften fest SMPTE 2086 HLG |
-colorspace 9 |
colorspace ist der "Matrix_Koeffizienten." Diese sollte konsistent mit dem Mastering des Contents übereinstimmen. (z.B. bt709, bt2020_ncl). In diesem Beispiel sollte es 9 für bt2020_ncl sein. Weitere Informationen finden Sie auf Seite 12 dieses Dokuments. |
-color_range 1 |
Farbbereich (0 = nicht angegeben, 1 = mpeg/studio/tv, 2 = jpeg/full/pc) |
-profile:v 2 |
Für HDR ist ein Profil oder 2 oder 3 erforderlich. |
-vcodec libvpx-vp9 |
VP9-Encoder verwenden. |
Beispielcodierungen
In den folgenden Beispielen wird die Quelldatei strobe_scientist.mkv verwendet.
Als allgemeiner Hinweis zu Bitraten mit HDR-Codierung wird eine 25–30% höhere Bitrate als eine entsprechende 8-Bit-SDR-Codierung empfohlen. Die Beispiele sind normalerweise auf 18 Mbit/s ausgerichtet. Für gute HDR-Ergebnisse sind 12 Mbit/s Bitraten bei optimaler Feinabstimmung verfügbar.
Die Codierungen wurden auf einem Ubuntu-Linux-System mit den folgenden Spezifikationen durchgeführt:
- Prozessor: 4x Intel(R) Core(TM) i5-6500 CPU mit 3,20 GHz
- Arbeitsspeicher (RAM): 8.060 MB (1.492 MB verwendet)
- Grafik: Intel HD Graphics 530 (Skylake GT2)
- Betriebssystem: Ubuntu 16.04 LTS
In YUV konvertieren 4:2:0 10-Bit-PQ
Beispiel A: 6 Mbit/s 4K 2-Pass
ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -speed 4 -pass 1 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 8000000 -minrate 4000000 \
-profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -pass 2 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 8000000 -minrate 4000000 \
-profile:v 2 -vcodec libvpx-vp9 \
2pass_HDR_strobe_scientist_6Mbps-static.webm
- Ausgabedatei: 2pass_HDR_strobe_scientist_6Mbit-static.webm
- Codierungszeit: 142 m30 s
- Dateigröße auf einem Laufwerk: 51,2 MB
Beispiel B1: 18 Mbit/s 4K 2-Pass
ffmpeg -y -report -i strobe_scientist.mkv -b:v **18000000** -speed 4 -pass 1 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate **20800000** -minrate **15040000** \
-profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate **20800000** -minrate **15040000** \
-profile:v 2 -vcodec libvpx-vp9 \
2pass_HDR_strobe_scientist_18Mbps-static.webm
- Ausgabedatei: 2pass_HDR_strobe_scientist_18 Mbit/s-static.webm
- Codierungszeit: 213m32s
- Dateigröße auf Festplatte: 161 MB
Beispiel B2: 18 Mbit/s 1.080p (2-Pass)
ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -speed 4 -pass 1 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 20800000 -minrate 15040000 \
-profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
-f webm /dev/null && \
ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
-maxrate 20800000 -minrate 15040000 \
-profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
1080_2pass_HDR_strobe_scientist_18Mbps-static.webm
- Ausgabedatei: 1080_2pass_HDR_strobe_scientist_18Mbit-static.webm
- Codierzeit: 113 m9
- Dateigröße auf Festplatte: 160 MB
HDR mithilfe einer Nachverfolgungstabelle (LUT) in SDR konvertieren
Zum Konvertieren von HDR in SDR muss der Transcoder verstehen, wie Helligkeits- und Farbwerte dem kleineren BT.709-Farbraum und anderen Helligkeitsbereich zugeordnet werden. Die besten Ergebnisse erzielen Sie mit einer LUT, in der beschrieben wird, wie die Zuordnung vorgenommen wird, die in der Regel inhaltsspezifisch ist. Die Beispiele C und D zeigen, wie eine LUT verwendet wird. Wir haben bt2020_to_bt709_example.cube verwendet.
Beispiel C: 18 Mbit/s 4K HDR zu SDR mit LUT
ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -speed 4 -pass 1 \
-pix_fmt yuv420p \
-color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
-maxrate 26800000 -minrate 8040000 -profile:v 0 \
-vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
-vcodec libvpx-vp9 -f webm /dev/null && \
ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -pass 2 \
-pix_fmt yuv420p \
-color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
-maxrate 26800000 -minrate 8040000 -profile:v 0 \
-vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
-vcodec libvpx-vp9 -f webm SDR_strobe_scientist_18Mbps-static.webm
- Ausgabedatei: SDR_strobe_scientist_18Mbit-static.webm
- Codierungszeit: 124 m23
- Dateigröße auf Festplatte: 165 MB
HLG in VP9 HLG10 10-Bit PQ konvertieren
Erfordert eine HLG-Quelle. Wir haben die Eingabedatei strobe_scientist_hlg.mkv verwendet.
Beispiel D: 18 Mbit/s 4K 2-Pass-HLG
ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 1 -speed 4 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
-maxrate 26800000 -minrate 8040000 \
-profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 2 \
-pix_fmt yuv420p10le \
-color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
-maxrate 26800000 -minrate 8040000 \
-profile:v 2 -vcodec libvpx-vp9 \
HLG_HDR_strobe_scientist_18Mbps-static.webm
- Ausgabedatei: HLG_HDR_strobe_scientist_18Mbit/s-static.webm
- Codierzeit: 186 m10s
- Dateigröße auf Festplatte: 165 MB
Zusammenfassung
Die Ausgabedateien sind unterschiedlich groß. Die Eingabe betrug 4,3 GB.
Beispiel | Zielausgabe | Größe auf Festplatte | Codieren |
---|---|---|---|
V | 6 Mbit/s 4K nicht skalierter HDR-Wert | 51,2 MB | 142 Mio. |
B1 | 18 Mbit/s 4K-Eskalierung im HDR-Format | 161 | 213m |
B2 | 18 Mbit/s, 1.080 skaliert, HDR | 160MB | 113m |
C | 18 Mbit/s HDR zu SDR | 165 | 124m |
D | 18 Mbit/s HLG-Konvertierung | 165 | 168m |
Beachten Sie, dass die 2-Pass-Codierung für HDR empfohlen wird, da der 1-Pass in bestimmten Konfigurationen variieren kann.
Tools zur Signalisierung von HDR in der WebM- und MP4-Ausgabe (Matroska-Befehlszeilentools)
Zum Zeitpunkt der Erstellung dieses Skripts stellt FFmpeg einen Mechanismus zur Angabe statischer SMPTE-2086-Metadaten in WebM/MKV bereit, der aber von einem Eingabestream übertragen wird, wenn er darin enthalten ist.
Das mkvmerge-Tool, Teil von mkvtoolnix, kann zum Einfügen oder Ändern dieser Metadaten verwendet werden, wenn dies für deine Anwendung erforderlich ist.
Hier siehst du ein Beispiel für das Einfügen von HDR-Metadaten in eine der oben erstellten Dateien. Das Tool ist besonders dafür geeignet, HDR-Inhalte für den Upload auf YouTube vorzubereiten.
mkvmerge \
-o HDR_strobe_scientist_18Mbps.mkv\
--colour-matrix 0:9 \
--colour-range 0:1 \
--colour-transfer-characteristics 0:16 \
--colour-primaries 0:9 \
--max-content-light 0:1000 \
--max-frame-light 0:300 \
--max-luminance 0:1000 \
--min-luminance 0:0.01 \
--chromaticity-coordinates 0:0.68,0.32,0.265,0.690,0.15,0.06 \
--white-colour-coordinates 0:0.3127,0.3290 \
HDR_strobe_scientist_18Mbps.webm
In diesem Beispiel wird die Datei HDR_strobe_scientist_18Mbit.mkv in 0,6 Sekunden erzeugt.