部屋を掃除していたら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くらいになってしまいます。ちょっと要対策ですね。