ffmpegで動画ファイルをエンコードしよう
先ほど述べたように、サービスとして何を提供するかによって提供する映像の品質が変わってくるため、今回は大まかに2つのケースを考えてみましょう。
ケース1:ビットレートを指定する
映像の視覚的な綺麗さよりも、映像の再生をスムーズにすることが優先されるケースです。ビットレートとは映像の品質を表す指標であり、単位時間あたりに映像データがどれだけのデータ量を持つかを表します(単位はbps)。再生開始までの読み込み時間などを考慮して、提供するサービスに適したビットレートを決定した場合に、ffmpegでそれらの値を指定してエンコードすることができます。以下にその例を示します。
$ ffmpeg -i input.mp4 -c:v libx264 -r 30 -s 1024x576 -b:v 2800k -maxrate 4000k -bufsize 4000k -level 30 -pix_fmt yuv420p -aspect 16:9 -sar 1:1 -c:a aac -b:a 128k chapter3_bitrate.mp4
とても長々としてなんのことかさっぱりかもしれませんが、それぞれの意味合いとしては以下の通りです。
オプション | 意味 |
---|---|
-i input.mp4 | エンコード対象の動画ファイル |
-c:v libx264 | 映像のエンコードに利用するコーデック |
-r 30 | フレームレートを30fpsに設定 |
-s 1024x576 | 解像度を1024x576に設定 |
-b:v 2800k | 映像のビットレートを2800kbpsに設定 |
-maxrate 4000k | 映像の最大ビットレートを4000kbpsに設定 |
-bufsize 4000k | バッファサイズを4000kbpsに設定 |
-level 30 | H.264のプロファイルを設定 |
-pix_fmt yuv420p | 色フォーマットをyuv420pに設定 |
-aspect 16:9 | アスペクト比を16:9に設定 |
-sar 1:1 | サンプルアスペクト比を1:1に設定 |
-c:a aac | 音声のエンコードに利用するコーデック |
-b:a 128k | 音声のビットレートを128kbpsに設定 |
chapter3_bitrate.mp4 | エンコード後のファイル名 |
先ほどのコマンドの意味するところは、解像度1024x576、フレームレート30fps、ビットレート2800kbpsの映像データと、ビットレート128kbpsの音声データをエンコードするということになります。
ケース2:クオリティを指定する
映像の視覚的な綺麗さを重視するケースです。
$ ffmpeg -i input.mp4 -c:v libx264 -r 30 -s 1024x576 -crf 23 -level 30 -pix_fmt yuv420p -aspect 16:9 -sar 1:1 -c:a aac -b:a 128k chapter3_quality.mp4
オプション | 意味 |
---|---|
-i input.mp4 | エンコード対象の動画ファイル |
-c:v libx264 | 映像のエンコードに利用するコーデック |
-r 30 | フレームレートを30fpsに設定 |
-s 1024x576 | 解像度を1024x576に設定 |
-crf 23 | クオリティを23に設定 |
-level 30 | H.264のプロファイルを設定 |
-pix_fmt yuv420p | 色フォーマットをyuv420pに設定 |
-aspect 16:9 | アスペクト比を16:9に設定 |
-sar 1:1 | サンプルアスペクト比を1:1に設定 |
-c:a aac | 音声のエンコードに利用するコーデック |
-b:a 128k | 音声のビットレートを128kbpsに設定 |
chapter3_quality.mp4 | エンコード後のファイル名 |