H265

保存用動画は CRF(固定品質)モードでエンコードしよう

動画(の映像部分)をエンコードする際、「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 の違い

CRFvsVBRVBR(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

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

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

インストール後に起動した際、「.NET が見当たらない」的なエラーが表示される場合は、メッセージをクリックすると表示されるサイトから .NET をダウンロードしてインストールします。

必要なのは「.NET Desktop Runtime」です。名前の似ている「.NET Runtime」ではないので注意してください。Desktop の付かないほうをインストールしてもエラーは改善されません。

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 を使用しています。

ニコカラメーカー 3 で CRF

カラオケ字幕付き動画作成ソフト「ニコカラメーカー 3」(無料ソフト)も CRF でエンコードします。

ニコカラメーカー3[ツール → 環境設定]メニューで環境設定ウィンドウが開くので、「MP4 エンコード」パネルをクリックします。

ニコカラメーカー 3 はエンコード時に FFmpeg を利用しますので、予め FFmpeg をインストールしたうえで、FFmpeg の場所を指定します。

ニコカラメーカー 3 はエンコード設定をタブごとに複数保持しておくことができ、デフォルトで「高品質」タブが H.265 でのエンコードになっています。

映像エンコードデバイスは「ソフトウェア」のままにしておきます。

映像エンコードデバイスがソフトウェアの場合、「画質」は CRF 画質になります。数値は HandBrake と同じです。個人的には 24 を使用しています。

ニコカラメーカー3動画出力設定を終えたら、メインウィンドウの「動画出力」パネルをクリックします。

「出力形式」を MP4 にして、さらに「高画質」を選択すると、先ほど設定した高画質タブの内容でエンコードできます。

おまけ: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% 程度多く時間がかかっていますが、目くじらを立てるほどではないかと思っています。

更新履歴

  • 2022/07/24 初版。
  • 2022/09/03 .NET Desktop Runtime について記載。
  • 2023/05/14 フレームレートについて追記。
  • 2024/03/22 ニコカラメーカー 3 について記載。
  • 2024/03/22 比較図を掲載。


H.264 / H.265 再生負荷メモ(Core i7-3770S)

H.264 でエンコードされた動画と、H.265 でエンコードされた動画をそれぞれ再生した時の、CPU / GPU 負荷がどれくらいか、のメモその 2。

再生環境はメインマシンで、CPU は Intel Core i7-3770S(4 コア 8 スレッド)、GPU は RADEON HD 5570(UVD 2.2 搭載)。H.264 のデコードは GPU のハードウェア支援があるが、H.265 は支援がない。

Full HD のモニターを接続して動画を再生した時の負荷を計測(GPU 負荷は計測不可)。動画プレーヤーは MPC-HC。結果は以下。

Decode_i73770S


意外なことに、Full HD サイズまでは H.264 と H.265 の負荷に差が無い。4K2K では差が出ている。

もしかしたら、H.264 の GPU 支援は効いていないのかもしれない。4 スレッドの i7-7500U で H.264 Full HD の負荷が 7% だったのに対し、8 スレッドの i7-3770S の負荷が 9% なのは不自然に思える。GPU 支援が効かずに CPU で処理しているから負荷が高いのではないか。

CPU パワーごり押しだとしても、旧世代の i7 でも、H.264 も H.265 も問題なく再生できている。

【追記】
VLC プレーヤーで再生したところ、H.265 は H.264 の 1.5 倍くらいの再生負荷となった。MPC が利用している H.265 デコーダーが優秀ということなのか?

H.264 / H.265 再生負荷メモ(Core i7-7500U)

H.264 でエンコードされた動画と、H.265 でエンコードされた動画をそれぞれ再生した時の、CPU / GPU 負荷がどれくらいか、のメモ。

再生環境は NEC LAVIE Hybrid ZERO で、CPU は Intel Core i7-7500U(2 コア 4 スレッド)、GPU は内蔵の Intel HD グラフィックス 620(QSV 6 搭載)。H.264 / H.265 のデコードは GPU のハードウェア支援がある。

セカンドディスプレイに Full HD のモニターを接続し、セカンドディスプレイで動画を再生した時の負荷を計測。動画プレーヤーは MPC-BE。結果は以下。

Decode


第 7 世代の Core プロセッサーでは、CPU 負荷・GPU 負荷ともに、H.264 と H.265 でほとんど差が無いようだ。

以下に、CPU 負荷の推移のグラフを貼っておく。赤線部分が動画を再生している時の負荷。

H264_HDH.264 / HD

H264_FHDH.264 / Full HD (30 fps)

H264_FHD_60H.264 / Full HD (60 fps)

H264_4KH.264 / 4K2K

H265_SDH.265 / 640 x 360

H265_HDH.265 / HD

H265_FHDH.265 / Full HD

H265_4KH.265 / 4K2K



月別アーカイブ
記事検索
最新コメント
  • ライブドアブログ