Encoding HDR VP9
Video Rentang Dinamis Tinggi (HDR) adalah teknologi yang terus berkembang. Saat ini ada sejumlah standar yang secara bertahap diselaraskan.
Untuk melihat perkembangan video HDR yang berkelanjutan, lihat artikel Wikipedia Video rentang dinamis tinggi.
FFmpeg dapat digunakan bersama dengan VP9 untuk (1) mengompresi sumber HDR ke output Standard Dynamic Range (SDR) atau (2) mengemas ulang sumber HDR ke dalam format yang kompatibel dengan web HDR.
Sumber input
Saat ini, saat mengenkode HDR dengan VP9, codec kedalaman bit tinggi (10-bit) apa pun yang didukung oleh FFmpeg dapat digunakan sebagai input (misalnya, VP9 Profil 2 dan 3, H.264 (10-bit), DNxHR, HEVC, ProRes, dll.). Lihat juga artikel dukungan YouTube Mengupload video Rentang Dinamis Tinggi (HDR).
Jangkauan output yang dienkode:
Saat ini dan secara umum, perangkat target yang didukung mencakup perangkat apa pun yang dapat mendekode VP9 Profil 2 dan menghasilkan output ke layar HDR.
- Chromecast Ultra + TV yang kompatibel dengan HDR
- Chrome 64 Canary di Windows 10 Fall Creators Update, dengan tombol HDR diaktifkan. (Ini adalah alat proses debug yang bagus).
- TV HDR apa pun dengan VP9 Profile 2
- Semua model HDR Samsung 2017 (daftar flatpanelshd.com) dan model 2016 yang diawali dengan "KS"
- Semua model HDR LG 2017 (juga beberapa model LG G6 2016)
- Di perangkat seluler, perangkat yang mendukung decoding HDR 10-bit VP9 Profil 2 yang dipercepat hardware (Meizu Pro 7)
- Blu-ray UHD dari tahun 2017
Setelan command line FFmpeg untuk mengaktifkan VP9 Profile 2 dan EOTF HDR
FFmpeg Anda harus dibuat dengan dukungan 10-bit (atau bahkan 12-bit).
Dalam contoh di bawah, kita menggunakan ffmpeg
yang dibuat secara statis dengan dukungan 10-bit.
Anda dapat menggunakan skrip build kami
untuk membuatnya sendiri, atau mengikuti
panduan di situs FFmpeg.
Berikut adalah command line FFmpeg yang dapat digunakan untuk encoding HDR ke standar SMPTE 2084 (PQ EOTF) dengan 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
Berikut parameter utama yang diperkenalkan di sini:
ffmpeg | Build statis dengan dukungan 10-bit |
---|---|
-pass 1 |
HDR memerlukan encoding 2-pass. Dalam contoh ini, lintasan pertama dikeluarkan ke /dev/null dan diproses dalam memori selama lintasan kedua. |
-pix_fmt yuv420p10le |
Menetapkan format piksel YUV 4:2:0 10-bit |
-color_primaries 9 |
Set BT2020 Lihat halaman 5 dan 6 dokumen ini untuk mengetahui detail selengkapnya. |
-color_trc 16 |
16 menetapkan Karakteristik Transfer ke SMPTE 2084. PQ 18 menetapkan Transfer Characteristics SMPTE 2086 HLG |
-colorspace 9 |
colorspace adalah "matrix_coefficients". Setelan ini harus ditetapkan secara konsisten dengan cara konten dikuasai. (misalnya, bt709, bt2020_ncl). Dalam contoh ini, nilainya harus 9 untuk bt2020_ncl. Untuk referensi lebih lanjut, lihat halaman 12 dokumen ini |
-color_range 1 |
Rentang warna (0 = tidak ditentukan, 1 = mpeg/studio/tv, 2 = jpeg/full/pc) |
-profile:v 2 |
Untuk HDR, profil atau 2 atau 3 diperlukan. |
-vcodec libvpx-vp9 |
Gunakan encoder VP9. |
Contoh encoding
Semua contoh berikut menggunakan file sumber strobe_scientist.mkv
Sebagai catatan umum tentang kecepatan bit dengan encoding HDR, kecepatan bit yang 25-30% lebih tinggi daripada encoding SDR 8-bit yang setara direkomendasikan. Contoh biasanya menargetkan 18 Mbps. Hasil HDR yang baik dapat dicapai dengan kecepatan bit 12 Mbps dengan penyesuaian yang optimal.
Encoding dilakukan pada sistem Ubuntu Linux dengan spesifikasi berikut:
- Prosesor: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
- Memori (RAM): 8060 MB (1492 MB digunakan)
- Grafis: Intel HD Graphics 530 (Skylake GT2)
- OS: Ubuntu 16.04 LTS
Konversi ke YUV 4:2:0 10-bit PQ
Contoh A: 6 Mbps 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
- File output: 2pass_HDR_strobe_scientist_6Mbps-static.webm
- Waktu encoding: 142 menit 30 detik
- Ukuran file di disk: 51,2 MB
Contoh B1: 18 Mbps 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
- File output: 2pass_HDR_strobe_scientist_18Mbps-static.webm
- Waktu encoding: 213m32d
- Ukuran file pada disk: 161 MB
Contoh B2: 18 Mbps 1080p 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
- File output: 1080_2pass_HDR_strobe_scientist_18Mbps-static.webm
- Waktu encoding: 113 mnt 9 dtk
- Ukuran file di disk: 160 MB
Mengonversi HDR ke SDR dengan tabel pencarian (LUT)
Mengonversi HDR ke SDR mengharuskan transkoder memahami cara memetakan tingkat kecerahan dan warna ke ruang warna BT.709 yang lebih kecil dan rentang kecerahan non-HDR. Untuk hasil terbaik, LUT yang menjelaskan cara melakukan pemetaan tersebut -- biasanya khusus untuk konten -- dapat digunakan. Contoh C dan D menunjukkan cara menggunakan LUT. Kami menggunakan bt2020_to_bt709_example.cube
Contoh C: 18 Mbps 4K HDR ke SDR dengan 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
- File output: SDR_strobe_scientist_18Mbps-static.webm
- Waktu encoding: 124m23d
- Ukuran file di disk: 165 MB
Mengonversi HLG ke VP9 HLG10 10-bit PQ
Memerlukan sumber HLG. Kami menggunakan file input strobe_scientist_hlg.mkv
Contoh D: 18 Mbps 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
- File output: HLG_HDR_strobe_scientist_18Mbps-static.webm
- Waktu encoding: 186 menit 10 detik
- Ukuran file di disk: 165 MB
Ringkasan
File output memiliki ukuran yang bervariasi. Inputnya adalah 4,3 GB.
Contoh | Output Target | Ukuran pada Disk | Waktu Encoding |
---|---|---|---|
A | 6 Mbps 4K HDR Tanpa Penskalaan | 51,2 MB | 142m |
B1 | HDR tanpa skala 4K 18 Mbps | 161MB | 213m |
B2 | HDR yang diskalakan 1080p 18 Mbps | 160MB | 113m |
C | HDR 18 Mbps ke SDR tanpa penskalaan | 165MB | 124m |
D | Konversi HLG 18 Mbps | 165MB | 168m |
Perhatikan bahwa encoding 2-pass direkomendasikan untuk HDR, karena 1-pass dapat bervariasi dalam konfigurasi tertentu.
Alat yang diperlukan untuk menandai HDR dalam output WebM dan MP4 (alat command line Matroska)
Pada saat penulisan, FFmpeg tidak menyediakan mekanisme untuk menentukan metadata statis SMPTE 2086 dalam WebM/MKV, meskipun akan menyebarkannya dari aliran input jika aliran tersebut memuatnya.
Alat mkvmerge, bagian dari mkvtoolnix, dapat digunakan untuk menyisipkan atau mengubah metadata ini jika aplikasi Anda memerlukannya.
Berikut adalah contoh penyisipan metadata HDR ke dalam salah satu file yang dibuat di atas. Program ini sangat cocok untuk menyiapkan konten HDR untuk diupload ke YouTube.
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
Contoh ini menghasilkan file HDR_strobe_scientist_18Mbps.mkv, dalam 0,6 detik.