NanoPi NEO2でタイムラプス撮影

部屋を掃除していたらELECOMのWebカメラが出てきました。LinuxMintのマシンに挿してみたところ uvc カメラとして認識するようでしたので、NanoPi NEO2に挿してみたらこちらも認識しました。

なので、TimeLapse撮影ができないか、試してみました。
ググると Ubuntu でTimeLapseをやっている方は結構いるようで、基本的にはそちらに倣ってやってみました。

基本、NanoPi NEO2に合わせている以外はこちらのページのパクリです。

1.カメラ画像の連続キャプチャ

1枚単位での撮影には fswebcam を使うのが簡単なようです。

$ sudo apt-get install fswebcam

でインストールできます。で、連続撮影する場合には、1枚キャプチャするシェルスクリプトを書いて、cron で所定の時間毎に1枚キャプチャ、というのが簡単なようなのですが、NanoPi-NEO2のUbuntu-coreではcronはユーザーに開放されてないっぽいです。crontab -eとしても編集できないですし、ググってもシェルスクリプト内でループしてsleepで時間待ちせよ、みたいなことが書いてあります。

結局、以下のようなシェルスクリプトで連続撮影します。ファイル名は TimeLapse.sh として、ホームディレクトリの下に CaptureImage というディレクトリを作って、そこに置きました。

#!/bin/bash
while true;
do
	DATE=$(date +"%Y%m%d%H%M%S")
	fswebcam --quiet --jpeg 95 --timestamp "%Y-%m-%d %H:%M:%S (%Z)" -r 800x600 /home/pi/CaptureImage/$DATE.jpg
	sleep 2s
done

作成したスクリプトに実行権限を付けてやります。

$ chmod +x TimeLapse.sh

で、実行すると、ザクザクと画像が溜まっていきます。

2.キャプチャした静止画の引取の準備

動画への変換はホスト側でやります。

ホスト側で

$ mkdir nanopi
$ sshfs pi@nanopi-neo2.local: /home/xxx/nanopi

として、sshfsでnanopi側のホームディレクトリをローカルディレクトリにマウントして、これで引き取ります。
(今考えれば、sshfsでマウントしなくても scp でも良かった・・・)

3.画像の変換の準備

ローカル側でffmpegで変換しますが、motionをインストールするほうが楽だという情報があったので、そうしました。

$ mkdir motion
$ cd motion
$ sudo apt-get install motion

4.画像の引取と変換

以下の手順で画像の引取と変換を行います。

$ cp ../nanopi/CaptureImage/*.jpg .
$ c=1 ; for i in ??????????????.jpg ; do mv $i `printf %d $c`.jpg ; c=$((c+1)) ; done
$ ffmpeg -f image2 -r 15 -i %d.jpg -r 15 -an -vcodec libx264 -pix_fmt yuv420p video.mp4

これで TimeLapse ができましたが、静止画の保存サイズが大きいようです。
1分間で3〜4MB出力しているようなので、1週間で40GBくらいになってしまいます。ちょっと要対策ですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)