VOD 建議設定
目的
本節提供執行檔案式編碼 (即非直播) 時的 VP9 編碼設定建議。
這些最佳化建議旨在達成下列目標:
- 在品質和編碼速度之間取得平衡
- 達到合理品質的最低位元率
- 可因應各種內容類型調整設定
這些建議不會:
- 解決直播編碼問題
- 針對特定內容類型 (例如高動作量的運動賽事影片) 進行最佳化
- 根據特定裝置或網路需求調整設定
單一解析度編碼
VP9 支援各種影格大小,從極小的解析度到 4K 皆可。較大的影格大小可提供較高的品質,但需要更多頻寬才能傳送,解碼時也需要更多處理能力。
如果您要建立單一解析度,640x480 是適用於各種網頁和行動裝置的保險選擇。您可以使用下列 FFmpeg 指令列參數,以 750 kbps 建立單一解析度的檔案。
-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%。
影格大小/影格率 | 目標位元率 (隨選視訊,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:建議的隨選影片位元率
在 FFmpeg 中,位元率是由下列指令控管:
FFmpeg | |
---|---|
-b:v <arg> |
設定位元率 (例如 500k) |
-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 個影格 (30 fps 內容為 8 秒)。關鍵影格是自給自足的影片影格,不需依賴任何其他影格即可算繪,但往往比其他影格類型大。在網頁和行動裝置上播放時,主要畫面格之間間隔越大,編碼器就越能選擇最佳的主要畫面格位置,盡可能提高畫質。
在 FFmpeg 中,主要畫面格間距由 -g
指令控制,表示影格數量。如果是 240 個影格,則為 -g 240
。
分塊和執行緒建議
分格會將影片影格分割成多個欄,雖然畫質會稍微降低,但編碼效能會提升。動態磚的寬度必須至少為 256 像素,因此可使用的動態磚數量有限。
視圖塊數量和輸出影格的解析度而定,更多 CPU 執行緒可能會有幫助。一般來說,如果輸出畫面大小非常小,多個執行緒的價值有限。
建議您在各種解析度下使用下列設定,進行分塊和執行緒作業。
車架尺寸 | 圖塊欄數 | 執行緒數量 |
---|---|---|
320x240 | 1 (-tile-columns 0 ) |
1 |
640x360 | 2 (-tile-columns 1 ) |
2 |
640x480 | 2 (-tile-columns 1 ) |
2 |
1280x720 | 4 (-tile-columns 2 ) |
4 |
1920x1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840x2160 | 8 (-tile-columns 3 ) |
8 |
在 FFmpeg 中,圖塊數量由 -tile-columns
參數控制,執行緒數量則由 -threads
控制。舉例來說,640x480 編碼會使用 -tile-columns 1 -threads 2
指令列。
FFmpeg 指令列
綜合上述建議,您可以使用下列 FFmpeg 指令編碼 VP9 內容。
請注意,第一遍和第二遍指令會串連在一起。第二階段指令中的 -y
引數會在 FFmpeg 要求以輸出影片覆寫第一階段統計資料檔案時,回答「Yes」。
另請注意,針對最高 1280x720 的輸出內容進行編碼時,系統會使用 1080p 來源。輸出內容較大時,系統會使用 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 1 \ -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 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-320x240.webm (320x240,21.73 MB)
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 2 \
-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 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x360.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-640x360.webm (640x360,31.53 MB)
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 2 \
-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 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-low.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-640x480-low.webm (640x480,51.18 MB)
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 2 \
-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 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-medium.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-640x480-medium.webm (640x480,69.27 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1280x720-24-30fps.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-1280x720-24-30fps.webm (1280x720,98.2 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2-y tos-1280x720-50-60fps.webm
- 輸入檔案:tears_of_steel_1080p.webm (1920x800,544.88 MB)
- 輸出檔案:tos-1280x720-50-60fps.webm (1280x720,157.1 MB)
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 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-1920x1080-24-30fps.webm (1920x1080,151.51 MB)
1920x1080 (每秒 50 或 60 個影格)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-1920x1080-50-60fps.webm (1920x1080,238.18 MB)
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 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-2560x1440-24-30fps.webm 2560x1440,533.54 MB)
2560x1440 (每秒 50 或 60 個影格)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-2560x1440-50-60fps.webm 2560x1440,664.04 MB)
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 8 \
-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 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-3840x2160-24-30fps.webm 3840x2160,1.03 GB)
3840x2160 (每秒 50 或 60 個影格)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-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 8 \
-quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- 輸入檔案:tearsofsteel_4k.mov (3840x1714,6.76 GB)
- 輸出檔案:tos-3840x2160-50-60fps.webm 3840x2160,1.56 GB)