東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

検証して、ffmpegにおけるH.265エンコードのCRFを31に変更した

ffmpegのドキュメントを読んだ

H.264からH.265にエンコードを変更しました。変更はしたのですが、色々と気になってffmegのドキュメントを読んでみたら、以下のことが書いてありました。

Encode/H.265 – FFmpeg

Choose a CRF. The default is 28, and it should visually correspond to libx264 video at CRF 23, but result in about half the file size. Other than that, CRF works just like in x264.

CRFは28ぐらいでいいんですね。せっかくなので、簡単な検証をしてもう少し突っ込んでCRFの値を決めることにしました。

先に結論

CRFの値を31にしました。

ファイルサイズはソースファイルと比較すると11%と小さくなったし、動画を観るのも全く問題ありませんでした。

ただ、エンコード時間は倍ぐらいになってしまいました。

検証

どんなことを検証するか

検証はCRFの値を変化させることで、エンコード時間、ファイルサイズ、鑑賞に堪えうるかを確認することです。

確認の方法は以下のような感じです。

  • エンコード時間:timeコマンドを使用して、実測値を確認
  • ファイルサイズ:出力されたファイルサイズを測定
  • 鑑賞に堪えうるか:鑑賞に堪えうるかを、実際の動画を観て確認

エンコード対象のファイル

検証には以下のtsファイルを使用しました。

  • 長さ:5分
  • ファイルサイズ:564.3MB
  • 動画の内容:ミュージックステーションのtsファイル。ジャニーズのダンスで動きが激しいもの。(激しいと思っているのは、個人の主観)

CRF:26の場合

time /usr/local/bin/ts2enc265.pl 5min.m2ts crf26.mp4
  • real 12m41.241s
  • user 48m6.922s
  • sys 0m4.008s
  • ファイルサイズ:118.7MB

CRF:28の場合

time /usr/local/bin/ts2enc265.pl 5min.ts crf28.mp4 -q 28
  • real 12m0.199s
  • user 45m25.748s
  • sys 0m3.758s
  • ファイルサイズ:92.4MB

CRF:31の場合

time /usr/local/bin/ts2enc265.pl 5min.ts crf31.mp4 -q 31
  • real 10m57.025s
  • user 41m48.858s
  • sys 0m4.931s
  • ファイルサイズ:64.5MB