ラズパイでタイムラプスを作る最短手順
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=82sudo 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に整えたい、図を入れたい、英語版も欲しい等あればすぐ作ります。





