Raspberry Pi OS Lite (32bit) で
ffmpeg を使って OpenMax(h264_omx) ハードウェアエンコードしようとすると
/opt/vc/lib/libbcm_host.so not found
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
というエラーが出て、0バイトのmp4ファイルが作成される。
この問題を取り上げている記事がほとんど見当たらず、解決に2日以上かかったので備忘録として書いておく。
注意
OpenMaxは64bit環境に対応していません
64bitを使っている場合は、代替手段として V4L2コーデック (h264_v4l2m2m) を使ってください →補足4. 参照
解決方法
/opt/vc/lib/libbcm_host.so が見つからない!!
と言ってるので /opt/vc/lib/
を見てみると中身が空っぽだった。
raspberrypi/userland(VideoCoreドライバー)を入れてみる。
cd ~
mkdir git
cd git
mkdir raspberrypi
cd raspberrypi
git clone http://github.com/raspberrypi/userland.git
cd userland
./buildme
正常にエンコードできるようになりました!
補足
1. 環境
Raspberry Pi 4 (4GB RAM)
2. ffmpegのバージョンとか
ffmpeg version 4.2.4 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr/local --disable-shared --pkg-config-flags=--static --enable-gpl --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-omx --enable-omx-rpi --enable-nonfree --disable-debug --disable-doc
3. Raspberry Pi 4 のビデオアクセラレーション
Raspberry Pi 4のハードウェア・エンコーダ情報
https://forums.raspberrypi.com/viewtopic.php?t=268356
4. 64bit環境のハードウェアエンコードについて