created: 2022-10-22T08:05:35.107Z

[2022年度版][Mirakurun + EPGStation] Raspberry Pi で mp4 のエンコードにハードウェアアクセラレータを使うまで

もともとはこちら(本家)の docker-compose.yml 下敷きに作業しようとしていた。 ただし、これは RaspberryPi で動作させる想定でないので持ってくるイメージなどで一手間必要になる。

EPGStation の Dockerfile(h264_omxコーデックが有効なffmpegをビルドする部分)はこちらを参考にしようとしたが、これも2022年ではそのままでは動作しなくなっていた。

追加で対応が必要だった部分をメモしていく。

/opt/vc/lib/ 配下のインストール

/opt/vc/lib/ 配下のライブラリが入っていない。これを入れた状態で ffmpeg をビルドして配置しておく必要がある。

$ git clone http://github.com/raspberrypi/userland.git /tmp/userland && cd $_
$ ./buildme

インストールしておかないとエンコード時にこのようなエラーでコケる。

[h264_omx @ 0x37c9180] /opt/vc/lib/libbcm_host.so not found

なお、去年以前の記事だとこのワークアラウンドに言及しているものが出てこない。Raspbian のアップデートのせいなのかわからないが、過去の記事では apt で ffmpeg を入れただけで h264_omx コーデックが使えるみたいな書き方になっているものがほとんどなので、これを調べているとき「自分がなんか変なことしてるんだろうか」と思っていた。

sudo rpi-update を叩いおくとこのエラーは回避できる」みたいな記述も後から見つけたけど試していない。しかしこれで解消するのは libEGL.so not found だけかも。

参考

vchiq を触れるように

udev 配下のパーミッションを変更しておく必要がある。

echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' \
    | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules
# 変更した後の再起動も必要

これをしておかないとエンコード時にこんなエラーメッセージでコケる。

  • failed to open vchiq instance

参考

arib_caption not found

ffmpeg v4.2 からは字幕が付帯した動画をエンコードしたい場合はライブラリを入れる必要がある。

$ apt install libaribb24-dev

ffmpeg のビルド時のオプションにこれが必要。

--enable-version3
--enable-libaribb24

これはエンコードの設定によるが、字幕ごとエンコードしようとするとこんなエラーメッセージでコケる。

Decoder (codec arib_caption) not found for input stream #0:2

デフォルトのエンコードコマンドは字幕が有効(-map 0:s? -c:s mov_text)となっているし、これが入ったffmpegを使って運用するほうが後顧の憂いが無いと思う。

参考

update programs error

これはハードウェアアクセラレーションと関係ないが、必要な対応がまとまってると後で(自分が)楽なのでメモ。

MySQLの文字コードが原因でEPGStationアプリが録画に失敗する。

[INFO] system - start update programs [ERROR] system - update programs error

基本的にはここに書いてある通りにすればよさそうではある。

が、自分の手元だとどうしても明示的にデータベースの文字コードを指定しないと動くようにならなかった。

$ sudo docker compose exec -u root mysql /usr/bin/mysql -uroot -pepgstation epgstation \
  -e "DROP DATABASE IF EXISTS epgstation; CREATE DATABASE epgstation CHARACTER SET utf8mb4;"

参考