了解です!みんながそのまま再現できるように、Raspberry Pi で植物観察のタイムラプスを作る手順を、準備→撮影→取得→動画化→トラブル対応の順でコンパクトにまとめました。必要なコマンドはそのままコピペで使えます。


ラズパイでタイムラプスを作る最短手順

0) 前提

  • Raspberry Pi(カメラ接続済み)
  • Raspberry Pi OS(GUIでもLiteでも可)
  • カメラが有効:raspi-config → Interface → Camera 有効
  • 保存先:/home/pi/Photos/

1) 1枚だけ撮るスクリプト(撮影テスト用)

/home/pi/capture_one.py

import picamera, time, os
from datetime import datetime

DIR = '/home/pi/Photos'
os.makedirs(DIR, exist_ok=True)

fn = datetime.now().strftime('%Y%m%d_%H%M') + '.jpg'
with picamera.PiCamera() as camera:
    camera.rotation = 180          # 必要に応じて調整
    camera.start_preview()
    time.sleep(3)
    camera.capture(os.path.join(DIR, fn))
    camera.stop_preview()

実行テスト:

python3 /home/pi/capture_one.py
ls /home/pi/Photos

2) 毎日 6/9/12/15/18 時に自動撮影(cron)

編集:

crontab -e

追記(フルパス+ログ推奨):

0 6  * * * /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1
0 9  * * * /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1
0 12 * * * /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1
0 15 * * * /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1
0 18 * * * /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1

1週間だけ実施したい場合:1週間後に crontab -e で行を削除/コメントアウト(最も簡単で確実)。

(任意)起動直後にも1回撮る:

@reboot /usr/bin/python3 /home/pi/capture_one.py >> /home/pi/camera.log 2>&1

3) 写真の取り出し(PCへ)

同一LANなら

  • SCP(Windows PowerShell)
    scp pi@<ラズパイIP>:/home/pi/Photos/*.jpg C:\Users\<あなた>\Pictures\
    
  • SFTP(GUI)
    Win: WinSCP / Mac: Cyberduck
    接続 → /home/pi/Photos/ をドラッグ&ドロップ

USBメモリで

lsblk                     # 例: /dev/sda1 を確認
sudo mkdir -p /mnt/usb
sudo mount /dev/sda1 /mnt/usb
cp /home/pi/Photos/*.jpg /mnt/usb/
sudo umount /mnt/usb     # 抜く前に必ず

4) 動画化(Windowsでの例)

4-1) 撮影日時でファイル名を整える(ExifTool)

  1. ExifTool を入手してフォルダに exiftool.exe を置く
  2. 画像フォルダで以下(EXIF日時があるファイルを日時名に):
    exiftool -overwrite_original ^
      -ext jpg -if "defined $DateTimeOriginal or defined $CreateDate" ^
      "-FileName<${DateTimeOriginal;CreateDate}" -d %Y%m%d_%H%M%S%%-c.%%e .
    
  3. EXIFが無い残りは「ファイル更新日時」で補完:
    exiftool -overwrite_original -ext jpg ^
      "-FileName<${FileModifyDate}" -d %Y%m%d_%H%M%S%%-c.%%e .
    

4-2) 読み込みリストを作成(順序を固定)

(for /f "delims=" %f in ('dir /b /on *.jpg') do @echo file '%f') > list.txt

4-3) ffmpegで「ゆっくり・フルHD・日付テロップ入り」動画

ffmpeg.exe はパスが通っているか同じフォルダに配置)

ffmpeg -f concat -safe 0 -i list.txt -r 5 ^
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,\
pad=1920:1080:(ow-iw)/2:(oh-ih)/2,\
drawtext=fontfile='C\\:\\Windows\\Fonts\\meiryo.ttc':text='%%{filename}':fontcolor=white:fontsize=28:x=20:y=h-60:box=1:boxcolor=0x00000099" ^
-c:v libx264 -pix_fmt yuv420p timelapse_final.mp4

速さ:-r 5(ゆっくり)→ お好みで 3〜10 に変更
テロップ不要なら drawtext=... を削除


5) よくあるトラブルと対処

cron が動かない

  • フルパスで書く(/usr/bin/python3/home/pi/...
  • crontab -l で確認、camera.log を見る
  • Pi の時刻ズレに注意(Wi-FiでNTP同期)

VNC で「Cannot currently show the desktop」

  • ヘッドレス運用時は /boot/config.txt に追記:
    hdmi_force_hotplug=1
    hdmi_group=2
    hdmi_mode=82
    

    再起動:sudo reboot

VNC のパスワードを忘れた

sudo vncpasswd -service
# 認証方式をパスワードに固定したい場合
echo "Authentication=VncAuth" | sudo tee /root/.vnc/config.d/vncserver-x
sudo systemctl restart vncserver-x11-serviced

USBを安全に抜く

  • コピー後に 必ず sudo umount <マウント先>
  • いきなり抜くとUSB側のデータ破損の恐れ

SDカード破損で起動しない・写真を救出したい(Windows)

  • **DiskInternals Linux Reader(無料)**で ext4 を読み、/home/pi/Photos/ をエクスポート
  • それでも読めなければ PhotoRec.jpg をサルベージ(ファイル名は連番になる)

ffmpeg の -pattern_type glob が使えない

  • 上記の list.txt + concat 方式を使う(本手順で採用)

ExifTool の警告「No writable tags set」

  • その画像に EXIF 日時が無い → 上の「更新日時で補完リネーム」を実施

6) 片付け&運用メモ

  • 1週間終わったら crontab -e から撮影の行を削除
  • 写真は定期的にPCやクラウドへバックアップ
  • タイムラプスの自動生成までPi側でやりたい場合は、7日後に ffmpeg を走らせるスクリプト+cron を追加すれば全自動化も可能

以上です!
この手順どおりに進めれば、「毎日決まった時刻に撮影 → 1週間分をフルHDの見やすいタイムラプスに仕上げる」 ところまで再現できます。
配布用にPDFに整えたい、図を入れたい、英語版も欲しい等あればすぐ作ります。

 

1枚だけ撮るスクリプトをcronで動かし続ければ、好きな期間撮影ができますね

そうです、その通りです 👍

✅ Cron × 単発スクリプトのメリット

スクリプトは「1枚だけ撮る」シンプル設計にしておく

実際の撮影スケジュールは cron 側で制御(6時, 9時, 12時… など自由に設定可能)

結果として「好きな間隔 × 好きな期間」分だけ撮影が続けられる

✅ 運用イメージ

例:1日5回 × 1週間

0 6 * * * /usr/bin/python3 /home/pi/capture_one.py
0 9 * * * /usr/bin/python3 /home/pi/capture_one.py
0 12 * * * /usr/bin/python3 /home/pi/capture_one.py
0 15 * * * /usr/bin/python3 /home/pi/capture_one.py
0 18 * * * /usr/bin/python3 /home/pi/capture_one.py

→ 設定したまま放置で1週間分の写真がたまる

期間を変えたいとき

撮影をやめる → crontab -e で該当行を削除 or # コメントアウト

撮影間隔を変える → cron の時刻部分を書き換える

✅ さらに工夫

長期観察:植物や季節変化など、数週間〜数ヶ月でも可能

特定期間のみ:プロジェクトが終わったら crontab を戻すだけ

複数スケジュール:朝だけ/夜だけなど時間帯を調整