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
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
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

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

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

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.