やったこと
- ラズパイとラズパイ標準カメラを使って10分に一回花の撮影をする
- 撮影した画像をffmpegを使ってmp4(パラパラ漫画風)に変換
[]
(https://www.youtube.com/watch?v=pPORuDOHNQw)
結構お手軽にできます。
ラズパイとラズパイ標準カメラを使って10分に一回撮影する
やり方は方法などはこちらのブログからまるっと拝借しました
上記ブログで撮影用のコードも公開されているのでcloneしてきます
基本的には上記のコードを使って
$ python shutter.py
を実行すれば写真が1回分撮影されるので、cronを使って10分に一回 shutter.py
が実行されるようにします
crontabでcronのエディターを表示
$ sudo crontab -e
10分に一回撮影する場合は以下のように記述
*/10 * * * * python /home/pi/denpa-gardening/shutter.py
ちなみに、もし10秒に一回撮影したい場合はこんなふうに指定するらしい
* * * * * for i in `seq 0 10 59`;do (sleep ${i} ; python /home/pi/denpa-gardening/shutter.py) & done;
crontabの記述が正しく書けた場合は保存してエディターを閉じると 「新しいラインを記録したよ」みたいな表記がでる
これで撮影された画像は photo_data
ディレクトリ下に格納されていきます。
トップページに貼ったヒヤシンス動画の場合、約3週間弱の期間を10分間隔で撮影し続け、得られた2000枚ほどの画像から作成しています。
撮影した画像をffmpegを使ってmp4に変換
撮影したjpeg画像をパラパラ漫画のように繋げて、(タイムラプス)動画を作成します。linuxのコマンドツールであるffmpeg
を利用します。
自分の場合は、ラズパイへscpして photo_data
下の画像を全て母艦のMacに転送しました。ffmpeg
の処理がそこそこ重いのでMacへ移動させましたが、そこまで多くの画像枚数が無いのであればラズパイ上で画像→動画作成の処理をしても良いかもしれません。その場合はこちらのブログを参考にしてavconv
で作成してみてください。
以下はffmpeg
を使う場合です。
# 例
$ ffmpeg -f image2 -r 30 -i %04d.jpg -r 30 -an -vcodec libx264 -pix_fmt yuv420p video.mp4
ここで生成されるvideo.mp4
が目的のタイムラプス動画となります。
ffmpegの引数について
それぞれのパラメータの意味はこちらを参照
ここで最も重要なパラメータは -r
と-i
です。
-r
は1秒間を何フレームで表現するかという引数です。
上記例では30としているので30フレームが1秒となる動画が作成される。撮影時は10分で1フレームを撮影していたので、30フレームは300分=5時間、つまり5時間を1秒に圧縮したタイムラプス動画を作成することになる。
-i
は静止画名を表す表記の仕方で、%04d
で4桁、%05d
で5桁の数字を表します。
上記例では 0000.jpgから9999.jpgまでのファイル名を指定していることになります。最も注意すべき点としては、ffmpegは-i
で指定するファイル名を0001から始まる連番にしなければいけないです。ただ単に連番にするだけでなく、0001から始めないといけないのがポイント。
仮に、途中に存在する余計なフレームを削除したりして完全な連番でなくなった場合は新たに全ファイル名をrenameして0001から始まる連番にしないといけません。そんなときはMacであれば homebrewでinstallできるrename
コマンドなどがオススメ。使い方は簡単です。
$ brew install rename
# 例
$ rename -N 0001 -X -e '$_ = "$N"' *.jpg
-N
でスタートする番号を指定します。ここでは0001をスタートとして指定したので、0001.jpg~9999.jpgに一括でファイル名をrenameしてくれます。
- renameコマンドの使い方参考: https://qiita.com/GENYA/items/c3bdd6b187c2a9e40be1