一部の端末では動作しない場合があります。(Redditを見る感じPixel系は✖?)
ハードウェアエンコード
動画の処理をCPUで行うハードウェアエンコードと違い、GPUや専用回路で処理を行うハードウェアエンコードは
CPUの負荷を大きく減らし、また効率もグンと向上します。(最低でも4倍くらい)
有名なので言えばNvidiaのNVENC、AMDのAMF、IntelのQSV、Appleのvideotoolboxがあります。
Androidにもあるよ!!
実はAndroidでもハードウェアエンコードは使用可能です。iOSもそうですが…(iOSはvideotoolbox)
上の表に書かれている通り、MediaCodecというのが使用できます。
今回はこれを試そうってワケ!
環境
メインスマホであるXiaomi 14T Pro使用する。仕様は以下の通り。
名前 | 詳細 |
---|---|
SoC | MediaTek Dimensity 9300+ |
RAM | LPDDR5X 12GB |
Storage | UFS4.0 256GB |
OS | Android15(HyperOS 2) |
重要なのはSoCです。MediaTekのDimensity 9300+はハイエンド向けのものなので大丈夫ですが、
世代が古かったり、廉価版だと一部のコーデックが使用できない場合があります。
そしてffmpegはTermuxで動作させます。
TermuxはAndroidでLinux環境を実行できるアプリです。
Android向けのffmpegもインストールできるので手っ取り早いです。
いざ実行
本題です。実行してみます。
実行するコマンドは以下の通り。
ffmpeg -i sample.mkv -c:v hevc_mediacodec -c:a copy output.mp4
という非常に簡素なものですが、テストですから。
ちと見にくいですが、エンコードできています。
速度は…
4.65倍!
VideoToolboxは8倍、NVENCは17倍くらい出るので比較すると悲惨ですけれど、スマホでこれならいいでしょ!
libx265 vs hevc_mediacodec
ソフトウェアエンコードのlibx265
とハードウェアエンコードのhevc_mediacodec
を比較します。
計測方法
time ffmpeg ...
のようにtimeコマンドで所要時間を計測、ffmpegでは-t
オプションをつけ冒頭1分のみエンコードを行う。
ちょっとガバいけど、許してちょ!!
結果
libx265 : speed=1.09x / 所要時間 55秒
hevc_mediacodec : speed=4.93x / 所要時間 12秒
なお、画質については触れないものとする。
所感
軽く触ってみただけですが、とりあえずハードウェアエンコードできるんだぁ…って思いました。
速度に関しては必要十分、画質は…オプションを練れば良くなるでしょう!
発熱は私の機種ではほとんどなく、エンコード中にYouTubeを見ていてももっさり感はありませんでした。
おまけ: メインPCと対決()
メインPCはRyzen 7 5700XにRTX 4060 Tiなのでスマホみたいな雑魚が勝てるわけありませんが…
なおWindowsのためtimeはありません。速度だけ。
libx265 : speed=4.06x
hevc_nvenc : speed=32.7x
圧倒ですね。比べるほうが悪い。