M1 ProのMacBook Proでffmpegを使って4K H.265ハードウェアエンコード速度を検証【videotoolbox vs libx265】

M1 Pro搭載のMacBook ProにffmpegをインストールしたついでにMacのハードウェアエンコード性能を検証してみました。videotoolboxを使ったH.265ハードウェアエンコードと、ソフトウェアエンコード(libx265)の速度・画質・ファイルサイズを比較します。

検証環境

M1 Pro を搭載した MacBook Pro 16インチで検証しました。

M1 Pro搭載MacBook Pro 16インチのシステム情報画面。チップ、メモリ、ストレージのスペックが表示されている
使用したMacBook Proのスペック

MacのH.265ハードウェアエンコーダー:videotoolbox

Macでのffmpegハードウェアエンコードは videotoolbox が担当します。ffmpegのビルドオプションに --enable-videotoolbox が含まれていれば利用可能です。

Homebrewでインストールしたffmpegで確認すると、H.264 / H.265 / ProRes がそれぞれvideoToolbox対応になっていることがわかります。

ffmpeg -codecs | grep tool
 DEV.LS h264   H.264 / AVC (encoders: libx264 libx264rgb h264_videotoolbox )
 DEV.L. hevc   H.265 / HEVC (encoders: libx265 hevc_videotoolbox )
 DEVIL. prores Apple ProRes (encoders: prores prores_aw prores_ks prores_videotoolbox )

H.265のハードウェアエンコーダーは hevc_videotoolbox です。

検証1:hevc_videotoolbox(デフォルト設定)

夜の港北インターチェンジで撮影した4K(3840×2160)動画でエンコードしてみます。

ffmpeg -i 第三京浜\ 港北インターチェンジ-最大4K.mov \
  -c:v hevc_videotoolbox \
  hevc_videotoolbox_default.mp4

結果:

frame= 1548 fps= 52 q=-0.0 Lsize= 22975kB time=00:00:51.66 bitrate=3642.7kbits/s speed=1.72x

speed=1.72x — 51秒の4K動画を約30秒でエンコード完了。リアルタイム以上の速度です。

hevc_videotoolboxデフォルト設定でエンコードした結果のファイルサイズ比較。元動画から大幅に縮小されている
デフォルト設定のエンコード結果:ファイルサイズ

ファイルサイズは大幅に削減されました。

デフォルト設定の画質

hevc_videotoolboxデフォルト設定でエンコードした4K映像のキャプチャ。細部にモヤがかかった低品質な画質
デフォルト設定の画質:モヤがかかった印象

ファイルサイズに比例して画質は厳しめです。動きが速い映像では破綻が目立ちそうな印象。

検証2:hevc_videotoolbox(品質固定 -q:v 50)

hevc_videotoolbox では -q:v オプション(0〜100、値が大きいほど高品質)で品質を固定できます。Apple Siliconで有効になったオプションで、参考: ffmpeg commit / Stack Overflow解説

ffmpeg -i 第三京浜\ 港北インターチェンジ-最大4K.mov \
  -c:v hevc_videotoolbox \
  -q:v 50 \
  hevc_videotoolbox_q50.mp4

結果:

frame= 1548 fps= 52 q=-0.0 Lsize= 174735kB time=00:00:51.66 bitrate=27703.6kbits/s speed=1.73x

速度はデフォルトとほぼ変わらず speed=1.73x。ファイルサイズはかなり大きくなります。

hevc_videotoolbox品質固定(q=50)のエンコード結果のファイルサイズ。デフォルトより大幅に大きいがlibx265より大きい
品質固定(q=50)のエンコード結果:ファイルサイズ

品質固定 (q=50) の画質

hevc_videotoolbox品質固定(q=50)でエンコードした4K映像のキャプチャ。デフォルトより鮮明で破綻がほとんど見られない
品質固定(q=50)の画質:なかなかいい仕上がり

画面全体が大きく動くシーンでないためか、ほぼ破綻なし。なかなかいい仕上がりです。

検証3:libx265(ソフトウェアエンコード)

比較としてソフトウェアエンコードも試します。

ffmpeg -i ./第三京浜\ 港北インターチェンジ-最大4K.mov \
  -c:v libx265 \
  -crf 28 \
  -preset fast \
  libx265.mp4

結果:

frame= 1548 fps=3.5 q=32.9 Lsize= 24886kB time=00:00:51.66 bitrate=3945.5kbits/s speed=0.116x

speed=0.116x — 51秒の動画のエンコードに約7分半かかりました。

libx265ソフトウェアエンコードの結果ファイルサイズ。hevc_videotoolboxデフォルト設定に近いサイズながら高画質
libx265のエンコード結果:驚異的な圧縮率

libx265でエンコードした4K映像のキャプチャ。細部まで鮮明で高画質な仕上がり
libx265の画質:文句なしのクオリティ

ファイルサイズはデフォルトのhevc_videotoolboxとほぼ同等でありながら、画質は文句なしのレベルです。

3手法の比較まとめ

エンコーダー速度ファイルサイズ画質
hevc_videotoolbox(デフォルト)1.72x約22MB(小)△ モヤがかかる
hevc_videotoolbox(-q:v 50)1.73x約171MB(大)○ 十分実用的
libx265(-crf 28 -preset fast)0.116x約24MB(小)◎ 高画質

ハードウェアエンコードはソフトウェアエンコードの約15倍高速です。なお、エンコード中のCPU占有率は 30〜50% 程度にとどまっていました。

まとめ:用途別の使い分け

  • 配信・急ぎの書き出しhevc_videotoolbox -q:v 50:速くて十分な画質
  • 画質最優先・時間に余裕があるlibx265 -crf 28:小さいファイルで高画質
  • とにかく速くファイルサイズを減らしたいhevc_videotoolbox(デフォルト):画質は妥協が必要

M1 Pro のvideoToolboxは4Kリアルタイムエンコードも余裕でこなす十分な性能を持っています。用途に合わせて使い分けるのがおすすめです。

Tomokatsu Yukishita (雪下 智且)
Tomokatsu Yukishita (雪下 智且)
Engineering Manager / 宅地建物取引士

組み込み開発とクラウド/AI技術をつなぐEngineering Manager。ミッションクリティカル領域で培った品質基準を、現代的な開発プロセスに接続しています。

関連項目