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値など考慮すべきパラメーターもあるため、エンコード速度や圧縮率、映像品質など要求を満たすプリセットを調べて選択する必要があります。