FFmpegのプリセット(Preset)設定について調べてみた
FFmpegのH.264エンコード
FFmpegを使用してH.264にエンコードする場合、品質固定モードと、ビットレート固定モードの2つのモードが選択できます。
品質固定モードでエンコードする際は、-presetオプションでプリセットを設定できます。
ffmpeg -i input.ts -c:v libx264 -preset slow -crf 23 -c:a copy output.mp4
プリセット(Preset)とは
プリセットは、エンコード速度と圧縮率を提供するオプションのコレクションです。
プリセットに設定できる値は処理速度の早い順に以下のとおりです。
- ultrafast
- superfast
- veryfast
- faster
- fast
- medium(デフォルト)
- slow
- slower
- veryslow
- placebo(非推奨)
品質固定モードでエンコードする際に、-presetオプションを指定しない場合はmediumプリセットが適用されます。
一定の品質でエンコードする場合は、処理速度の遅いプリセットを選択すると圧縮率があがります。
プリセットの詳細設定
x264バイナリがインストールされている場合は、x264 --fullhelpを実行することで、プリセットで適用される詳細な設定を確認できます。
プリセット別に使用されているオプションを調べた結果は以下の通り。
| Option | ultrafast | superfast | veryfast | faster | fast | medium | slow | slower | veryslow |
|---|---|---|---|---|---|---|---|---|---|
| aq-mode | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| b-adapt | 0 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| bframes | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 8 |
| direct | spatial | spatial | spatial | spatial | spatial | spatial | auto | auto | auto |
| me | dia | dia | hex | hex | hex | hex | umh | umh | umh |
| merange | 16 | 16 | 16 | 16 | 16 | 16 | 16 | 16 | 24 |
| partitions | none | i8x8 i4x4 |
p8x8 b8x8 i8x8 i4x4 |
p8x8 b8x8 i8x8 i4x4 |
p8x8 b8x8 i8x8 i4x4 |
p8x8 b8x8 i8x8 i4x4 |
p8x8 b8x8 i8x8 i4x4 |
all | all |
| rc-lookahead | 40 | 40 | 40 | 20 | 30 | 40 | 50 | 60 | 60 |
| ref | 1 | 1 | 1 | 2 | 2 | 3 | 5 | 8 | 16 |
| scenecut | 0 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 |
| subme | 0 | 1 | 2 | 4 | 6 | 7 | 8 | 9 | 10 |
| trellis | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 2 |
| weightp | 0 | 0 | 0 | 1 | 2 | 2 | 2 | 2 | 2 |
| no-8x8dct | X | ||||||||
| no-cabac | X | ||||||||
| no-deblock | X | ||||||||
| no-mbtree | X | X | X | ||||||
| no-mixed-refs | X | X | X | X | |||||
| no-weightb | X |
プリセットの比較
手持ちの動画をいくつか変換した平均の比較結果は以下の通りです。
(※mediumで変換した際のエンコード時間、ファイルサイズを100として比較)
| 設定 | エンコード時間 | ファイルサイズ |
|---|---|---|
| ultrafast | 22.39 | 358.55 |
| superfast | 31.51 | 123.47 |
| veryfast | 40.02 | 88.89 |
| faster | 65.45 | 95.71 |
| fast | 87.78 | 99.54 |
| medium | 100.00 | 100.00 |
| slow | 139.13 | 98.60 |
| slower | 215.83 | 73.75 |
| veryslow | 465.37 | 69.40 |

ultrafastプリセットはエンコード速度は早いが、ファイルサイズが大きくなるveryslowプリセットはエンコード速度は遅いが、ファイルサイズが小さくなる- エンコード時間とファイルサイズは基本的にトレードオフだが、
veryfast~slowプリセットは動画の種類によってはトレードオフとはならない
今回エンコードした動画ではmediumやslowよりもveryfastのほうがファイルサイズが小さくなりました。
どのプリセット設定が良いか
単純な動画形式の変換であれば、デフォルトのmediumプリセットかエンコード速度とファイルサイズのバランスがよいveryfastプリセットが良いと思われます。
一般的には、エンコードする動画の解像度や種類によって最良のプリセットは異なり、プリセット以外にもcrf値など考慮すべきパラメーターもあるため、エンコード速度や圧縮率、映像品質など要求を満たすプリセットを調べて選択する必要があります。