Armadillo-840では、AVコーデックミドルウェアによりカメラからの入力画像をH.264にエンコードすることができます。 今回は、USBカメラからの画像をJPEGファイルに連続して保存し、ffmpegで動画ファイルに変換するということを試してみます。 ffmegはDebianパッケージのバイナリを使うことにします。
1. ソースコードをダウンロードする
1.1. ATDE5で、カーネル、ユーザーランドのソースコードをダウンロードします。
atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/linux-3.4-at10.tar.gz atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/atmark-dist-20150127.tar.gz
1.2 展開して、シンボリックリンクを張ります
atmark@atde5:~$ tar xvf linux-3.4-at10.tar.gz atmark@atde5:~$ tar xvf atmark-dist-20150127.tar.gz atmark@atde5:~$ ln -s atmark-dist-20150127 atmark-dist atmark@atde5:~$ cd atmark-dist atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at10 ./linux-3.x
1.3 make menuconfigした後、ビルドします
atmark@atde5:~/atmark-dist$ make menuconfig Vendor/Product Selection ---> (X) AtmarkTechno (X) Armadillo-840 atmark@atde5:~/atmark-dist$ make
2. ffmegが依存するパッケージを調べる
以下のHowToを参考に、ffmpegが依存するパッケージを調べます
https://users.atmark-techno.com/blog/53/1007
2.1. apt-rdependsをインストール
atmark@atde5:~/atmark-dist$ sudo apt-get install apt-rdepends
2.2. ffmpegの依存パッケージを調査
以下のクロスパッケージがATDE5には不足しているようです。
libav-tools libavdevice53 libcdio-cdda1 libcdio-paranoia1 libavfilter2 libtbb2 (armhfパッケージがないので無視) libsdl1.2debian
2.3. パッケージのダウンロード
Debianパッケージのページからffmpegと上記パッケージのarmhf版をダウンロードします。
atmark@atde5:~/atmark-dist$ cd atmark@atde5:~$ mkdir pkg atmark@atde5:~$ cd pkg atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/ffmpeg_0.8.16-1_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libav-tools_0.8.16-1_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libavdevice53_0.8.16-1_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libc/libcdio/libcdio-cdda1_0.83-4_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libc/libcdio/libcdio-paranoia1_0.83-4_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libavfilter2_0.8.16-1_armhf.deb atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2debian_1.2.15-5_armhf.deb
今回は 10fpsでカメラからの画像を取り込みますが、フレームレートを上げる場合には、以下のフォーラムで出ている libjpeg-tuboの導入なども検討してもよいかもしれません。
https://users.atmark-techno.com/forum/armadillo/1181
2.4. パッケージをAtmark Distへ展開
今回は、パッケージをAtmark Distのromfsフォルダに直接展開します。
atmark@atde5:~/pkg$ dpkg -x ffmpeg_0.8.16-1_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libcdio-cdda1_0.83-4_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libav-tools_0.8.16-1_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libcdio-paranoia1_0.83-4_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libavdevice53_0.8.16-1_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libsdl1.2debian_1.2.15-5_armhf.deb ../atmark-dist/romfs/ atmark@atde5:~/pkg$ dpkg -x libavfilter2_0.8.16-1_armhf.deb ../atmark-dist/romfs/
2.5. 不要なファイルを削除
atmark@atde5:~/pkg$ cd ../atmark-dist/ atmark@atde5:~/atmark-dist$ rm -rf romfs/usr/share/doc/ atmark@atde5:~/atmark-dist$ rm -rf romfs/usr/share/man/
3. 再度イメージ化
再度 make romfs / make imageを実行します。
atmark@atde5:~/atmark-dist$ make romfs atmark@atde5:~/atmark-dist$ make image
作成された romfs.img.gz をArmadaillo-840に書き込みます。(書き込み方はマニュアルをご確認ください)
4. mjpg-streamerを使ってカメラからの画像をjpegファイルに落とす
4.1 Armadillo-840にUSBカメラを接続した状態で起動します。
/dev/video0 が USBカメラであることを確認しましょう。
[root@armadillo840-0 (ttySC2) ~]# cat /sys/class/video4linux/video0/name BUFFALO BSWHD06M USB Camera
4.2 mjpg-streamerを起動します。
( Errorが出てますが、無視します)
一定時間経過後に、Ctrl-C で停止します。
ファイルは ramdisk上に作成していますので、あまり長い時間起動するとメモリが枯渇しますので注意してください。
( output_file.so の-sオプションでリングバッファを指定することも可能です。)
[root@armadillo840-0 (ttySC2) ~]# LD_LIBRARY_PATH=/usr/lib/mjpg_streamer/ mjpg_s treamer -i "input_uvc.so -f 15 -d /dev/video0 -y -r VGA" -o "output_file.so -f / home/ftp/pub" MJPG Streamer Version: svn rev: i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 15 i: Format............: YUV i: JPEG Quality......: 80 Adding control for Pan (relative) UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device Adding control for Tilt (relative) UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device Adding control for Pan Reset UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device Adding control for Tilt Reset UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device Adding control for Pan/tilt Reset UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device Adding control for Focus (absolute) UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device mapping control for Pan (relative) UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Tilt (relative) UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Pan Reset UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Tilt Reset UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Pan/tilt Reset UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Focus (absolute) UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for LED1 Mode UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for LED1 Frequency UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Disable video processing UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device mapping control for Raw bits per pixel UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device o: output folder.....: /home/ftp/pub o: input plugin.....: 0: input_uvc.so o: delay after save..: 0 o: ringbuffer size...: no ringbuffer o: command...........: disabled
4.3 /home/ftp/pub にjpegファイルができているはずです。
[root@armadillo840-0 (ttySC2) ~]# ls /home/ftp/pub/
4.4. jpegファイルのプレフィックスを削除します
[root@armadillo840-0 (ttySC2) ~]# cd /home/ftp/pub/ [root@armadillo840-0 (ttySC2) /home/ftp/pub]# for f in *_picture_*.jpg; do mv $f ${f#*_picture_}; done
5. ffmpegでjpegファイルからaviファイルに変換する
5.1 jpeg→avi変換
[root@armadillo840-0 (ttySC2) /home/ftp/pub]# ffmpeg -y -r 10 -i "/home/ftp/pub/%09d.jpg" -vcodec mjpeg -sameq /home/ftp/pub/out.avi
5.2 /home/ftp/pub/out.avi ができているはずです。 PCなどで再生してみてください。
[root@armadillo840-0 (ttySC2) /home/ftp/pub]# ls -la /home/ftp/pub/out.avi -rw-r--r-- 1 root root 3705866 Jan 1 15:23 /home/ftp/pub/out.avi