VP9 HDR 編碼

高動態範圍 (HDR) 影片是一種保護技術。目前已有多項漸進式標準

如需 HDR 影片進化的長期示意圖,請參閱 WikiPedia 文章:高動態範圍影片

FFmpeg 可搭配 VP9 使用,可以 (1) 將 HDR 來源壓縮為標準動態範圍 (SDR) 輸出,或 (2) 將 HDR 來源重新封裝為 HDR 網頁格式。

輸入來源

目前,使用 VP9 編碼 HDR 時,可以使用 FFmpeg 支援的任何高深度 (10 位元) 轉碼器做為輸入值 (例如 VP9 Profile 2 和 3、H.264 (10 位元)、DNxHR、HEVC、ProRes 等人)。另請參閱 YouTube 支援文章:上傳高動態範圍 (HDR) 影片

編碼輸出觸及率:

目前通常支援的目標裝置包括任何可將 VP9 設定檔 2 解碼並輸出至 HDR 螢幕的裝置。

  • Chromecast Ultra + 支援 HDR 的電視
  • Chrome 64 Canary 版 (適用於 Windows 10 秋季創作者更新),同時開啟 HDR 標記。(這是一個良好的偵錯工具)。
  • 任何具備 VP9 設定檔 2 的 HDR 電視
    • 所有 Samsung 2017 HDR 型號 (flatpanelshd.com list) 和 2016 年型號的開頭為「KS」
    • 所有 LG 2017 HDR 型號(也有一些 2016 LG G6 型號)
    • 在行動裝置上,支援硬體加速 VP9 設定檔 2 10 位元 HDR 解碼 (Meizu Pro 7) 的裝置
    • UHD 超高畫質 2017 年

FFmpeg 命令行設置以為 VP9 配置文件 2 和 HDR EOTF

您的 FFmpeg 必須建立支援 10 位元 (甚至 12 位元) 的支援。

在以下範例中,我們使用 10 位元支援的靜態建立 ffmpeg。您可以使用我們的建構指令碼自行建立,或遵循 FFmpeg 網站上的指示

如要針對 HDR 編碼以 SMPTE 2084 (PQ EOTF) 標準與 VP9 編碼,以下為可用的 FFmpeg 指令列。

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

細分下列重要參數:

ffmpeg 支援 10 位元的靜態版本
-pass 1 HDR 需要 2 次傳遞編碼。在本範例中,第一張票證會輸出到 /dev/null,並在第二次通過時於記憶體中處理。
-pix_fmt yuv420p10le 設置 YUV 4:2:0 10 位像素格式
-color_primaries 9 設定 BT2020 詳情請參閱本文件第 5 頁和第 6 頁。
-color_trc 16 16 會將轉移特性設為 SMPTE 2084。PQ 18 已設定轉移特性 SMPTE 2086 HLG
-colorspace 9 colorspace 是「blob_coefficients.」這項屬性應與內容建立方式一致。(例如:bt709、bt2020_ncl)。在這個範例中,bt2020_ncl 的值應為 9。詳情請參閱本文件第 12 頁
-color_range 1 色彩範圍 (0 = 未指定,1 = mpeg/studio/tv,2 = jpeg/full/pc)
-profile:v 2 如要輸出 HDR 影片,您必須提供個人資料或 23
-vcodec libvpx-vp9 使用 VP9 編碼器。

編碼範例

以下範例都使用來源檔案 strobe_scientist.mkv

一般而言,使用 HDR 編碼的位元率一般來說,建議比比同等的 8 位元 SDR 編碼高 25-30%。範例通常以 18Mbps 為目標。使用 12Mbps 位元率可達到高動態範圍效果,並能獲得最佳調整。

這些編碼是在 Ubuntu Linux 系統上執行,具有以下規格:

  • 處理器:4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • 記憶體 (RAM):8060MB (已使用 1492 MB)
  • 顯示卡:Intel HD Graphics 530 (Skylake GT2)
  • 作業系統:Ubuntu 16.04 LTS

轉換成 YUV 4:2:0 10 位元 PQ

示例 A:6Mbps 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
示例 B1:18Mbps 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
示例 B2:18Mbps 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

使用查詢表格將 HDR 轉成 SDR 格式 (LUT)

將 HDR 轉換為 SDR 時,轉碼器必須瞭解該如何將亮度和色彩對應至較小的 BT.709 色彩空間和非 HDR 範圍。為獲得最佳結果,可以使用 LUT 來描述如何執行這項對應 (通常是與內容相關的對應)。範例 C 和 D 會示範如何使用 LUT我們使用 bt2020_to_bt709_example.cube

示例 C:18Mbps 4k HDR 到 SDR 帶 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

將 HLG 轉換為 VP9 HLG10 10 位元 PQ

需要 HLG 來源。我們使用輸入檔案 strobe_scientist_hlg.mkv

示例 D:18Mbps 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

摘要

輸出檔案的大小不一。輸入時間為 4.3GB。

範例 目標輸出 磁碟上的大小 編碼時間
A 6 Mbps 4K 無縮放 HDR 51.2MB 142 公尺
B1 18 Mbps 4K 無縮放 HDR 檔案 161MB 213 分
B2 18Mbps 1080 縮放 HDR 160MB 113 公尺
C 18 Mbps HDR 至 SDR 未縮放 165MB 124 公尺
D 18 Mbps HLG 轉換 165MB 168 公尺

請注意,建議使用 HDR 編碼,因為 1-pass 編碼可能因某些設定而異。

要在 WebM 和 MP4 輸出中傳送 HDR 訊號所需的工具 (Matroska 指令列工具)

在撰寫時,FFmpeg 並未提供在 WebM/MKV 中指定 SMPTE 2086 靜態中繼資料的機制,不過它會在串流包含該串流時從輸入串流傳播。

如果應用程式需要這個中繼資料,您可以使用 mkvMerge 工具 (mkvtoolnix) 來插入或修改這個中繼資料。

以下是將 HDR 中繼資料插入到上方建立的其中一個檔案的範例。尤其是準備將 HDR 內容上傳至 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

這個範例會在 0.6 秒內產生 HDR_strobe_scientist_18Mbps.mkv 檔案,