動画(の映像部分)をエンコードする際、「1-pass」「2-pass」「VBR」「CRF」などいくつかのモードを選べますが、どれを選べばいいのでしょうか?

Understanding Rate Control Modes (x264, x265, vpx)(英語記事)によれば、使用目的によって選ぶべきモードが異なり、
  • 保存用(HDD・SSD から再生する動画)……CRF でエンコード
  • ストリーミング(YouTube・ニコニコ動画)……2-pass VBR 等でエンコード
とのことです。

英語記事にはその他のモードについても解説されていますので、詳しく知りたい方はどうぞ。

本記事では、保存用に動画をエンコードする場合として、CRF に焦点を当てます。

目次


CRF とは?

CRF(Constant Rate Factor:固定品質)を聞き慣れない方もいらっしゃるかもしれませんが、CRF は「映像を一定のきれいさでエンコードする」モードです。「とてもきれいにしてね」と言えばどんな動画でもとてもきれいにしてくれますし、「まぁまぁきれいにしてね」と言えばどんな動画でもまぁまぁきれいにしてくれます。

映像をきれいにエンコードするのに必要なビットレートは、映像の内容によって異なります。動きの激しい部分、テクスチャーが細かい部分には多くのビットレートが必要です。

CRF は、指定されたきれいさを達成するためにはどのくらいビットレートが必要なのかを自動計算し、激しい部分には多めのビットレート、のほほんとした部分には少なめのビットレートを割り当てます。

裏を返すと、CRF は「どんな動画でも一定のきれいさ」になる反面、「動画によりビットレート(ファイルサイズ)が異なる」ということになります。激しい場面が多い動画はファイルサイズが大きくなり、のほほんとした場面が多い動画はファイルサイズが小さくなります。

CRF と VBR の違い

VBR(ABR)も、激しい部分には多めのビットレート、のほほんとした部分には少なめのビットレートを割り当てるモードです。しかし VBR では、全体の平均ビットレートは指定されたビットレートになるように調整します。

つまり VBR は「どんな動画でも一定のファイルサイズ」(ある程度の調整が入ることがあります)になる反面、「動画によりきれいさは異なる」ということになります。激しい場面が多い動画は汚くなり、のほほんとした場面が多い動画はきれいになります。

VBR には 1-pass と 2-pass がありますが、1-pass VBR ではビットレートの割り当てが割と適当です。2-pass VBR は動画全体を確認してからビットレートの割り当てを行うので、最適な配分を行うことができます。VBR といえば実際には 2-pass VBR でエンコードすることが多いのではないでしょうか。

CRF と 2-pass VBR では、結果的に平均ビットレートが同程度になった場合、映像のきれいさも同程度になります。

CRF は 1-pass ですので、エンコードに要する時間は 2-pass VBR の半分程度で済みます。

(補足)
たまに 2-pass CRF という表現を見ることがありますが、私はまだそれを知りません。2-pass CRF について詳しい方がいらっしゃいましたら、コメントで教えていただけると助かります。

HandBrake で CRF

logoCRF は比較的新しく登場したモードなので、すべてのエンコードソフトで利用できるわけではありません。内部的に x265 を利用しているエンコードソフトで利用でき、例えば、無料ソフトであれば HandBrake で利用できます。

HandBrake は本家サイトからダウンロードしてください。サイトは英語ですが、ソフトは日本語対応しています。2022 年 7 月現在の最新バージョンは 1.5.1 です。日本語版というサイトがありますが、日本語版はバージョンが古いので注意してください。

Launchインストール後に起動し、エンコードしたい元動画を指定します。

エクスプローラーから動画をドラッグ&ドロップすれば OK です。

Videoドロップするとタブが表示されるので、「動画」タブをクリックし、以下の設定にします。
  • 動画エンコーダー ➡ H.265 (x265)
  • フレームレート ➡ Same as source
  • 念のため、固定フレームレートを選択
  • 品質 ➡ 固定品質 24 RF
  • 保存先ファイル ➡ 拡張子を mp4 に変更
動画エンコーダーは H.265 の種類がいくつかありますが、特別な理由が無い限り「H.265 (x265)」が良いです。

フレームレートはいじると映像がぼやけたりするので、「Same as source(元動画と同じ)」にします。

CRF(固定品質)は数値できれいさを指定します。0~51 で指定し、「小さい方がきれい」です。H.265 の場合はデフォルトが 28 です。実質的な最小値は 24 で、それよりも小さくしてもファイルサイズが無駄に大きくなるだけとのことです。一般的な人間では見た目的に 24 未満のきれいさを見分けられないということなのでしょう。

個人的には、いくつかの動画できれいさを試した結果、CRF 24 を使用しています。

保存先ファイルで、デフォルトでは拡張子が .m4v になっています。m4v でも問題はありませんが、mp4 のほうが一般的だと思いますので、拡張子は .mp4 にしたほうが良いかと思います。

設定を終えたら「エンコード開始」ボタンをクリックすると、エンコードできます。

(補足)プリセットについて

画面下の方にプリセットがあり、HandBrake のデフォルトでは Fast になっています。ここをいじると、エンコードのスピードと画質が変わります。

詳しく調べていませんが、HandBrake のデフォルトの Fast か、H.265 のデフォルトの Medium あたりが無難なのではないでしょうか。

プリセットの詳細については x265 本家サイト(英語)に説明があります。

TMPGEnc で CRF

有料ソフトの TMPGEnc Video Mastering Works も CRF でエンコードできます。2022 年 7 月現在の最新版は 7 です。

Format2元動画をドラッグ&ドロップした後、出力フォーマット選択画面で
  • フォーマット別出力 ➡ MP4 ファイル出力
  • 映像ストリーム形式 ➡ H.265/HEVC
  • 映像エンコーダー ➡ x265
を指定します。

Syuturyoku続いて出力設定画面で、
  • フレームレート ➡ (元動画と同じものを指定)
  • レート調整モード ➡ VBR(固定品質)
  • 品質 ➡ 54
を指定します。

フレームレートはデフォルトで元動画と同じものが指定されているはずですが、念のため確認したほうが良いでしょう。

レート調整モードは「VBR(固定品質)」にします。VBR が 2 種類あるので、間違って平均ビットレートを選ばないように注意しましょう。

品質できれいさを指定します。HandBrake と異なり、「大きいほうがきれい」なので注意が必要です。HandBrake と TMPGEnc の数値の対応は以下の計算式で求められます。

[TMPGEnc 7 品質] = 102 - [HandBrake 品質] × 2
[HandBrake 品質] = 51 - [TMPGEnc 7 品質] ÷ 2

HandBrake で 24 に相当するのは TMPGEnc では 54 なので、個人的には 54 を使用しています。

おまけ:H.265 と H.264

H.264 でも CRF モードエンコードができますが、数値が異なるので注意してください。H.265 のデフォルトが 28、H.264 のデフォルトは 23 です。

一般的に、H.265 のほうがきれいでファイルサイズが小さくなりますので、今時はもはや H.264 は使わないかと思います。

H.265 のほうが多少エンコードに時間がかかりますが、私の環境で、フル HD 30 fps の 3 分 11 秒の動画を HandBrake でエンコードした場合の所要時間は、
  • H.265 CRF 24 ➡ 2 分 06 秒
  • H.264 CRF 20 ➡ 1 分 41 秒
となりました。

H.265 のほうが 20% 程度多く時間がかかっていますが、目くじらを立てるほどではないかと思っています。