28 10月 2015

Intel Edisonでタイムラプス撮影 その1

以前、ストップモーション ムービーを作って遊んだ時は、ノートPCを使ってテザー撮影したけれども、タイムラプスの撮影をする時は撮影画像をその場でチェックするわけじゃないから、Intel Edisonでも十分可能だろうということで試してみた。

pkTriggerCord

カメラはこういう時の遊び用に使っているPentax K20Dなので、リモートコントロールのソフトにはpkTriggerCord (ver. 0.82.04)を使用した。
ソースをダウンロードして、GUIはいらないので、
# make cli
# make install
で、あっさりと完了。
OTGケーブルを経由してK20Dを繋いだら、とりあえず1枚撮影してみる。
# pktriggercord-cli --green -o test.jpg
画面のないEdison上では画像を確認できないので、PCに転送して撮影できていることを確認。

簡単にタイムラプスのテストもしてみた。
# pktriggercord-cli --frames 10 --delay 10 --green -o test
上記のコマンドで10秒毎に10枚撮影してくれる。画像の転送時間を考慮して待ち時間を調整してくれるので、例えば転送に4秒かかったら6秒待機して、正確に10秒毎に撮影をしてくれる。

ImageMagick

ちょうどpkTriggerCordのサイトにタイムラプス撮影の解説もあったので、それに従ってクロップとリサイズもEdison上でやってしまうことにした。
ImageMagick (ver. 6.9.2-4)のソースをダウンロードして、
# ./configure
# make
いくつか警告が出たけれども、エラーはなく終了。
先程撮影した画像でテストしてみると、
# identify test.jpg
identify: no decode delegate for this image format 'test.jpg'
と言われてしまった。
# identify -list configure | grep DELEGATES
で確認してみると、確かにjpegがない。
jpegのライブラリがないのが原因らしいので、インストールする。opkgで探してみると、
# opkg list | grep jpeg
libjpeg8とlibjpeg-devというのが見つかったので、インストールしてみた。
# opkg install libjpeg8
# opkg install libjpeg-dev
そうしたら、再度
# ./configure
してから、
# make
する。そうすると、
# identify -list configure | grep DELEGATES
DELEGATES bzlib mpeg jpeg xml zlib
となって、identify コマンドもきちんとjpeg画像の情報を表示してくれるようになった。

FFmpeg

最後はFFmpeg。静止画から動画の変換はEdisonでしなくてもいいかなと思ったけれども、せっかくなので挑戦してみた。

ソースはgitからクローンする。
# git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
(git クライアントは# opkg install gitでインストールできる。)
# ./configure
を実行すると、prコマンドがなくてエラーになる。prコマンドはcoreutilsに含まれているので、
# opkg install coreutils
でインストール。
すると今度はyasm/nasmがないとエラーがでる。
yasm/nasm not found or too old. Use --disable-yasm for a crippled build.
メッセージの通り、--disable-yasmをつけてやり直し。
# ./configure --disable-yasm
# make
すると、makeの途中でエラーが出た。
libavcodec/x86/cabac.h:192:5 error: 'asm' operand has impossible constraints
gccのインライン アセンブラのエラーらしい。Edisonにインストールされているgccはver. 4.9.1。 NASM (ver. 2.11.08)をインストールしたら何か変るかと試してみたけれども、同様のエラーがでる。
該当のヘッダを使用しているソースを見てみると、H264のデコード関連らしい。今回の目的(静止画から動画への変換)には必要のない機能なので、その機能を除外してmakeしてみた。
# ./configure --disable-decoder=h264
そうすると、エラーになる箇所はスキップしてビルドできた。

ついでなので、色々と試してみたところ、--disable-asmまたは--disable-optimizationsを指定するとH264のデコード機能を生かしたままビルドできた。でも、実際に計測はしていないけれども、恐らく他のコーデックのエンコード/デコード性能も落ちると予想できるので、今回はH264のデコードを諦めることにした。

さらについでに、H264のエンコードをサポートしたい場合は、x264のライブラリをopkgでインスールして、--enable-libx264を指定すれば良いみたい。(このスレッドを参考にした。)
# opkg install libx264-133
# opkg install libx264-bin
# opkg install libx264-dev
# opkg install libx264-staticdev
最終的にconfigureのオプションは以下のようになった。
# ./configure --disable-decoder=h264 --enable-libx264 --enable-gpl
あとはmakeして完了。(ちなみに、ビルドに2時間くらいかかる。)
# ffmpeg -codecs | grep 264
.EV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb)
H264のエンコードをサポートしたffmpegのできあがり。

0 件のコメント:

コメントを投稿