基本エンコード

動画圧縮の基本

このセクションでは、フレームサイズ、基本的なビットレート制御、品質など、VP9 エンコードの基本的なオプションについて説明します。

動画の圧縮を初めて行う場合は、こちらの動画で、動画の圧縮の必要性と仕組みについてご確認ください。

シンプルなエンコード

次の FFmpeg コマンドは、入力ファイルを Opus 音声付きの VP9 動画に変換します。これは、デフォルト設定を使用する最もシンプルなエンコードです。

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

この FFmpeg エンコードでは、次のコマンドライン パラメータを使用します。

FFmpeg
-i <filename> 入力ファイル名を指定します
-c:v libvpx-vp9 FFmpeg に VP9 動画の作成を指示します
-c:a libopus FFmpeg に Opus 音声の作成を指示します。
output.webm 出力ファイル名を指定します

FFmpeg は、使用する出力ファイル名から作成するファイルの種類を推測します。この例では、output.webm を指定したため、FFmpeg は WebM ファイルを出力します。

解決策

すべての動画にはフレーム サイズ(ピクセルの幅と高さを示す)があります。VP9 エンコードの出力動画フレーム サイズを制御するには、次の FFmpeg コマンドライン パラメータを使用できます。

FFmpeg
-vf scale=<width>x<height> フレームの幅と高さ

たとえば、次の FFmpeg コマンドは 640x480 の VP9 WebM 動画を出力します。

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

解像度が小さいと画質は低下しますが、解像度が大きいと帯域幅が広くなり、デコードに必要な処理能力も増え、古いデバイスではサポートされない可能性があります。VP9 の場合、640x480 は幅広いモバイル デバイスとウェブ デバイスで安全な解像度と見なされます。

ビットレート(bit rate)

VP9 は、さまざまなビットレート モードをサポートしています。

モード
定数量子化(Q) 固定量子化値を指定できます。ビットレートは変化します
制約付き品質(CQ) 最大品質レベルを設定できます。ビットレート パラメータ内で品質にばらつきが生じる可能性がある
可変ビットレート(VBR) ビットレートの制約内で、品質とビットレートのバランスを時間とともに調整する
固定ビットレート(CBR) 品質は変化するが、ビットレートをほぼ一定に保とうとする

CQ モードは、ファイルベースの動画(ライブ配信ではない)におすすめです。CQ モードでは、次の FFmpeg コマンドライン パラメータが使用されます。

FFmpeg
-b:v <arg> 目標ビットレートを設定します(例: 500k)
-minrate <arg>
-maxrate <arg>
最小ビットレートと最大ビットレートを設定します。
-crf <arg> 最大品質レベルを設定します。有効な値は 0 ~ 63 です。値が小さいほど品質が高くなります。

たとえば、次の FFmpeg コマンドは、CQ モードを使用して、平均ビットレートが 750 kbps で最大品質が 33 に制限された、中品質の 640x480 動画ファイルを作成します。

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

ビットレートは、実現したい画質と動画の解像度によって異なります。さまざまな解像度でのビットレートに関する推奨事項の完全なセットについては、こちらをご覧ください。

画質と速度の設定

動画の圧縮は、出力の品質と作成にかかる時間のトレードオフです。一般的に、エンコードに時間をかけるほど品質は向上しますが、最高品質を得るために必要な時間が現実的でない場合があります。

VP9 には、品質と速度のバランスを取るための設定がいくつかあります。

  • 品質設定は、動画の圧縮方法をエンコーダに指示します。使用可能なモードは、best、good、realtime です。

  • スレッド設定により、エンコーダは複数の CPU スレッドを使用して動画をエンコードできます。これらの設定により、品質が若干低下する可能性がありますが、エンコードとデコードの速度を大幅に向上させることができます。

これらの 2 種類の設定は、いくつかのコマンドライン パラメータによって制御されます。

FFmpeg
-threads エンコード中に使用するスレッドの数を示します。
-quality goodbestrealtime のいずれかに設定できます。
-speed このパラメータの意味は、品質が good に設定されているか realtime に設定されているかによって異なります。速度設定 0-4 は、goodbest の VoD に適用されます。0 が最高品質で、4 が最低品質です。Realtime の有効な値は 5-8 です。数値が小さいほど品質が高くなります。
-tile-columns タイリングでは、動画が長方形の領域に分割されるため、エンコードとデコードのマルチスレッド処理が可能になります。タイルの数は常に 2 の累乗です。0=1 タイル、1=2、2=4、3=8、4=16、5=32。

次の FFmpeg コマンドは、品質が「good」に設定され、速度が 0(高画質)に設定された 640x480 のファイルを作成します。

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

画質と速度の設定は、解像度と利用可能な処理能力によって異なる場合があります。推奨事項の完全なセットについては、次のセクションをご覧ください。