建議的設定
本節列出各種常見設定檔的 VP9 編碼建議:
- 針對網頁和行動裝置高度最佳化的影片 (VOD)
- 優質內容發布 (VOD)
- 運動、動畫、10 位元內容 (VOD)
- 即時編碼
- WebRTC
簡介
編碼影片時,請注意下列事項:
- 您要建立單一媒體版本,還是多個不同位元率和解析度的版本?
- 你要建立直播影片串流,還是隨選影片檔案?
- 您要編碼的媒體類型為何?是否包含大量動作?詳細說明? 動畫?
- 您是為了追求最高品質 (例如付費內容) 還是速度 (例如網路會議) 而編碼?
本節會先介紹基本隨選視訊檔案的設定,然後針對上述所有問題提供建議。
基本設定
編碼位元率
建議您將下列位元率做為網頁和行動裝置發布的基準。這些建議會盡量降低位元率,同時確保影片畫質適合在網路和行動裝置上發布。您可以將這些建議視為「低」位元率建議,但仍可達到合理的畫質。
建議目標位元率
影格大小/速率 | 平均位元率 (隨選視訊,kbps) | 平均位元率 (直播,Kbps) |
---|---|---|
320x240p @ 24、25、30 | 150 | 250 |
640x360p @ 24、25、30 | 276 | 386 |
640x480p @ 24、25、30 | 512 (LQ)、750 (MQ) | 720 (LQ)、1024 (MQ) |
1280x720p @ 24、25、30 | 1024 | 1440 |
1280x720p @ 50、60 | 1800 | 2500 |
1920x1080p @ 24、25、30 | 1800 | 2500 |
1920x1080p @ 50、60 | 3000 | 4200 |
2560x1440p @ 24、25、30 | 6000 | 8400 |
2560x1440p @ 50、60 | 9000 | 12600 |
3840x2160p @ 24、25、30 | 12000 | 16800 |
3840x2160p @ 50,60 | 18000 | 25200 |
圖 2a:目標位元率
VOD 編碼設定
大部分類型內容的設定
對於大多數內容類型,我們建議使用受限品質 (CQ) 模式,並設定位元率上限。大多數影片會混合呈現高動作場景 (例如動作序列) 和細節較少的場景 (例如對話)。CQ 模式可讓編碼器在較長、較簡單的場景中維持合理的品質等級 (不會浪費位元),同時為困難的序列分配更多位元。
此外,我們也建議將位元率範圍設為目標的 50% 到 150%,並使用下表所示的品質值。這個模式需要兩次編碼,建議使用以下較快的設定 (適用於 HD 以上的影片)。
CQ 編碼的編碼器設定
畫格高度 | 目標品質 (CQ) | 編碼模式 |
---|---|---|
240 | 37 | TWO_PASS_MEDIUM |
360 | 36 | TWO_PASS_MEDIUM |
480 | 34 (低品質) 或 33 (中等品質) | TWO_PASS_MEDIUM |
720 | 32 | TWO_PASS_FAST |
1080 | 31 | TWO_PASS_FAST |
1440 | 24 | TWO_PASS_FAST |
2160 | 15 | TWO_PASS_FAST |
圖 2b:建議的 CQ 設定
最後,我們建議在影格之間加入 240 個影格 (如果是 30 fps 的內容,這相當於 8 秒)。影格是自給自足的視訊影格,不需依賴任何其他影格即可算繪 (如需詳細說明,請參閱 GOP 結構)。對於網頁和行動裝置播放,我們允許在關鍵影格之間有較大的間距,因為這樣編碼器就能選擇「最佳」的關鍵影格位置,盡可能提高品質。
指令列參數範例:640x360 影片
根據上表,360p 影片的建議如下:
- CQ 等級為 36 (請參閱圖 2b)
- 目標位元率為 276kbps (請參閱圖 2a)
- 位元率下限為 138 kbps (目標的 50%)
- 位元率上限為 414 kbps (目標的 150%)
- 主影格間隔時間上限為 240 秒
- 兩次編碼,「中」設定檔
這會為 libvpx 和 FFmpeg 提供下列指令列參數:
libvpx
--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
--maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
進階內容設定
在上述範例中,我們使用相當快速的編碼設定,有效率地建立影片串流。不過,對於某些內容 (例如付費電影),花更多時間編碼以獲得更高品質的輸出結果是值得的。
如果是優質內容,建議採用與上述相同的設定,但使用不同的預設值,指示編碼器花費更多時間來提升品質:
優質內容編碼模式和指令列參數
畫格高度 | 編碼模式 | libvpx | FFmpeg |
---|---|---|---|
240 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
360 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
480 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
720 | TWO_PASS_SLOW |
--good --cpu-used 1 |
-good -speed 1 |
1080 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
1440 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
2160 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
圖 2c:付費內容編碼模式
運動、高動作內容設定
建議體育內容採用 VBR 編碼。運動賽事通常有相當一致的高動作和複雜度,而使用 VBR 在動作較少的期間,可達到比 QP 編碼更高的品質。
如果是使用指令列,QP 模式和 VBR 模式的主要差異在於您不會指定 CQ 等級;否則,建議設定相同。
VBR 指令列參數範例:640x360 影片
libvpx
--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
--kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
動畫和遊戲設定
雜訊 / 低品質內容設定
如果是雜訊內容,建議增加替代參照影格的數量和強度。替代參照影格是「隱形」影格,不會向使用者顯示,但會在建立最終影格時做為參照 (詳情請參閱這篇文章)。
建議使用下列參數,指示 VP9 使用更多替代參照影格:
libvpx
--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3
FFmpeg
10 位元/HDR 編碼
如要使用 10 位元編碼,請使用 VP9 Profile 2。10 位元編碼不需要更多位元,因此其餘參數相同:
libvpx
--profile=2
FFmpeg
-profile 2
直播編碼設定
直播
即時編碼通常會以 CBR 進行,這會限制編碼器盡可能提高品質的能力。因此,我們會使用較高的位元率,如圖 2a 所示。
對於即時編碼,我們也希望盡量提高執行緒數量。運作方式如下:
- 允許 VP9 將影片分割為多個直欄 (寬度不得小於 256 像素,且必須是 2 的次方);
- 指示 VP9 使用更多 CPU 運算能力。下表列出各解析度的建議值。
分塊和執行緒建議
CQ 編碼的編碼器設定
車架尺寸 | 圖塊欄數 | 執行緒數量 |
---|---|---|
320x240 | 1 | 2 |
640x360 | 2 | 4 |
640x480 | 2 | 4 |
1280x720 | 4 | 8 |
1920x1080 | 4 | 8 |
2560x1440 | 8 | 16 |
3840x2160 | 8 | 16 |
圖 2d. 建議用於即時編碼的切片和執行緒
即時編碼也會將截止時間設為「即時」,確保效能,並指示替代參照影格不要查看未來 (這會導致延遲):
因此,建議的 360p 影片直播設定如下:
- CBR,目標位元率為 386 kbps (請參閱圖 2a)
- 2 個圖塊欄 (請參閱圖 2d)
- 4 個執行緒 (請參閱圖 2d)
- 即時成效
- 因替代影格而造成的延遲 (無影格延遲)
這會為 libvpx 和 FFmpeg 提供下列指令列參數:
libvpx
--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0
FFmpeg
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
-minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm