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 影片,您必須提供個人資料或 2 或 3 。 |
-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
- 輸出檔案:2pass_HDR_strobe_scientist_6Mbps-static.webm
- 編碼時間:142 分 30 秒
- 光碟上的檔案大小:51.2MB
示例 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
- 輸出檔案:2pass_HDR_strobe_scientist_18Mbps-static.webm
- 編碼時間:213 分 32 秒
- 光碟上的檔案大小:161MB
示例 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
- 輸出檔案:1080_2pass_HDR_strobe_scientist_18Mbps-static.webm
- 編碼時間:113 分 9 秒
- 光碟上的檔案大小:160MB
使用查詢表格將 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
- 輸出檔案:SDR_strobe_scientist_18Mbps-static.webm
- 編碼時間:124 分 23 秒
- 磁碟上的檔案大小:165 MB
將 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
- 輸出檔案:HLG_HDR_strobe_scientist_18Mbps-static.webm
- 編碼時間:186 分 10 秒
- 磁碟上的檔案大小:165 MB
摘要
輸出檔案的大小不一。輸入時間為 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 檔案,