目的

このセクションでは、ファイルベースのエンコード(ライブではない)を実行する際の 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)の 2 つのバージョンがあります。

ビットレート

オンデマンド視聴用の 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)、1,088(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> ビットレートを設定します(例: 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 パラメータで 1 回目と 2 回目のパスの速度を設定することをおすすめします。これにより、エンコード時間と出力の品質のバランスが取れます。

フレームの高さ 速度(初回パス) 速度(2 回目のパス)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

たとえば、FFmpeg の 1 回目のエンコード文字列に -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
640×480 2(-tile-columns 1 2
1280x720 4(-tile-columns 2 4
1920x1080 4(-tile-columns 2 4
2560x1440 8(-tile-columns 3 8
3840×2160 8(-tile-columns 3 8

FFmpeg では、タイルの数は -tile-columns パラメータで制御され、スレッドの数は -threads で制御されます。たとえば、640x480 エンコードでは、コマンドライン -tile-columns 1 -threads 2 が使用されます。

FFmpeg コマンドライン

上記の推奨事項をまとめると、次の FFmpeg コマンドを使用して VP9 コンテンツをエンコードできます。

1 回目のパスと 2 回目のパスのコマンドは連結されています。2 回目のコマンドの -y 引数は、FFmpeg が 1 回目の統計情報ファイルを動画出力で上書きするかどうかを尋ねたときに「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

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

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

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

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

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

1,920 x 1,080(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

1,920 x 1,080(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

2,560 x 1,440(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

2,560 x 1,440(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

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

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