動画(の映像部分)をエンコードする際、「1-pass」「2-pass」「VBR」「CRF」などいくつかのモードを選べますが、どれを選べばいいのでしょうか?
Understanding Rate Control Modes (x264, x265, vpx)(英語記事)によれば、使用目的によって選ぶべきモードが異なり、
- 保存用(HDD・SSD から再生する動画)……CRF でエンコード
- ストリーミング(YouTube・ニコニコ動画などのサーバー側)……2-pass VBR 等でエンコード
とのことです。
YouTube などにアップロードする際はサーバー側で再エンコードされますので、アップロード前の動画は CRF でエンコードしてあっても問題なく、結局のところ、個人でエンコードする場合はすべて CRF でエンコードすれば問題ないでしょう。
英語記事にはその他のモードについても解説されていますので、詳しく知りたい方はどうぞ。
本記事では、保存用に動画をエンコードする場合として、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 の半分程度で済みます。
まとめると、保存用動画を CRF でエンコードするメリットは、
- いろんな動画をきれいにエンコードできる
- VBR の半分の時間でエンコードできる
となります。
(補足)たまに 2-pass CRF という表現を見ることがありますが、私はまだそれを知りません。2-pass CRF について詳しい方がいらっしゃいましたら、コメントで教えていただけると助かります。
HandBrake で CRF
CRF は比較的新しく登場したモードなので、すべてのエンコードソフトで利用できるわけではありません。内部的に x265 を利用しているエンコードソフトで利用でき、例えば、無料ソフトであれば HandBrake で利用できます。
HandBrake は本家サイトからダウンロードしてください。サイトは英語ですが、ソフトは日本語対応しています。2022 年 7 月現在の最新バージョンは 1.5.1 です。日本語版というサイトがありますが、日本語版はバージョンが古いので注意してください。
インストール後に起動した際、「.NET が見当たらない」的なエラーが表示される場合は、メッセージをクリックすると表示されるサイトから .NET をダウンロードしてインストールします。
必要なのは「.NET Desktop Runtime」です。名前の似ている「.NET Runtime」ではないので注意してください。Desktop の付かないほうをインストールしてもエラーは改善されません。
エクスプローラーから動画をドラッグ&ドロップすれば OK です。
- 動画エンコーダー ➡ 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 です。
- フォーマット別出力 ➡ MP4 ファイル出力
- 映像ストリーム形式 ➡ H.265/HEVC
- 映像エンコーダー ➡ x265
を指定します。
- フレームレート ➡ (元動画と同じものを指定)
- レート調整モード ➡ VBR(固定品質)
- 品質 ➡ 54
を指定します。
フレームレートはデフォルトで元動画と同じものが指定されているはずですが、念のため確認したほうが良いでしょう。
レート調整モードは「VBR(固定品質)」にします。VBR が 2 種類あるので、間違って平均ビットレートを選ばないように注意しましょう。
品質できれいさを指定します。HandBrake と異なり、「大きいほうがきれい」なので注意が必要です。HandBrake と TMPGEnc の数値の対応は以下の計算式で求められます。
[TMPGEnc 7 品質] = 102 - [HandBrake 品質] × 2[HandBrake 品質] = 51 - [TMPGEnc 7 品質] ÷ 2
HandBrake で 24 に相当するのは TMPGEnc では 54 なので、個人的には 54 を使用しています。
ニコカラメーカー 3 で CRF
カラオケ字幕付き動画作成ソフト「ニコカラメーカー 3」(無料ソフト)も CRF でエンコードします。
ニコカラメーカー 3 はエンコード時に FFmpeg を利用しますので、予め FFmpeg をインストールしたうえで、FFmpeg の場所を指定します。
ニコカラメーカー 3 はエンコード設定をタブごとに複数保持しておくことができ、デフォルトで「高品質」タブが H.265 でのエンコードになっています。
映像エンコードデバイスは「ソフトウェア」のままにしておきます。
映像エンコードデバイスがソフトウェアの場合、「画質」は CRF 画質になります。数値は HandBrake と同じです。個人的には 24 を使用しています。
「出力形式」を MP4 にして、さらに「高画質」を選択すると、先ほど設定した高画質タブの内容でエンコードできます。
おまけ:H.265 と H.264
H.264 でも CRF モードエンコードができますが、数値が異なるので注意してください。
H.265 | H.264 | |
---|---|---|
デフォルト | 28 | 23 |
実質的な最小値 (一番きれいな中でファイルサイズ小) | 24 | 18 |
一般的に、H.265 のほうがきれいでファイルサイズが小さくなりますので、通常は H.265 でエンコードすれば良いかと思います(ニコニコ動画は H.264 のみ対応のため、ニコニコ動画にアップロードする時だけ 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% 程度多く時間がかかっていますが、目くじらを立てるほどではないかと思っています。
更新履歴
- 2022/07/24 初版。
- 2022/09/03 .NET Desktop Runtime について記載。
- 2023/05/14 フレームレートについて追記。
- 2024/03/22 ニコカラメーカー 3 について記載。
- 2024/03/22 CRF と VBR の比較図を掲載。
- 2024/10/25 H.265 と H.264 の比較表を掲載。