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インチで検証しました。

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秒でエンコード完了。リアルタイム以上の速度です。

ファイルサイズは大幅に削減されました。
デフォルト設定の画質

ファイルサイズに比例して画質は厳しめです。動きが速い映像では破綻が目立ちそうな印象。
検証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。ファイルサイズはかなり大きくなります。

品質固定 (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分半かかりました。


ファイルサイズはデフォルトの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リアルタイムエンコードも余裕でこなす十分な性能を持っています。用途に合わせて使い分けるのがおすすめです。