Raspberry Pi 4 で MPEG-2 TS の動画を H.264 へハードウェアエンコードする際の負荷をみる
前回の記事で録画サーバを構築、MPEG-2 TS で保存できるようになった。
ということで今回は、Raspberry Pi 4 のエンコードの実力をみていく。
エンコード動作時
ffmpeg -i src.m2ts -vcodec h264_omx desc.mp4
上記コマンドで雑に mp4 へ変換してみる。オプションで -vcodec h264_omx
を指定しハードウェアエンコーディングすることで、CPU利用率 140%
(4core なので max 400%)で速度は 1.47x
を叩き出しているし、熱もファンを動かしているので 53°C
と余裕だ。-b:v 8000k
オプションでビットレートを指定することで、画質を変更できる。
これは私がメインで利用している MacBook Pro (15-inch, 2016) の CPU エンコードと同等のスピードだし、1倍以上なのでリアルタイムエンコードできちゃいそうな余裕を感じる。
録画・エンコード同時動作時
余裕がありそうだったので録画・エンコードを同時に動作させてみた。
録画のCPU利用は Mirakurun node recdvb で 40%
程度で、速度は 1.4x
drop した frame も無し、CPU温度も 53°C
で変わらないため、全く問題なさそうだ。
ハードウェアエンコード以外の速度など
-vcodec libx264
は 0.4x
程度の速度。 -vcodec libx265
は 0.1x
程度で -vcodec vp9
は 0.02x
程、 -vcodec libaom
はプリンストールされている ffmpeg version 4.1.4-1+rpt1~deb10u1
ではエンコード不可だ。
ということで、ハードウェアエンコード以外は Raspberry Pi 4 にはちょっと荷が重そうだなという印象。 h264 の画の眠たさを少しでも回避するために、下記のように 2pass で処理してあげるのが良さそうだなぁと思ってる。
ffmpeg -i src.m2ts -pass 1 -an -codec:v h264_omx -strict -2 -passlogfile encoded/log -f rawvideo -x264opts frameref=15:fast_pskip=0 -y /dev/null && \ ffmpeg -i src.m2ts -pass 2 -codec:v h264_omx -strict -2 -passlogfile encoded/log -b 6000k -x264opts frameref=15:fast_pskip=0 -y desc.mp4
が、ファイルの容量を抑えたいなら libx265 までギリ有りなラインかな・・。 この場合、コマンドは以下の感じかなぁ
ffmpeg -i src.m2ts -t 300 -codec:v libx265 -preset veryfast -vf pp=ac -x264opts frameref=15:fast_pskip=0 -y desc.mp4
感想など
Raspberry Pi 4 が想像以上に高性能で驚いている。これなら録画中でも気にすることなく様々な処理(Steam Linkとか、アプリのビルドとか)を雑にぶん投げても良さそうだ。 私の環境ではTVチューナーは1chだけなのでこんな結果だが、複数ch録画したい人は Raspberry Pi 4 + px-q1ud で十二分に幸せになれると思う。