はじめに
この記事は、下記「電波ガーデニング」の一つの機能を実現するためのものですが、単独でも成立する記事にしていますので、「電波ガーデニング」をしたい人、タイトル通りのことだけやりたい人、両方の方が対象の記事となります。
そうです。まさに今週のお題「植物大好き」です。
もっと手軽に簡易版を作成したい方は、以下記事参照ください。
Raspberry Piで撮影からタイムラプス動画生成まで
Raspberry Piでタイムラプス撮影して、PCに写真コピーして動画生成は何度かやったことあるのですが、Raspberry Piで動画生成まで完結できるとうれしいですねというわけでやってみました。動画生成以外は今までやったことの組み合わせです。
部品リスト(必要なもの)
必要なものは以下です。カメラは、Raspberry Pi用のカメラモジュールを前提としています。
Raspberry Pi 3 カメラモジュール microSDカード Raspberry Piへの給電ケーブル。タイプAオス- マイクロタイプBオスハードウェアテスト
Raspberry Piセットアップとカメラテスト
下記記事を参照に基礎的なセットアップ($ sudo apt-get upgrade
するところ)まで完了させて下さい。カメラモジュールとRaspberry Piをフレキケーブルで接続することを忘れずに。
その後、Raspi-configセットアップで、Interface
のタブを開きカメラ(camera)
をEnable
に設定して下さい。
Raspberry Piを再起動した後、以下コマンドで撮影しましょう。
$ raspistill -o test.jpg
エラーなく、test.jpg
という写真ファイルが生成されればOKです。
Raspberry Piの自動撮影
自動撮影のためのソフトは以前Raspberry Piでデジカメ作った時に作ったものを使い回しています。 http://karaage.hatenadiary.jp/entry/2014/09/19/113816
ちょっとだけ自己満足的に改良していますが、機能、性能的には変わっていません。コードは以下にあります。
以下コマンドでクローン(コピー)して
$ cd
$ git clone https://github.com/karaage0703/denpa-gardening.git
以下コマンドで撮影できます。
$ python ~/denpa-gardening/shutter.py
撮影したファイルは、~/denpa-gardening/photo_data
というディレクトリの中に保存されます。ファイル名は1から順に撮影のたびにインクリメントされていきます。数字をクリアしたい場合は、photo_data
というディレクトリの中にあるcamera.set
というファイルにファイルNoが書かれているので、中身を手動で書き換えてください。
更にcrontab -e
実行して、末尾に以下追記すると10分ごとに写真を自動で撮影して保存するようになります。
*/10 * * * * python ./denpa-gardening/shutter.py
タイムスタンプ追加
写真にタイムスタンプ(日付、時間)が刻印されていると後で見る時便利そうなので追加してみることにしました。
以前妻のためにタイムスタンプを刻印するソフトをMac用につくったのですが(下記リンク参照)、フォントの場所の指定だけ変えてやれば、Raspberry Piでそのまま動きました。やったね。作っててよかった。なのでそれを持ってきます。
以下コマンドを実行すれば、ファイルにタイムスタンプが自動で埋め込まれます。元には戻せないのでタイムスタンプ無しのも欲しい人はあらかじめどこかにバックアップを取っておいて下さい。
$ python ~/denpa-gardening/photo_exif_date_print.py <filename>
タイムスタンプ追加前
タイムスタンプ追加後
Raspberry Piで動画生成
avconvインストール
Raspbian公式サイトの推奨はmemcoder
のようなのですが、現在のRaspbian Jessieではインストールできなくなっています。色々調べたらavconv
でやってうまくいっている人がいたようなので、avconv
でやってみることにします。
$ sudo apt-get update $ sudo apt-get install libav-tools
ffmpeg
を自分でビルドして使っている人もいるようですので、興味ある方は本記事末にある参考リンク等を参照下さい。
avconvはffmpegに統合されたようなので、ffmpegを使うのが良いようです。
avconvで動画エンコード
例えば、000001.jpg
から000100.jpg
のファイルが配置されている場合、そのディレクトリに移動して以下コマンドを実行します。
$ avconv -y -f image2 -r 10 -i %6d.jpg -aspect 16:9 -s '1980x1080' output.mp4
$ ffmpeg -y -f image2 -r 10 -i %6d.jpg -aspect 16:9 -s '1980x1080' output.mp4
-r
の10
がfps(フレームレート)です。その他のオプションはffmpegのドキュメントを参照ください。
`output.mp4'という動画ファイルが生成されれば成功です。自分は最初うまくいかなかったので、うまくいっている人のオプションを参考にしてチャレンジしたら成功しました。
動画は以下のような感じになります。
自動撮影から動画生成までの流れを自動化
今までやってきた作業を自動化するmake-movie.sh
というスクリプトを作りました。使い方は以下のコマンドを実行するだけです。
$ ~/denpa-gardening/make-movie.sh
スクリプトは以下の作業を行います。
photo_data
以下にある画像ファイルを作業ディレクトリwork
にコピーwork
にある全ての画像ファイルにタイムスタンプを追加work
にある画像ファイルを動画ファイルにエンコードしてdenpa-gardening
ディレクトリにoutput_日付.mp4
というファイル名で保存work
ディレクトリのファイルを削除
タイムスタンプを追加するかしないか、動画のオプションなどはスクリプトの変数で変更できるようにしてあるので、興味ある方はスクリプトの中身をみて書き換えたりしてみるとよいかと思います。
画像ファイルでディスクがいっぱいになる前に、定期的にスクリプト使って写真ファイルを動画にして、画像ファイルは以下コマンドで削除しておくとよいかもしれません。
$ rm ~/denpa-gardening/photo_data/*.jpg
まとめ
基本的に今までやったことの組み合わせなので楽でした。タイムラプス動画は楽しいので、これだけでも色々使い道があるのじゃないかなと思います。
参考リンク
- GitHub - pageauc/pi-timolo: Raspberry PI-TIMOLO ( PI-TImelapse, MOtion, LOwLight ) uses RPI picamera and OpenCV for Remote Headless Security Monitoring using Motion Tracking, Rclone Auto Sync files with remote storage services. Auto Twilight Transitions and Low Light Camera Settings. Panoramic images using PanTiltHat and More. This project is featured on GitHub Awesome software.
- Raspbian jessie : no package for mencoder · Issue #9 · pageauc/pi-timolo · GitHub
- mencoder not in jessie? - Raspberry Pi Forums
- avconvのオプション
- Raspberry Pi Documentation - Camera
関連記事
変更履歴
- 2020/05/22 動画エンコードソフトであるavconvのffmpegへの統合に伴いavconvをffmpegに変更