広告

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

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

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

macOS 10.13.6 にて、brew で FFmpeg をインストールしてみます。ソフトウェアエンコードと比較するために、x264, x265 のオプションも入れています。

brew install ffmpeg --with-fdk-aac --with-x264 --with-x265

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

ffmpeg -version
ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma --enable-nonfree
libavutil      56. 14.100 / 56. 14.100
libavcodec     58. 18.100 / 58. 18.100
libavformat    58. 12.100 / 58. 12.100
libavdevice    58.  3.100 / 58.  3.100
libavfilter     7. 16.100 /  7. 16.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  1.100 /  5.  1.100
libswresample   3.  1.100 /  3.  1.100
libpostproc    55.  1.100 / 55.  1.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

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

H.264 (libx264)

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

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))
...
frame= 1253 fps= 39 q=-1.0 Lsize=   27098kB time=00:00:52.08 bitrate=4262.1kbits/s speed=1.63x

HEVC/H.265 (libx265)

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

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))
...
frame= 1253 fps= 14 q=-0.0 Lsize=   27600kB time=00:00:52.08 bitrate=4341.1kbits/s speed=0.589x

H.264 (h264_videotoolbox)

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

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))
...
frame= 1253 fps=224 q=-0.0 Lsize=   28555kB time=00:00:52.16 bitrate=4484.2kbits/s speed=9.34x

HEVC/H.265 (h265_videotoolbox)

VideoToolbox による HEVC/H.265 のハードウェアエンコードは 1.34 倍です! 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))
...
frame= 1253 fps= 32 q=-0.0 Lsize=   29864kB time=00:00:52.16 bitrate=4689.8kbits/s speed=1.34x

広告

FFmpeg

Posted by admin