Skip to content

amaterupc/cam2_timelapse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ATOM Cam2 タイムラプスツール

概要

ATOM Cam2 の microSD から取り出した MP4 をタイムラプス動画にまとめるための補助スクリプトです。
cam2_timelapse.py で指定したパターンの MP4 を 1 本の動画にまとめ、timelapse.sh で 24 時間分のフォルダを一括処理します。

必要環境

  • Python 3.x が利用できる macOS または Linux
  • ATOM Cam2 の microSD からコピーした日付フォルダ(例: ~/Movies/Cam2/2024-07-12
  • 推奨: FFmpeg (処理速度が大幅に向上します)
  • (オプション) Python 用 OpenCV ライブラリ(pip install opencv-python
    ※ FFmpeg が未インストールの場合、timelapse.sh は自動的に仮想環境を作成し OpenCV をインストールしてフォールバックします。

ファイル配置

スクリプトは録画データとは別のディレクトリにまとめ、処理対象のフォルダを引数で指定します。

~/Movies/
├── Cam2/
│   └── 2024-07-12/
│       ├── 00/
│       ├── 01/
│       └── ... 23/
└── timelapse-tools/
    ├── cam2_timelapse.py
    └── timelapse.sh

cam2_timelapse.pytimelapse.sh を配置したディレクトリの絶対パスを把握しておいてください。

cam2_timelapse.py

cam2_timelapse.py はワイルドカードで指定した MP4 を自然順に読み込み、最初の動画の解像度と FPS を基準にタイムラプスを生成します。
speed_up_factor に指定した値ごとにフレームを間引くため、数値が大きいほど再生速度が速い動画になります。

python3 cam2_timelapse.py "~/Movies/Cam2/2024-07-12/00/*.mp4" ~/Movies/Cam2/2024-07-12/out_00.mp4 50

引数の意味は次のとおりです。

  1. 入力 MP4 ファイルのワイルドカード(シェルで展開できるよう必ず引用符で囲む)
  2. 出力する MP4 ファイルのパス
  3. フレームを間引く倍率(例: 50 は 50 フレームに 1 枚を書き出す)

timelapse.sh

timelapse.sh は 1 日分のフォルダをまとめて処理するラッパースクリプトです。引数に日付フォルダのパスを渡すと、0023 の各フォルダへ順番に移動し、それぞれで cam2_timelapse.py を実行します。結果は日付フォルダ直下に out_00.mp4out_23.mp4 として出力されます。

#!/bin/sh
# 引数の解析
FORCE_OPENCV=""
while [ $# -gt 0 ]; do
    case "$1" in
        --no-ffmpeg) FORCE_OPENCV="--no-ffmpeg"; shift ;;
        *) if [ -z "$TARGET_DIR" ]; then TARGET_DIR="$1"; elif [ -z "$SPEED_UP_FACTOR" ]; then SPEED_UP_FACTOR="$1"; fi; shift ;;
    esac
done

if [ -z "$TARGET_DIR" ]; then
    echo "使い方: ./timelapse.sh [--no-ffmpeg] /path/to/Cam2/date-folder [speed_up_factor]"
    exit 1
fi

SPEED_UP_FACTOR="${SPEED_UP_FACTOR:-100}"
TOOLS_DIR=$(pwd)
VENV_PATH="$TOOLS_DIR/.venv"

# 仮想環境の準備
if [ ! -d "$VENV_PATH" ]; then
    echo "Creating virtual environment..."
    python3 -m venv "$VENV_PATH"
    
    if command -v ffmpeg >/dev/null 2>&1; then
        echo "FFmpeg found. OpenCV installation is optional (will be installed as fallback)."
    fi
    "$VENV_PATH/bin/pip" install opencv-python
fi

# 仮想環境の有効化
. "$VENV_PATH/bin/activate"

for i in $(seq -f "%02g" 0 23); do
    OUTPUT_FILE="$TARGET_DIR/out_${i}.mp4"
    if [ -d "$TARGET_DIR/$i" ]; then
        if [ -f "$OUTPUT_FILE" ]; then
            echo "Skipping folder $i: $OUTPUT_FILE already exists."
            continue
        fi
        cd "$TARGET_DIR/$i" || continue
        echo "Processing folder: $i (Speed-up: $SPEED_UP_FACTOR)"
        python3 "$TOOLS_DIR/cam2_timelapse.py" . -s "$SPEED_UP_FACTOR" -o "$OUTPUT_FILE" $FORCE_OPENCV
        cd "$TOOLS_DIR"
    else
        echo "Skipping missing folder: $i"
    fi
done

/absolute/path/to/cam2_timelapse.py は実際の保存先に合わせて書き換えてください(例: /Users/you/Movies/timelapse-tools/cam2_timelapse.py)。

スクリプトに実行権限を付与し、ツールディレクトリで日付フォルダを指定して実行します。

chmod +x timelapse.sh
./timelapse.sh ~/Movies/Cam2/2024-07-12

カスタマイズ

  • 再生速度の変更: timelapse.sh の第2引数に数値を指定します。
    ./timelapse.sh ~/Movies/Cam2/2024-07-12 50
    (指定しない場合のデフォルトは 100 です)
  • FFmpeg を使用しない場合: FFmpeg がインストールされている環境でも、強制的に OpenCV を使用したい場合は --no-ffmpeg フラグを付けます。
    ./timelapse.sh --no-ffmpeg ~/Movies/Cam2/2024-07-12 100
  • 出力ファイル名の変更: timelapse.sh 内の out_${i}.mp4 を編集します。
  • フォルダ構成への対応: ATOM Cam2 のファームウェアによってフォルダ構成が異なる場合は、for ループ内のパス設定を調整してください。

注意事項

  • 各時間フォルダ内の MP4 が同じ解像度・フレームレートであることを想定しています。
  • 生成された out_*.mp4 を再生し、速度や画質が期待どおりか確認してください。

About

create a timelapse from videos recorded by ATOM Cam2

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published