動機
M1チップのMBAを買ったので、ハードウェアエンコードとソフトウェアエンコードを比較します。
厳密にはトランスコードですが、ここでは"エンコード"を使います。
macOSではvideotoolboxを通して、vaapiなどのハードウェアエンコードが利用出来るようです。
M1チップでも同様で、脳死でvideotoolboxを使えばハードウェアエンコードできるようです。
環境
MacBook Air (M1, 2020) 8コアGPU
ffmpeg (https://ffmpeg.org/download.html#build-mac) はこちらのものを使いました。
ffmpeg version N-100466-g29cef1bcd6-tessus https://evermeet.cx/ffmpeg/ Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.17)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
libavutil 56. 62.100 / 56. 62.100
libavcodec 58.115.102 / 58.115.102
libavformat 58. 65.100 / 58. 65.100
libavdevice 58. 11.103 / 58. 11.103
libavfilter 7. 94.100 / 7. 94.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100
Hyper fast Audio and Video encoder
対応フォーマット
user@h94 ~ % ffmpeg -encoders | grep VideoTool
V..... h264_videotoolbox VideoToolbox H.264 Encoder (codec h264)
V..... hevc_videotoolbox VideoToolbox H.265 Encoder (codec hevc)
h264とhevcが利用可能なようです。
エンコード時間の比較
適当な地デジの録画ファイルを変換してみます。
元の動画
Stream #0:1[0x111]: Video: mpeg2video (Main), yuv420p(tv, bt709, top first), 1440x1080 [SAR 4:3 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc, 13Mbps
Stream #0:2[0x112]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 189 kb/s
実行例
user@h94 ~ % ffmpeg -i {input} -c:v {エンコーダ} -b:v 6M {output}
エンコーダ | 実時間比(Large is better) |
---|---|
libx264 | 1.43 |
libx265 | 0.63 |
h264_videotoolbox | 8.27 |
hevc_videotoolbox | 8.25 |
まとめ
思ってたより早い。
画質はそんなに良くないけど、録画したファイルをテレビで見るには十分な画質という感じ。
h264とhevcが同じ速度なので、もっと最適な条件はありそう。