読者です 読者をやめる 読者になる 読者になる

もみあげあしめ

組み込みとかIoTとか、いろいろ

Raspberry Pi でタイムラプス(低速度撮影)する

Raspberry Pi でタイムラプス(低速度撮影)作ってみた。

f:id:shima_nigoro:20160803224405p:plain:w300

アングルや撮影対象のセンスの悪さについてはノーコメントで…。


ちなみに、撮影にはRaspberry Pi カメラモジュール v1.3 を使っています。


続いて、タイムラプスの作り方を書いていきます。

1. 機材をそろえる

Raspberry Pi 3 Model B (Element14)

Raspberry Pi 3 Model B (Element14)

  • microSDカード(16GBあれば十分)

  • 2A以上を供給できるmicroUSB接続の充電器

2. Raspberry Pi を初期設定する

・コンピュータの知識がある程度ある方は下記をどうぞ

・よくわからないという方は 「ラズベリーパイ 初期設定 - Google 検索」をどうぞ

3. Raspberry Pi でカメラを使えるようにする。

・カメラモジュールを Raspberry Pi につなぐ

・設定を変更する

sudo raspi-config

※ 6 Enable Camera ⇒ Yes ⇒ Finish

4. インターバル撮影用のスクリプトを保存する

・get_still.sh として保存する

#!/bin/sh

COUNT=`cat count`
OUTPUT_IMAGE=`printf "%08d.jpg" ${COUNT}`

#capture image
raspistill -o ${OUTPUT_IMAGE} -vf -w 1920 -h 1080

#count up
expr `cat count` + 1 > count

※「-w 1920 -h 1080」で画像サイズを 1920*1080 に、「-vf」で上下反転しています。

・撮影画像の詳細を変更したければ下記コマンドで一覧が出ます。

raspistill --help

・timelapse.sh として保存する

#!/bin/sh

for i in `seq 1 9999`
do
  sh get_still.sh && sleep 1
done

※とりあえず約6秒間隔で9999回保存されます。(raspistill はデフォルトで1枚を5秒で撮影します)
#-tlオプションで時間も設定できますが、なぜかms単位なので使いづらい…。
 -tオプションでタイムアウトする時間もms単位で設定できるが、最大値が不明。

5. インターバル撮影する

・画像を連番で保存するための初期値を設定する。

echo 0 > count

・インターバル撮影を開始する

sh timelapse.sh

※撮影前に1枚当たりのデータサイズは確認しておきましょう。

・撮影は「Ctrl + C」で止められます。

6. 動画を生成する

動画の生成には FFmpeg を利用します。インストール方法は下記記事を参照

・撮影画像があるディレクトリで下記コマンドを実行(ほぼ再生時間と同じくらいかかります)

ffmpeg -f image2 -r 15 -i %08d.jpg -r 15 -an -vcodec libx264 video.mp4

※連番 JPEG 画像群を 15fps の音声なし H.264 で video.mp4 という動画ファイル名に出力する。

参考:連番静止画からタイムラプス動画を作る - Qiita

これでタイムラプスの作成は完了です。お疲れ様でした。

6. 補足

撮影枚数と撮影時間

氷が解けるタイムラプスは1分程度ですが、撮影した画像は1222枚です。
1枚6秒間隔なので、撮影時間は約2時間。ほとんど放置していただけですが。

所感

タイムラプスは撮影を始める前の最初のアングルが重要だと思い知らされました。
最初から最後まで中心に撮影対象があるようにしないと、なんだか微妙になります…。

Raspberry Pi のカメラモジュールを固定する機材ってないんでしょうか?

YouTube へのアップロード

Google のアカウントがあれば、YouTube にアクセスしてすぐに動画をアップロードできます。
アップロードする前にまず、自分のチャンネルを作成しましょう。
そのままアップロードするとチャンネル名が登録している氏名になってしまう!
#アップロードしたら、いきなり名前が表示されて焦った。