Help us understand the problem. What is going on with this article?

ラズパイでタイムラプス撮影

More than 1 year has passed since last update.

家で放置されてるラズパイ3を使って何か作ろうと思い、外を撮影したタイムラプス動画の作成に挑戦してみました。
※タイムラプスとは、一定時間毎に撮影した写真をつなぎ合わせてパラパラ漫画のような動画にしたものです。

説明しないもの

  • ラズパイの初期設定
  • Macからラズパイへのssh接続方法

環境

前提

  • ラズパイにUSBカメラを接続して認識済み
  • PCからラズパイに-Xでssh接続済み

今回はラズパイ3を使用していますが、ラズパイzeroやzerowでも可能です。

実装

準備

ラズパイにssh接続した状態で以下のパッケージをインストールします。

sudo apt-get install fswebcam feh libav-tools -y
  • fswebcam : USBカメラ撮影
  • feh : 画像確認
  • libav-tools : タイムラプス動画への変換

撮影スクリプト

今回はシェルスクリプトで実装します。
(といっても1行の簡単なコードですが)

ssh接続したラズパイにcamera.shファイルを作成し、以下のコードを実装します。

camera.sh
fswebcam -r 1920x1080 --no-banner -D 2 Pictures/`date +%Y%m%d%H%M%S`.jpg

ファイル名はyyyyMMddhhmmss.jpgの形式になります。

あと、実行可能ファイルにするのをお忘れなく

chmod +x camera.sh

オプション説明

  • -r : 撮影解像度サイズを指定
  • --no-banner : 撮影情報テキストの表示無効
  • -D : ディレイ値、2秒後に撮影

外を撮影する場合、重要なのは-D 2オプションの遅延です。
この遅延なしで撮影すると、真っ白な画像になります。
どうやらUSBカメラが起動直後にカメラのピントやホワイトバランス?の自動調整が数秒行われるようで、調整完了を待ってから撮影する必要があります。
今回は2秒の遅延中にカメラの自動調整を待ち、撮影するといい感じの画像になりました。
(遅延値はUSBカメラにより違うと思います)

camera.shを実行すると無事に撮影できました。

camera_image.jpg

撮影画像の確認

以下のコマンドで画像表示できます。

feh 画像ファイル名

連続撮影

準備

あとは撮影スクリプトを定期的に実行するだけです。
今回はcronで1分おきにcamera.shを実行して撮影します。

crontab -e

crontabに以下を追加しました。

*/1 * * * * /home/pi/camera.sh

撮影されているか確認すると、無事1分間隔で撮影されてました。

20171204231001.jpg
20171204231101.jpg
20171204231201.jpg
20171204231301.jpg
20171204231401.jpg
20171204231501.jpg
20171204231601.jpg
20171204231701.jpg
20171204231802.jpg
20171204231901.jpg
20171204232001.jpg
20171204232101.jpg
20171204232201.jpg

撮影開始

USBカメラとラズパイを外に向けて放置するだけです。
今回は家のベランダからコンセントに接続して撮影しました。

動画変換

放置して写真が撮り溜まったところで、タイムラプス動画に変換します。

ですが、タイムラプス動画に変換するためにはファイル名が連番になっている必要があるようです。
yyyyMMddhhmmss形式から変換する方法が分からないため、ファイル名をいったん0埋め5桁の00000からはじまる連番に変更します。

rename.sh
find . -name '*.jpg' | sort -n | awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %05d.jpg\n", $0,a++}' | bash

これでファイル名が

00000.jpg
00001.jpg
00002.jpg
00003.jpg
...

のように連番になりました。

その後、タイムラプス動画への変換コードを実行します。

convert.sh
ffmpeg -f image2 -r 15 -i %05d.jpg -r 15 -an -vcodec libx264 -pix_fmt yuv420p output.mp4

output.mp4が出力され、タイムラプス動画が作成できました。

完成

タイムラプス動画はscpでラズパイから取り出せます。

scp pi@raspberrypi.local:/home/pi/Pictures/output.mp4 .

動画はこんな感じになりました。

ラズパイ3とUSBカメラで空をタイムラプス撮影した pic.twitter.com/FHTAD8kSMk

— イケムラ (@ikemura_jp) 2017年12月5日

作り終えて

安いUSBカメラなので画質もそれなりでした。
キレイに撮影するには

  • fswebcam --list-controlsでカメラをチューニングする
  • 画質の良いカメラにする
  • 一眼レフを使用する このどれかが良いと思います。 今回はチューニング無しで撮影しています。

最近はスマフォでタイムラプス撮影が手軽にできますが、
ラズパイ+カメラ+モバイルバッテリーなら電池持ちも抜群に長く、撮影も変換も全て自動化できそうです。

撮影後にSNSへ自動投稿してSlackに通知、なんて事もできそうです。
色々カスタマイズして楽しめますね。

ikemura23
Androidアプリエンジニアです。 マイブームはFlutterとAWS
http://banbara-studio.hatenablog.com/
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。東京(三軒茶屋)/京都(四条烏丸)/札幌/大阪/福岡に展開中!Twitterで情報配信中https://twitter.com/yumemiinc
http://www.yumemi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした