Raspberry Pi Jessie(8.0)を使っていて、libavformat.so.53がないと怒られる問題の対策
Raspberry Pi 3を使って監視カメラを作ろうと頑張っていたときにライブラリのインストールで問題があり時間を取られたのでメモ。この問題に関して、日本語の情報は見つからないし、英語の情報も結構探すのに時間が掛かった。
motion-mmalのセットアップ
を参考に、Raspberry Pi 3 (Raspbian Jessie)にmotion-mmalを使えるように準備していた。ちなみに、Raspberry Piの標準カメラモジュールを使うのにはmotionではなく、有志が開発したmotion-mmalを使う必要がある。もしUSBポートに刺すカメラを使う場合はmotionで構わないようだ。
$ cd /opt/motion-mmal/
$ sudo ./motion -n -c motion-mmalcam.conf
./motion: error while loading shared libraries: libavformat.so.53: cannot open shared object file: No such file or directory
上のリンク先を参考に各種パッケージもインストールし、いざ起動しようとすると、上のエラーで止まった。libavformat.so.53がないようだ。
ちょこっと調べてみると、RaspbianのOSバージョンが、8.0(Jessie)以降で出る不具合らしく、7.0(Wheezy)に戻せば問題ないらしい。ちなみに、自分のRaspberry PiにどのバージョンのOSがインストールされているかは以下のコマンドで確認できる。
$ cat /etc/debian_version
さて、OSをロールバックすれば良いらしいのだが、色々環境を設定してしまったし、面倒くさい。なんとか、ロールバックせずにこの問題を解決する方法を探してみた。
参考にしたのは以下リンク。
何でも、lowflyerという人が、修正してくれたらしい。
$ sudo apt-get install -y libjpeg-dev libavformat56 libavformat-dev
libavcodec56 libavcodec-dev libavutil54 libavutil-dev libc6-dev
zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev
$ wget https://www.dropbox.com/s/6ruqgv1h65zufr6/motion-mmal-lowflyerUK-20151114.tar.gz
$ tar -zxvf motion-mmal-lowflyerUK-20151114.tar.gz
$ ./motion -c motion-mmalcam-both.conf
これで自分の場合は動いた。
$ ifconfig
でRaspberry Pi 3のIPアドレスを確認し、MacBook AirやiPhoneのSafariのURL欄に
192.168.10.102:8081
などと入れると、
このようにストリーミングで確認できる。ストリーミングを中止する場合はターミナルからCtrl + Cで終われば良い。
コマ速や解像度、写真を保存するディレクトリなどはmotion-mmalcam-both.confを編集すれば良い。
参考
あと、motion-mmalcam-both.confがデフォルトのmotion-mmalcam.confと何が違うのかをDIFFを使ってリストアップしてみた。
デフォルト(motion-mmalcam.conf) -> lowflyer版(motion-mmalcam-both.conf)
- logfile /home/pi/motion.log -> #logfile /run/shm/motion.log (コメントアウト)
- log_level 5 -> log_level 7
- width 1024 -> width 640
- height 576 -> height 480
- framerate 2 -> framerate 4
- #mmalcam_control_params -> mmalcam_control_params --exposure night (アンコメントアウト)
- mmalcam_secondary_buffer_upscale 4 (追加)
- mmalcam_secondary_buffer_jpeg 50 (追加)
- lightswitch 0 -> lightswitch 25
- minimum_motion_frames 1 -> minimum_motion_frames 5
- pre_capture 0 -> pre_capture 4
- post_capture 0 -> post_capture 4
- event_gap 60 -> event_gap 10
- output_pictures on -> output_pictures best
- output_secondary_pictures on (追加)
- output_both_pictures on (追加)
- quality 75 -> quality 80
- ffmpeg_output_secondary_movies off (追加)
- ffmpeg_variable_bitrate 0 -> ffmpeg_variable_bitrate 10
- ffmpeg_deinterlace off -> (削除)
- extpipe_secondary on (追加)
- extpipe mencoder -demuxer rawvideo -rawvideo w=1280:h=960:i420 -ovc x264 -x264encopts bframes=4:frameref=1:subq=1:scenecut=-1:nob_adapt:threads=1:keyint=1000:8x8dct:vbv_bufsize=4000:crf=24:partitions=i8x8,i4x4:vbv_maxrate=800:no-chroma-me -of avi -o %f.avi - -fps %fps (アンコメントアウト&変更)
- snapshot_interval 0 -> snapshot_interval 10
- locate_motion_style box -> locate_motion_style redbox
- text_changes off -> text_changes on
- text_double on -> text_double off
- exif_text "Test exif" (アンコメントアウト&変更)
- target_dir /home/pi -> target_dir /run/shm
- snapshot_filename %v-%Y%m%d%H%M%S-snapshot -> snapshot_filename lastsnap
- picture_filename %v-%Y%m%d%H%M%S-%q -> picture_filename preview
- movie_filename %v-%Y%m%d%H%M%S -> movie_filename %Y%m%d%H%M%S
- stream_secondary off (追加)
- stream_maxrate 1 -> stream_maxrate 4
- webcontrol_localhost on -> webcontrol_localhost off
1.は普通にログファイルを残さないようにするという意味だろう。
2はログメッセージのレベル設定。ERR:Error, WRN:Warning, ALL:Allとかかな?5のWRNから7のINFに変更されている。
3、4は画像の解像度。
5はフレームレート。
6は露出の設定が変更されているようだ。
7の設定を0以外にすることで、secondary bufferが有効になるとのこと。secondary bufferが何かというと、ストリーミングなどで動かしているときに写真を撮るときにupscaleして保存してくれる仕組みらしい。要するにprimary imageは上記3、4の解像度で動き例えば動体検知などに使われる。動体検知をトリガとして、いざ画像を保存するときには上記3、4で決めた解像度をupscaleして(この場合、width: 640*4=2560, height: 480*4=1920)高精細な画像を撮れるということだ(多分)。
8はsecondary bufferにエンコードするときのクオリティ設定。
9は撮像エリアの何%の光量が変わったときに無視するかという設定。
10は最小の動画フレーム設定。
11は動画検知が行われる前にバッファとして持っておくフレーム数の設定。
12は動画検知が行われなかったときに過去のフレームを何フレームまで持っておくかという設定。
13は動画の保存間隔設定。60で1分おきのタイムラプスが撮れる。0にするとリアルタイム動画になる。
14はファイルを保存するタイミング設定。onで動体検知時の写真保存。
15は7の設定のところで触れたsecondary bufferを使った高精細画像を出力するかという設定。
16をオンにするとsecondary bufferの高精細画像とprimary bufferの標準画像が共に出力される。
17はjpegの圧縮率。
18をオンにするとsecondary bufferを使った動画作成をffmpegを使い行う。
20はインターレースに関わるffmpegの設定。必要ないので削除されている。
21はビデオエンコーディングに関わる設定に見えるが、詳しいコメントが書いてないので不明。22も同様。
23はスナップショットの間隔設定。
24は動体検知時のボックス表示を変更するオプション。
25は変化した画素の数?を表示するかの設定かな?
26は25を2回表示するかの設定?
27はEXIFにコメントを何と入れるかの設定。
28は保存するディレクトリ。
29はスナップショットのファイルネームの設定。
30は写真のファイルネームの設定。
31は動画のファイルネームの設定。
32はseconfary bufferをストリームの画像として使うかの設定。
33はストリームの最大レート設定。
34はコントロールコネクションをlocalhostに限定するかの設定。
うーん、confをlowflyer氏のバージョンに変更することで改善しそうな点は見当たらないな…。ソースそのものが変わっているのだろう。
そのうちmotion-mmalcam.confの解読もしっかりやろう。