吉方位確認サービス「楽方位」α版を公開しました。

macOS で FFmpeg + VideoToolbox を使用した HEVC/H.265/H.264 ハードウェアエンコード

Sponsored Links

Linux や Windows では NVENC や QSV のようなハードウェアアクセラレーションなエンコードをできるのですが、macOS ってどうなってるんだっけ? というのを今更ながら確認してみました。結論としては、macOS でも VideoToolbox を使用して、FFmpeg で H.264 や HEVC/H.265 をハードウェアアクセラレーションでエンコードできる! というものでした。(今まで知らなかった…)

エンコードよりはトランスコードな気もしますが、このポストでは表記をエンコードと統一しておきます。

Apple 情報

VideoToolbox | Apple Developer

https://developer.apple.com/documentation/videotoolbox

FFmpeg 情報

FFmpeg の Wiki の HWAccelIntro でも VideoToolbox に対応していると思いっきり記載されていました。FFmpeg すごい。

FFmpeg wiki: HWAccelIntro

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg のインストール

macOS 10.14.4 にて、Homebrew で FFmpeg をインストールしてみます。

$ brew install ffmpeg

インストール後、brew ls コマンドで確認すると、x264, x265 もインストールされています。ソフトウェアエンコードと比較することもできます。

$ brew ls
...
fdk-aac
ffmpeg
...
x264
x265
...

インストールされた FFmpeg のバージョンを確認してみます。インストールしたのは 2019-05-05 です。バージョンは、4.1.3 でした。–enable-videotoolbox が有効になっています。

$ ffmpeg -version
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100
libpostproc    55.  3.100 / 55.  3.100

エンコード速度比較

実際にエンコード速度を確認してみます。MacBook のスペックは以下の通りです。

  • MacBook Pro (15-inch, 2016)
  • 2.6 GHz Intel Core i7
  • 16 GB 2133 MHz LPDDR3
  • Radeon Pro 450 2048 MB / Intel HD Graphics 530 1536 MB

ビデオファイルは、Sintel の Trailer を使用しました。HD 1080p です。ファイル名は、sintel_trailer-1080p.mp4 です。

https://durian.blender.org/download/

細かいパラメータは抜きで、ビデオのビットレート 5Mbps のみ設定しています。画質の評価はしていません。あまり画質には拘りがないので、どれも主観では気になりませんでした。

H.264 (libx264)H

H.264 のソフトウェアエンコードは 1.51 倍で、実時間より早くエンコードできます。

$ ffmpeg -i sintel_trailer-1080p.mp4 -c:v libx264 -b:v 5000k out.mp4
...
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
...
speed=1.51x

HEVC/H.265 (libx265)

HEVC/H.265 のソフトウェアエンコードは 0.512 倍で、実時間より遅いです。リアルタイムエンコードは無理のようです。また、このケースのみ MacBook Pro のファンが爆音で回り続けます。

$ ffmpeg -i sintel_trailer-1080p.mp4 -c:v libx265 -b:v 5000k out.mp4
...
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
...
speed=0.512x

H.264 (h264_videotoolbox)

VideoToolbox による H.264 のハードウェアエンコードは 9.36 倍です! すこぶる高速です。

$ ffmpeg -i sintel_trailer-1080p.mp4 -c:v h264_videotoolbox -b:v 5000k out.mp4
...
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_videotoolbox))
...
speed=9.36x

HEVC/H.265 (h265_videotoolbox)

VideoToolbox による HEVC/H.265 のハードウェアエンコードは 1.41 倍です! HEVC/H.265 でもリアルタイムエンコードができそうです。

$ ffmpeg -i sintel_trailer-1080p.mp4 -c:v hevc_videotoolbox -b:v 5000k out.mp4
...
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_videotoolbox))
...
speed=1.41x
FFmpeg
Sponsored Links
hirooka.pro