目的

本節提供在執行檔案型編碼 (即未上線) 時,採用 VP9 編碼設定的建議。

這些建議適用於以下目標:

  • 在品質與編碼速度之間取得平衡
  • 達成合理品質的最低位元率
  • 適合各種內容類型的設定

這些建議不會:

  • 地址即時編碼
  • 針對特定內容類型 (例如高動態運動影片) 進行最佳化調整
  • 配置特定裝置或網路的設定

單一解析度編碼

VP9 支持一系列幀尺寸,包括微小分辨率到 4K。較大的影格大小可提升高畫質,但這類頻寬會需要較多的頻寬來提供內容,而且需要更強大的處理效能才能解碼。

如果您只建立單一解析度,640x480 是一個安全投注機制,適用於各式各樣的網路和行動裝置。下列 FFmpeg 指令列參數可讓您建立解析度為 750kbps 的單一解析度檔案。

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

多重解析度編碼

如果您打算指定多種解析度,或您的傳送網路出現頻寬不足的情況,建議您建立多種解析度。這樣您的播放器就可以控制要向觀眾顯示哪個解析度。

多重解析度影片編碼通常用於自動調整位元率串流,影片播放器會根據使用者的頻寬即時切換解析度。例如,Shaka Player 可讓您播放多重解析度編碼,其中每個 VP9 編碼都是單獨的檔案,而 DASH 資訊清單提供每個編碼的相關資訊。

如要進一步瞭解如何以自動調整串流格式包裝影片,請參閱 Shaka Packager。本指南將著重介紹多種解析度的 VP9 編碼設定。

以下所有設定可用於個別解析度的個別檔案。請注意,640x480 版本有兩種版本:一個是低品質 (LQ),另一種則是中等品質 (MQ)。

位元率

為 VP9 檔案進行隨選檢視時,建議使用壓縮品質 (CQ) 模式。此編碼模式可讓您指定目標平均位元率,同時控制影片的最高品質,以及最小和最大位元率。

下列位元率建議為網頁和行動發布的基準。這些建議可大幅降低位元率,以便滿足消費者網頁和行動裝置發布的需求;請將其視為具有低品質建議,但依然可以達到合理的品質。

以上述範例來說,建議將最小位元率設為目標位元率的 50%,並將最大位元率設為目標的 145%。

畫面大小/影格速率 目標位元率 (VOD、kbps) 最小位元率 (50%) 最大位元率 (145%)
320x240p @ 24,25,30 150 75 218
640x360p @ 24,25,30 276 138 400
640x480p @ 24,25,30 512 (LQ)、750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p @ 24,25,30 1024 512 1485
1280x720p @ 50,60 1800 900 2610
1920x1080p @ 24,25,30 1800 900 2610
1920x1080p @ 50,60 3000 1500 4350
2560x1440p @ 24,25,30 6000 3000 8700
2560x1440p @ 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
3840x2160p @ 50,60 18000 9000 26100

圖 2a:建議的 VOD 位元率

在 FFmpeg 中,您可以透過下列指令來控制位元率:

FFmpeg
-b:v <arg> 設定位元率 (例如 50 萬)
-minrate <arg>
-maxrate <arg>
設定最小和最大位元率。

例如,在編碼 640x480 內容時,您可以使用指令列 -b:v 750k -minrate 375 -maxrate 1088

品質

在 CQ 模式中,您也必須設定最高等級。以檔案形式的 VP9 編碼來說,建議使用下列品質等級:

畫面高度 目標品質 (CQ)
240 37
360 36
480 34 (LQ) 或 33 (MQ)
720 32
1080 31
1440 24
2160 15

在 FFmpeg 中,使用 -crf 指令設定品質。舉例來說,如要將品質設為 33,請使用 -crf 33 指令。

多重票證編碼與編碼速度

檔案型編碼可讓您靈活調整速度。您也可以對相同的內容執行多張票證來提高品質,並為每個票證選擇速度。

在 FFmpeg 中對 VP9 檔案進行編碼時,建議您將 -quality 參數設為 good,然後使用以下的 -speed 參數設定第一個和第二個票證的速度。這在編碼時間與輸出品質之間取得了良好的平衡。

畫面高度 速度 (第一票證) 速度 (第二次通行證)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

例如,FFmpeg 中的第一個傳遞編碼字串可能包含 -quality good -speed 4

主要畫面格間距

建議在主要畫面格之間允許最多 240 個影格 (30fps 內容則為 8 秒)。主要畫面格是自行取景的影格,不會利用任何其他影格來轉譯,但通常比其他頁框類型大。網頁與行動裝置播放時,主要畫面格之間的距離寬鬆,可讓編碼器選擇主要畫面格的最佳放置位置,盡可能提升品質。

在 FFmpeg 中,主要畫面格間距由 -g 指令控制,表示畫格數。如果是 240 影格,這個值就是 -g 240

時序和對話串建議

定時會將影片影格分割成多個資料欄,這樣做會降低品質,但加快編碼效能。圖塊至少必須有 256 像素寬,因此可使用多少圖塊。

視 CPU 數量和輸出框架的解析度而定,使用更多 CPU 執行緒可能會有幫助。一般來說,如果輸出框架的大小很小,則多個執行緒具有有限的值。

建議採用下列設定,以不同解析度進行傾斜和執行緒。

畫面大小 圖塊欄數 執行緒數量
320x240 1 個 (-tile-columns 0) 2
640x360 2 個 (-tile-columns 1) 4
640x480 2 個 (-tile-columns 1) 4
1280x720 4 個 (-tile-columns 2) 8
1920x1080 4 個 (-tile-columns 2) 8
2560x1440 8 個 (-tile-columns 3) 16
3840x2160 8 個 (-tile-columns 3) 16

在 FFmpeg 中,圖塊數量是以 -tile-columns 參數控管,而執行緒數量則是 -threads。舉例來說,640x480 編碼會使用指令列 -tile-columns 2 -threads 4

FFmpeg 指令列

將以上建議合併在一起時,下列 FFmpeg 指令可能會用來對 VP9 內容進行編碼。

請注意,第一個傳遞和第二票證指令會相互連結。第二項指令中的 -y 引數會回答「是」;當 FFmpeg 要求使用輸出影片覆寫第一個傳遞統計資料檔案時。

另請注意,1080p 來源用於編碼目標為 1280x720 的輸出。使用 4K 來源進行更大的輸出。

320x240 (每秒 24、25 或 30 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640x360 (每秒 24、25 或 30 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640x480 (低畫質,每秒 24、25 或 30 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640x480 (中畫質,每秒 24、25 或 30 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280x720 (每秒 24、25 或 30 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280x720 (每秒 50 或 60 個畫格)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920x1080 (每秒 24、25 或 30 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

1920x1080 (每秒 50 或 60 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

2560x1440 (每秒 24、25 或 30 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

2560x1440 (每秒 50 或 60 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840x2160 (每秒 24、25 或 30 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

3840x2160 (每秒 50 或 60 個畫格)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm