了解です!みんながそのまま再現できるように、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)
- ExifTool を入手してフォルダに
exiftool.exe
を置く - 画像フォルダで以下(EXIF日時があるファイルを日時名に):
exiftool -overwrite_original ^ -ext jpg -if "defined $DateTimeOriginal or defined $CreateDate" ^ "-FileName<${DateTimeOriginal;CreateDate}" -d %Y%m%d_%H%M%S%%-c.%%e .
- 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 を戻すだけ
複数スケジュール:朝だけ/夜だけなど時間帯を調整