kumak1’s blog

kumak1のイラストや技術ログ

Raspberry Pi 4 で MPEG-2 TS の動画を H.264 へハードウェアエンコードする際の負荷をみる

前回の記事で録画サーバを構築、MPEG-2 TS で保存できるようになった。

kumak1.hatenablog.com

ということで今回は、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倍以上なのでリアルタイムエンコードできちゃいそうな余裕を感じる。

f:id:kumak1:20200104013109p:plain
エンコード動作時の CPU 温度

f:id:kumak1:20200104011925p:plain
エンコード動作時の top

f:id:kumak1:20200104012037p:plain
エンコード動作時の ffmpeg の進行状況

録画・エンコード同時動作時

余裕がありそうだったので録画・エンコードを同時に動作させてみた。 録画のCPU利用は Mirakurun node recdvb で 40% 程度で、速度は 1.4x drop した frame も無し、CPU温度も 53°C で変わらないため、全く問題なさそうだ。

f:id:kumak1:20200104013935p:plain
録画・エンコード同時動作時の CPU 温度

f:id:kumak1:20200104013846p:plain
録画・エンコード同時動作時の top

f:id:kumak1:20200104014200p:plain
録画・エンコード動作時の ffmpeg の進行状況

ハードウェアエンコード以外の速度など

-vcodec libx2640.4x 程度の速度。 -vcodec libx2650.1x 程度で -vcodec vp90.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 で十二分に幸せになれると思う。