前回セットアップした Raspberry Pi 3 Model B でのハードウェアエンコードについて。
[追記] Raspberry Pi 4 Model B でも同様にできるようです。
環境
前回のおさらいになるが、以下の構成。
- Raspberry Pi 3 Model B
- Ubuntu Server 20.04 (aarch64; ARM 64bit)
調べて分かったこと
- Raspberry Pi 3 以前は基本的に 32bit 環境で、h264_omx が利用可能だった
- しかし h264_omx は deprecated; 非推奨扱いになっている模様
- 64bit 環境では h264_omx は使えず、実装される見込みも無さそう
- 代わりに h264_v4l2m2m が標準となりそう
- しかし (Ubuntu などの) ffmpeg v4.2 系にはバグがあり、h264_v4l2m2m の出力が緑色になる問題がある
- 上記の問題は ffmpeg v4.3 系以降で修正されている
ffmpeg のインストール
$ apt show ffmpeg
などとすると、確かに v4.2.4 が入りそうなので、
FFMPEG の本家の "Linux Static Builds" から配布元へ飛んで、release-arm64 版をダウンロードする。
# ちなみに armhf, armel はいずれも 32bit版で、それぞれ i686, i386 みたいなイメージのようだ
$ tar Jxvf ffmpeg-...tar.xz
で展開、
staticなバイナリなので実行ファイルのみを path の通った場所に置けば良い。
動作確認
以下のコマンドで簡単な動作確認 (入力は ts 1080p)。
$ ffmpeg -i input.ts -c:v h264_v4l2m2m -b:v 2M -num_capture_buffers 64 -c:a copy out.mp4
当方の環境依存かもしれないが、num_capture_buffers
を指定せずに実行すると下記エラーを連発する。
45 fps で x1.5、CPU使用率は 160% 前後なので、基本的にはリアルタイム処理にも使えそう。
audio encode まで入れると x1.25/150% という感じか。
あまり負荷的に余裕が無く、scale, deinterace などのハード処理もできない上に、
そもそも h264_v4l2m2m で使えるオプションもあまり無く(?)、
設定を詰めるところが無さそうな印象。
あとがき
あとはストレージさえなんとかできれば、Mirakurun/EPGStation あたりもラズパイにもたせて、
365/24 な常時稼働マシンはこのラズパイだけにできるのだけれど。
別途 NAS を用意するのでは、自前の(ファイル)サーバーと大差ないし、
USB接続の外付けディスクだと拡張性, 冗長性が無いし。。。
オンボードRAID してくれる外付け複スロット 3.5" HDDケース的なものは無いのだろうかと思って調べてみると、
RAID対応, 電源ホストPC連動など結構色々ありますね。
次に更新するときは Raspberry Pi などのシングルボード・コンピュータと、上記のようなHDDケースでも良いかも。
そして 365/24 で常時稼働させない前提なら、操作端末はもっと小型でハイパワーのものにできますね。
⇒ [Raspberry Pi] 次期自宅サーバー構想 [Linux]
参考
https://denor.jp/Raspberry Pi 4で64ビットハードウェアエンコードを試してみF#comment-137
https://www.willusher.io/general/2020/11/15/hw-accel-encoding-rpi4