植物工場の生育状況をタイムラプス撮影してみました。タイムラプスとは長時間の現象をギュッと短時間に縮めて早送りのように見せるもので、微速度撮影とか低速度撮影とも呼ばれます。Raspberry Pi を使った次のページを参考にさせていただきました。今回は Ubuntu で実行しました。

画像撮影
まず、Ubuntu をインストールしたパソコンにUSBカメラを接続して、1枚だけ画像撮影します。USBカメラは Logicool C270n を使いました。fswebcam をインストールします。
1 |
$ sudo apt install fswebcam |
画像データを保存するための任意のディレクトリを作成します。次のコマンドでは timelapse というディレクトリを作っていますが、名前は適当に付けてください。
1 |
$ mkdir timelapse |
ホームディレクトリ /home/(ユーザー名) に撮影用のスクリプトを作ります。編集は vi エディタでも「テキストエディタ」でも何でも構いません。ファイル名は take_photo.sh としました。内容は次のとおりです。先ほど作成したディレクトリをデータの保存場所として指定しています。
1 |
fswebcam -r 960x720 --no-banner -F 1 -S 120 ~/timelapse/`date +%Y%m%d%H%M%S`.jpg |
このファイルに実行権限を与えます。
1 |
$ chmod +x take_photo.sh |
ファイルを実行すると、画像データが1枚保存されているはずです。
1 2 3 |
$ ~/take_photo.sh $ ls timelapse 20221130143158.jpg |
動画にするには、一定間隔で撮影したデータが多数必要です。例えば10秒の動画には 30fps として300枚の画像データが必要です。1日分を10秒の動画にするには、24時間✕60分/300枚 = 約5分毎に撮影することになります。ここでは、スクリプトが10分毎に実行されるように crontab を編集します。
1 |
$ crontab -e |
使用するテキストエディタを選択して、ファイルの最後に次のように追記してください。
1 2 |
# 10分おきに植物工場を撮影する */10 * * * * /home/ユーザー名/take_photo.sh |
動画を作る
ffmpeg をインストールします。
1 |
$ sudo apt install ffmpeg |
ffmpeg を使うにはデータのファイル名が連番になっている必要があります。撮影したデータは日付を含むファイル名になっているのでそれを変更します。画像ファイルが保存されているディレクトリに移動して、次のコマンドを実行すると5桁の連番のファイル名になります。初めのうちは失敗することもあるかもしれませんので、元データはディレクトリごとバックアップしてから実行すると良いです。
1 2 |
$ cd ~/timelapse/ $ find . -name '*.jpg' | sort -n | awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %05d.jpg\n", $0,a++}' | bash |
次のコマンドで output.mp4 という名前で動画ファイルが出来ます。
1 |
$ ffmpeg -i %5d.jpg -vcodec libx264 -pix_fmt yuv420p -r 30 output.mp4 | bash |
インストールされている動画プレーヤで mp4 を再生できなかったら、VLC Player をインストールすると良いです。
1 |
$ sudo apt install vlc |
コメント