PR

ラズパイ4とCameraModule3でタイムラプス撮影する方法

手持ちのRaspberry piとカメラモジュールを使ってTimelapse撮影を行う方法を紹介します。

3dプリンターの造形中の動画など撮れると面白いですよ!

記事内の一部に広告を含みます。

先に結論:ラズパイ4とCameraModule3でタイムラプス撮影する方法

先にどんなコマンドを打てば良いか、結論を書いておきます。
以降の項目で順に説明しますので、ここで解らなくてもOKです。

わかる人はここだけ見れば良いと思います。

  1. 画角、AF、AWBを確認する: 
    libcamera-hello -t 0  –awb fluorescent –autofocus-mode manual –lens-position 5
  2. コマ撮り撮影する
    libcamera-still –width 1920 –height 1080 –awb fluorescent –autofocus-mode manual –lens-position 5 -o 画像/timelapse%04d.jpg -t 14800000 –timelapse 10000
  3. (必要なら、)決めのフレームをカサ増しする
    for i in {0613..0673}; do cp timelapse0612.jpg timelapse${i}.jpg; done   
  4. 結合して動画にする
    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 Pi4 + CameraModule 3

スイッチサイエンス: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を使ったタイムラプス撮影の方法をまとめました。
最後に、ポイントだけまとめて再掲します。

ご参考になれば幸いです。

  1. 画角、AF、AWBを確認する: 
    libcamera-hello -t 0  –awb fluorescent –autofocus-mode manual –lens-position 5
  2. コマ撮り撮影する
    libcamera-still –width 1920 –height 1080 –awb fluorescent –autofocus-mode manual –lens-position 5 -o 画像/timelapse%04d.jpg -t 14800000 –timelapse 10000
  3. (必要なら、)決めのフレームをカサ増しする
    for i in {0613..0673}; do cp timelapse0612.jpg timelapse${i}.jpg; done   
  4. 結合して動画にする
    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