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.py と timelapse.sh を配置したディレクトリの絶対パスを把握しておいてください。
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引数の意味は次のとおりです。
- 入力 MP4 ファイルのワイルドカード(シェルで展開できるよう必ず引用符で囲む)
- 出力する MP4 ファイルのパス
- フレームを間引く倍率(例:
50は 50 フレームに 1 枚を書き出す)
timelapse.sh は 1 日分のフォルダをまとめて処理するラッパースクリプトです。引数に日付フォルダのパスを渡すと、00〜23 の各フォルダへ順番に移動し、それぞれで cam2_timelapse.py を実行します。結果は日付フォルダ直下に out_00.mp4 〜 out_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 50100です) - 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を再生し、速度や画質が期待どおりか確認してください。