本節列出各種常見設定檔的 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 影片的建議如下:

  1. CQ 等級為 36 (請參閱圖 2b)
  2. 目標位元率為 276kbps (請參閱圖 2a)
  3. 位元率下限為 138 kbps (目標的 50%)
  4. 位元率上限為 414 kbps (目標的 150%)
  5. 主影格間隔時間上限為 240 秒
  6. 兩次編碼,「中」設定檔

這會為 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 所示。

對於即時編碼,我們也希望盡量提高執行緒數量。運作方式如下:

  1. 允許 VP9 將影片分割為多個直欄 (寬度不得小於 256 像素,且必須是 2 的次方);
  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 影片直播設定如下:

  1. CBR,目標位元率為 386 kbps (請參閱圖 2a)
  2. 2 個圖塊欄 (請參閱圖 2d)
  3. 4 個執行緒 (請參閱圖 2d)
  4. 即時成效
  5. 因替代影格而造成的延遲 (無影格延遲)

這會為 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

DASH/YouTube 的 VP9 直播編碼

WebRTC 編碼