縦型動画のCRFでファイルサイズはどれだけ変わるか CRF18から38まで実測しました

IT・仕事術

記事内に広告が含まれています。

この記事でわかることをまとめました

結論です。今回の縦型動画10秒をH.264で変換した範囲では、CRF 23の出力を100とした割合は、CRF 18で145.5、CRF 28で69.1、CRF 33で50.4、CRF 38で34.4になりました。CRF 38のファイルは、CRF 23の出力を100として34.4で、約3分の1でした。

縦型動画をH.264で保存し直すときに、CRFを18から38まで変えると、ファイルサイズと変換時間がどれだけ変わるのかを、私が実測しました。

この環境で計測した変換時間の中央値は、CRF 18の6.37秒からCRF 38の5.38秒まで、差は0.99秒でした。

図1:CRFを上げるほど、ファイルサイズはCRF 23の出力より小さくなりました

図1:CRF 23の出力を100とした割合を、CRFごとに比べました。

図1は、CRF 23で変換したファイル(392,953バイト)を100として、各CRFのファイルサイズの割合を棒グラフにしたものです。

使った動画と変換の方法をまとめました

素材は、1080x1920pxの縦型動画です。30fps、10.0秒、300フレーム、H.264、音声なしで、ファイルサイズは937,490バイトです。画面はスライドのような内容で、動きの少ない動画です。

私はこの動画を、ffmpegでCRF 5段階(18・23・28・33・38)に変換しました。

  • コーデックは全てH.264(libx264、preset medium、yuv420p)です。
  • 解像度は1080×1920、フレームレートは30fps、音声なしで、全条件そろえました。
  • 変えたのはCRFだけです。
  • 変換は各条件で3回行い、変換時間は3回の中央値です。
  • ファイルサイズは3回とも同じバイト数でした。表のバイト数はその共通の値です。

フレーム数はffprobeの実カウントです。出力の幅と高さもffprobeで確認し、1080×1920になっていました。

割合は、元の動画(937,490バイト)を100とした値と、CRF 23で変換したファイル(392,953バイト)を100とした値の2種類を、バイト数から直接計算し、小数第1位に丸めました。

5条件のファイルサイズを表にまとめました

条件バイト元の動画を100とした割合CRF 23の出力を100とした割合フレーム数
元の動画937,490100.0–300
CRF 18571,72461.0145.5300
CRF 23392,95341.9100.0300
CRF 28271,44829.069.1300
CRF 33198,21321.150.4300
CRF 38135,21914.434.4300

表の「-」は、該当する値がないことを表しています。「CRF 23の出力を100とした割合」の列は、変換した条件どうしの比較のため、元の動画の値は載せていません。

図2:変換時間の中央値は、CRF 18の6.37秒からCRF 38の5.38秒までの範囲でした

図2:変換時間の中央値(3回)を、CRFごとに比べました。

図2は、各条件で3回変換した時間の中央値を棒グラフにしたものです。変換時間は、この環境での計測です。使う機械が変われば、時間は変わります。

変換時間と静止画のSSIMも表にまとめました

条件変換時間の中央値(秒)3回の変換時間(秒)3秒フレームのSSIM
CRF 186.376.25/7.48/6.370.998564
CRF 235.986.34/5.98/5.810.996919
CRF 285.615.48/5.61/6.100.993891
CRF 335.735.73/5.28/5.820.988944
CRF 385.385.38/5.33/5.600.976999

SSIMは、1に近いほど比べる相手に近いことを表す指標です。今回は、開始3秒のフレーム画像を取り出して、元の動画の3秒のフレームとffmpegのSSIMで比べました。静止画1枚の比較です。

CRFごとに分かったことをまとめました

  • フレーム数は、5条件とも300フレームで変わりませんでした。解像度とフレームレートも全条件で同じで、変わったのはCRFだけです。
  • ファイルサイズは、CRF 23の出力を100とした割合で、CRF 18が145.5、CRF 28が69.1、CRF 33が50.4、CRF 38が34.4でした。
  • CRFを5上げるごとに、CRF 23の出力を100とした割合は145.5から100.0へ、100.0から69.1へ、69.1から50.4へ、50.4から34.4へ下がりました。
  • 変換時間の中央値は、CRF 18で6.37秒、CRF 23で5.98秒、CRF 28で5.61秒、CRF 33で5.73秒、CRF 38で5.38秒でした。CRF 33はCRF 28より長く、CRFを上げるたびに短くなったわけではありません。
  • 最も長いCRF 18と最も短いCRF 38の変換時間の差は0.99秒でした。
  • 3秒時点の静止画のSSIMは、CRF 18で0.998564、CRF 23で0.996919、CRF 28で0.993891、CRF 33で0.988944、CRF 38で0.976999と、CRFを上げるほど小さい値になりました。静止画1枚の比較です。

図3:並べた範囲では、私の目視では違いははっきりとは分かりませんでした

図3:元の動画とCRF 18・CRF 28・CRF 38の出力から、開始3秒のフレームを取り出して並べました。

図3は、元の動画とCRF 18・CRF 28・CRF 38の出力から、開始3秒のフレームを取り出して並べたものです。表示のために、高さ480pxへそろえています。

図3に写っているのは、英語入試・併願カレンダーを紹介するスライドの場面です。

この表示の大きさで並べた範囲では、私の目視では4枚の違いははっきりとは分かりませんでした。違いは、SSIMの数値で比べました。

この実測を読むときの範囲をまとめました

  • 素材は、スライドのような画面が中心の、動きの少ない縦型動画10秒です。動きの多い実写の動画では、ファイルサイズの割合の出方が変わる場合があります。
  • 設定はH.264に固定した比較です。ほかのコーデックでは、ファイルサイズの割合が変わる場合があります。
  • 変換時間はこの環境での計測です。使う機械が変われば、時間は変わります。
  • SSIMは静止画1枚の比較です。動画全体の見え方とは別に読んでください。

今回の範囲では、CRF 38のファイルはCRF 23の出力の約3分の1になりました

今回の縦型動画10秒をH.264で変換した範囲では、CRFを18から38まで上げると、ファイルサイズはCRF 23の出力を100として145.5から34.4まで下がりました。変換時間の中央値は6.37秒から5.38秒で、差は0.99秒でした。

関連する実測記事もあわせて読んでみてください

このブログで実測した記事として、動画コーデックを比べた記事と、解像度を比べた記事と、フレームレートを比べた記事もあります。あわせて読んでみてください。

コメント