基本エンコード
動画圧縮の基本
このセクションでは、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 |
good 、best 、realtime のいずれかを設定できます。 |
-speed |
このパラメータは、品質が good と realtime のどちらに設定されているかによって意味が異なります。速度設定 0-4 は good と best の 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
品質と速度の設定の選択は、解像度と処理能力によって異なります。推奨事項の詳細については、次のセクションをご覧ください。