基本エンコード

動画圧縮の基本

このセクションでは、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 Ompus オーディオを作成するよう FFmpeg に指示します
output.webm 出力ファイル名を指定します。

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

解決策

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

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 は幅広いモバイル デバイスとウェブ デバイスで安全に対応できる解像度とみなされます。

ビットレート(ビットレート)

VP9 では、複数のビットレート モードがサポートされています。

モード
定数量子化関数(Q) 固定量子化子の値を指定できます。ビットレートは一定ではありません
制限品質(CQ) 最高画質を設定できます。品質はビットレート パラメータによって異なる場合があります
可変ビットレート(VBR) ビットレートの制約内での品質とビットレートのバランスを保ちます
定数ビットレート(CBR) 品質にばらつきがある状態でビットレートをほぼ一定にしようとしている

CQ モードは(ライブ ストリーミングではなく)ファイルベースの動画でおすすめします。 CQ モードでは、次の FFmpeg コマンドライン パラメータが使用されます。

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

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

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 には、品質と速度のバランスを取るために次の設定が用意されています。

  • 品質の設定で、エンコーダが動画の圧縮方法を決定します。使用可能なモードが最適で、リアルタイムです。

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

これら 2 種類の設定は、次のコマンドライン パラメータで制御されます。

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

次の FFmpeg コマンドは、品質が「良好」、速度が 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

品質と速度の設定の選択は、解像度と処理能力によって異なります。推奨事項の詳細については、次のセクションをご覧ください。