目的

このセクションでは、ファイルベースのエンコード(ライブではない)を実行する際の 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)1088(MQ)
1280x720p、24、25、30 1024 512 1485
1280x720p、50,60 1,800 900 2610
1920x1080p(24,25,30) 1,800 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 に設定し、次の表に従って最初と 2 回目のパスの速度を -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 2
640x360 2(-tile-columns 1 4
640×480 2(-tile-columns 1 4
1280×720 4(-tile-columns 2 8
1920×1080 4(-tile-columns 2 8
2560x1440 8(-tile-columns 3 16
3840×2160 8(-tile-columns 3 16

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

FFmpeg コマンドライン

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

最初のパスと 2 番目のパスのコマンドは連結されています。2 番目のパスのコマンドの -y 引数は、「〇」で、FFmpeg が最初のパスの統計情報ファイルを出力動画で上書きするよう要求するときに応答します。

また、出力を 1280x720 までエンコードするエンコードにも 1080p のソースが使用されます。大きな出力には 4K ソースが使用されます。

320×240(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

1, 280x720(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

1,280x720(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

1,920x1,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 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

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