YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-03-20 (水)


[一語一絵/IT系]

x264のCRF / 2014-08-26 (火)

完成形に達したと思っていたffmpegによるmp4エンコードだが、今頃なってbオプションで指定した5Mbpsに遠く及ばない1~2Mbps程度になっている事に気付いた。

CRF1280x720p720x480p
rate
(kbps)
Size
(MB)
Time(s)rate
(kbps)
Size
(MB)
Time(s)
15796684645386041210
16734977629341937204
17663970605303233199
18582661576269329189
19510054552239926184
20447047527214224180
21392342504191521173
22345337487171519170
23305133465154117164
24270929452138816160
25241526436125214158

なんてこったい。Intel Media SDKどころの話では無く、我ながらうっかりにも程があるというものだ。

改めて調べてみると[External]x264の場合、ビットレートはCRF(Constant Rate Factor)によってコントロールするのが筋で、bオプションは無効らしい。

突然CRFと言われても現状 /usr/local/share/ffmpeg/libx264-hq.ffpreset"25" に設定されていた事以外はよくわからなかったものの、ググったところ0~51の設定範囲のほぼ中間値だが品質指標としては比較的低いという事なので、1~2Mbps程度になってしまったようだ。

実用的には20~22が良さそうだというのも同時に察しが付いたが、折角の機会なので自力で検証してみる事にして、85秒の動画(地デジフルHD1440x1080、MPEG2TSで260MB)をMP4エンコード(1280x720と720x480)でCRF値を15~25まで変えながら、エンコードした平均を表にしてみた。

なお、動作環境が[External]Xeon E3-1275 (8M Cache, 3.40 GHz)@gt110b[External]Core i3-2120 (3M Cache, 3.30 GHz)@ML110G7での各10回ずつ廻した結果(各CRFで合計20回)。動作クロックは大差無い事から処理時間もさほど変わらなかったのだが、別プロセスの負荷やストレージデバイスの反応速度などの差分もあるのであくまでも処理時間は参考程度で。

当然、品質(ビットレート)に比例して処理時間は長くファイルは大きくなるのが落とし処として難しいところなのだが、バランス的には20~22あたりが良さそうな雰囲気かな。

CRF20でエンコードした例

ちなみに、MediaEspressoでは1280x720サイズが6Mbpsで63MB、4Mbpsで42MB。QSVのおかげで処理時間はわずか6秒の爆速だが、じっくり見ると[External]x264とは違って破綻が良く見られるのが残念。

【参照】
●もにっき http://tutinoko.org/blog/
x264のcrf値はどれくらいが適切なのか? 2010年12月25日
●いろいろwiki@princo.org http://wiki.princo.org/
x264エンコーディングで固定品質(qp,crf)の設定値を比較 2010年12月25日