手持ちのRaspberry piとカメラモジュールを使ってTimelapse撮影を行う方法を紹介します。
3dプリンターの造形中の動画など撮れると面白いですよ!
先に結論:ラズパイ4とCameraModule3でタイムラプス撮影する方法
先にどんなコマンドを打てば良いか、結論を書いておきます。
以降の項目で順に説明しますので、ここで解らなくてもOKです。
わかる人はここだけ見れば良いと思います。
- 画角、AF、AWBを確認する:
libcamera-hello -t 0 –awb fluorescent –autofocus-mode manual –lens-position 5 - コマ撮り撮影する
libcamera-still –width 1920 –height 1080 –awb fluorescent –autofocus-mode manual –lens-position 5 -o 画像/timelapse%04d.jpg -t 14800000 –timelapse 10000 - (必要なら、)決めのフレームをカサ増しする
for i in {0613..0673}; do cp timelapse0612.jpg timelapse${i}.jpg; done - 結合して動画にする
ffmpeg -hide_banner -v error -y -f image2 -pattern_type glob -i “timelapse*.jpg” -pix_fmt yuv422p -vcodec libx264 -threads 4 -segment_format mp4 out.mp4 -framerate 30
なお、私の環境は下記の通りです。
- cat /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.2
- lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
ラズパイ4でタイムラプス撮影する方法1:下準備をする
タイムラプス撮影に必要なソフト、ハードを用意します。
ソフト側を用意する
タイムラプス撮影に必要なソフトはlibcamera-appsとffmpeg、Macならafpの設定というところです。
libcamera-appsをインストールする
libcamera-appsをインストールします。コマンドは下記です。
sudo apt install libcamera-apps
afpを設定する(Macとファイルをやりとりする場合)
ファイル共有のため、相手がMacの場合はafpを有効にしておくと楽です。コマンドと設定は下記です。
sudo apt install netatalk
sudo chmod 755 /etc/netatalk/afp.conf
vim /etc/netatalk/afp.conf
afp.confの設定変更は下記9行目を自分がルートとして公開したいパスを追記するのみです。
;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
[Homes]
basedir regex = /home/bonokaba
; [My AFP Volume]
; path = /path/to/volume
; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes
ffmpegをインストールする
私は動画の結合処理をMac上でしたかったので、ffmpegはMacにインストールしてあります。
ここではインストール方法は割愛します。
ハード側を用意する
タイムラプス撮影をするためのハードを用意しましょう。
長時間の撮影になりますので、きちんとした三脚で固定することをお勧めします。
私は下記構成です。
Raspberry piとファン付きヒートシンクケース、CamemraModule3
Raspberry Pi 4 Model B Rev 1.2 とファン付きヒートシンクケース
SunFounder Raspberry Pi 4 ファン ケース,アルミ製、2 冷却ファン、ヒートシンク付き,ラスベリー パイ 4B用
スイッチサイエンス:Raspberry Pi カメラモジュール V3
カメラマウントは3Dプリンターで自作しました。(カメラが外向きと内向きの2つあります)
上記カメラマウントのデータは下記です。ご自由に改変してお使いください。(M3ネジとナットを別にご用意ください)
なお、三脚と水平器はこちらです。
ラズパイ4でタイムラプス撮影する方法2:画角、AF、AWBを確認する
ソフト・ハードの準備ができたら撮影の準備をしましょう。
下記で、カメラがライブビュー状態になりますので、画角を確認しましょう。
libcamera-hello -t 0
続いて、マニュアルフォーカスを設定します。(オートフォーカスで撮影すると、コマごとにフォーカス位置がずれてしまう恐れがあるので、固定します)
基本のコマンドは下記です。
–lens-positionの後ろの数値nは焦点距離を1/n mに設定します。下の例では5なので、1/5m=20cmに焦点が定まる設定です。
libcamera-hello -t 0 --autofocus-mode manual --lens-position 5
さらに、同様の理由でホワイトバランスも固定しましょう。
コマンドは下記です。–awbの後ろの文字列は色温度が低い方から順にincandescent(2500K to 3000K)、tungsten(3000K to 3500K)、fluorescent(4000K to 4700K)、indoor(3000K to 5000K)、daylight(5500K to 6500K)、cloudy(7000K to 8500K)から選択できます。
libcamera-hello -t 0 --autofocus-mode manual --lens-position 5 --awb fluorescent
これで、カメラの設定は完了です。
なお、libcameraコマンドの詳細については公式サイトに記述があります>こちら
ラズパイ4でタイムラプス撮影する方法3:コマ撮り撮影する
準備ができたので実際の撮影をしましょう。
タイムラプス撮影のためのコマンドは下記です。
libcamera-still --width 1920 --height 1080 --awb fluorescent --autofocus-mode manual --lens-position 5 -o 画像/timelapse%04d.jpg -t 3600000 --timelapse 10000
–awbと–lens-positionは先に確認した値を設定してください。
-oで出力先のパスとファイル名
-tは撮影する時間(msecなので1時間なら3600000)
–timelapseは撮影間隔(msecなので10秒おきなら10000) です。
なお、撮影間隔は動画をどのくらいの時間でまとめるかを考慮し、下記の式で求めます。
撮影間隔 i = 撮影時間 T[s] / (秒間フレーム数 f x 動画時間 t[s])
ラズパイ4でタイムラプス撮影する方法4:(必要なら、)決めのフレームをカサ増しする
例えば3dプリンターの造形をタイムラプス撮影したい場合、出来上がりのコマで数秒ホールドした方が何を作ったのかがよくわかる動画になります。
例えば、最後のフレームを数秒カサ増しする場合のコマンドは下記です。
for i in {0613..0673}; do cp timelapse0612.jpg timelapse${i}.jpg; done
ラズパイ4でタイムラプス撮影する方法5:結合して動画にする
最後に、ffmpegで静止画のファイル群を動画にまとめます。
実行するコマンドは下記です。
(下の例の場合、静止画を保存したディレクトリで実行してください。)
ffmpeg -hide_banner -v error -y -f image2 -pattern_type glob -i "timelapse*.jpg" -pix_fmt yuv422p -vcodec libx264 -threads 4 -segment_format mp4 out.mp4 -framerate 30
まとめ:ラズパイ4でタイムラプス撮影する方法
以上、ラズパイ4+カメラモジュール3を使ったタイムラプス撮影の方法をまとめました。
最後に、ポイントだけまとめて再掲します。
ご参考になれば幸いです。
- 画角、AF、AWBを確認する:
libcamera-hello -t 0 –awb fluorescent –autofocus-mode manual –lens-position 5 - コマ撮り撮影する
libcamera-still –width 1920 –height 1080 –awb fluorescent –autofocus-mode manual –lens-position 5 -o 画像/timelapse%04d.jpg -t 14800000 –timelapse 10000 - (必要なら、)決めのフレームをカサ増しする
for i in {0613..0673}; do cp timelapse0612.jpg timelapse${i}.jpg; done - 結合して動画にする
ffmpeg -hide_banner -v error -y -f image2 -pattern_type glob -i “timelapse*.jpg” -pix_fmt yuv422p -vcodec libx264 -threads 4 -segment_format mp4 out.mp4 -framerate 30