M1 Pro チップ搭載の MacBook Pro で 4K映像を H.265 ハードウェアエンコードする

Mac
この記事は約8分で読めます。

はじめに

Macにffmpegをインストールしたのでついでに Mac の実力を試してみることにしました。

Macでffmpegをつかう
はじめにこのページではMacでffmpegを使えるようにするまでの手順をまとめています。ffmpegはHomebrewでインストールできますMacでffmpeg等のツールを使う場合、Homebrewを使うと簡単にインストールできます。Hom...

試験環境

試験したのは M1 Pro を搭載した Macbook Pro 16インチ です。

Mac のハードウェアエンコーダーは videotoolbox

インストールした ffmpeg はきちんとハードウェアエンコーダーに対応してました。
ffmpeg のオプションで –enable-videotoolbox が指定されていればハードウェアエンコーダーが使用できます。

tomokatsu@snow-under-MacBook-Pro ~ % ffmpeg -codecs | grep tool
ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb h264_videotoolbox )
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265 hevc_videotoolbox )
 DEVIL. prores               Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks prores_videotoolbox )

早速 H.265 で 4K 映像をハードウェアエンコードしてみる

映像は夜の港北インターチェンジで撮影した動画にしてみました。

以下のコマンドでエンコードしてみました。

ffmpeg -i 第三京浜\ 港北インターチェンジ-最大4K.mov -c:v hevc_videotoolbox hevc_videotoolbox_default.mp4
  Stream #0:0(und): Video: hevc (hev1 / 0x31766568), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 29.97 fps, 30k tbn (default)
    Metadata:
      creation_time   : 2022-06-04T07:16:16.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      timecode        : 00:00:00;00
      encoder         : Lavc59.18.100 hevc_videotoolbox
  Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2022-06-04T07:16:16.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.18.100 aac

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

speed=1.72x で流石に早い。

ファイルサイズは劇的に小さくなりました。

画質は?

うーん・・流石にファイルサイズに比例した、もやもやした映像です。
動きが早い映像だと厳しいかなぁーという印象。

hevc_videotoolbox は品質固定ができる模様

hevc_videotoolboxのオプションで -q:v nn を指定すれば品質固定でエンコードができるようです。

git.ffmpeg.org Git - ffmpeg.git/commit
Optimally using hevc_videotoolbox and ffmpeg on OSX
I'm using ffmpeg 4.3.1 to convert videos from h264 to h265 and initially I was excited to discover that I can use my Mac's GPU to speed up the conversion with t...

以下でエンコードしてみました。

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

ファイルサイズはそこそこ大きくなりました。

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

意外といい

画面全体が変化するような映像ではないためか、映像に破綻はなさそうです。なかなかいい感じ。

frame= 1548 fps= 52 q=-0.0 Lsize=  174735kB time=00:00:51.66 bitrate=27703.6kbits/s speed=1.73x    
video:173879kB audio:810kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.026356%

やっぱりエンコード速度も早いです。

おまけ: 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    

お・・・遅い。4K映像をソフトエンコードするのは辛そうです。

結果

めっちゃ圧縮された

目を疑うような圧縮率。

ばっちりな画質

そして画質も文句ないです。

まとめ : Macのハードウェアエンコードはソフトエンコードの15倍早かった

ファイルサイズと画質のトレードオフになってしまいましたが、速度はとにかく早かったです。
リアルタイムエンコードも余裕。ちなみにハードウェアエンコード中のCPU専有率は 30-50% 程度でした。

リアルタイム性や処理時間を求めるならあり

とにかく早いので、配信などの用途に適していそうです。
高画質を求める場合はソフトエンコードの方が良さそうでした。

コメント

タイトルとURLをコピーしました