FFmpegのプリセット(Preset)設定について調べてみた

toc目次

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プリセットはエンコード速度は遅いが、ファイルサイズが小さくなる
  • エンコード時間とファイルサイズは基本的にトレードオフだが、veryfastslowプリセットは動画の種類によってはトレードオフとはならない

今回エンコードした動画ではmediumslowよりもveryfastのほうがファイルサイズが小さくなりました。

どのプリセット設定が良いか

単純な動画形式の変換であれば、デフォルトのmediumプリセットかエンコード速度とファイルサイズのバランスがよいveryfastプリセットが良いと思われます。

一般的には、エンコードする動画の解像度や種類によって最良のプリセットは異なり、プリセット以外にもcrf値など考慮すべきパラメーターもあるため、エンコード速度や圧縮率、映像品質など要求を満たすプリセットを調べて選択する必要があります。

参考