Osmo Action 5 と DJI Mic 2(2台)で撮影した素材を、外付けSSD内のプロジェクト構成へ自動整理する個人用スクリプトです。
このリポジトリは公開していますが、Issue / Pull Request を含むコントリビューションは受け付けていません。
- 複数デバイス(Osmo Action / DJI Mic x2)の素材を一括検出して転送
- 撮影日時ベースで日付ごとに素材を分類
- 04:00 を日付切替時刻として、深夜撮影を前日扱いに調整
- プロジェクトフォルダの新規作成または既存選択を対話的に実行
- 転送済み履歴(
.import_history)で重複転送を防止
- macOS
zshdiskutilrsyncopendate(-j,-vオプションを使用)
Linux 互換は想定していません(diskutil / open / date オプション依存のため)。
スクリプトは、指定したSSDのマウントポイント配下に次の構成がある前提で動きます。
<SSD_MOUNT>/
└── 001 Camera/
├── Footage/
│ ├── .import_history # 初回実行時に自動作成
│ ├── TIER_1__KEEP/ # 必要に応じて自動作成
│ ├── TIER_2__STORE/ # 必要に応じて自動作成
│ └── TIER_3__TEMP/ # 必要に応じて自動作成
├── _Template/ # 任意(新規作成時に中身をコピー)
└── _Assets/ # 任意(新規作成時に Assets シンボリックリンク作成)
001 Camera/Footage が存在しない場合はエラー終了します。
chmod +x ./newvlog.shスクリプトは保存先SSDを UUID で特定します。優先順位は次の通りです。
- CLI引数:
--ssd-uuid - 環境変数:
SSD_UUID - ローカル設定ファイル:
.newvlog.local
.newvlog.local は newvlog.sh と同じディレクトリで読み込まれます(.gitignore 対象)。
読み込みは KEY=VALUE 専用パーサーで行われ、シェルコードは実行されません。
# .newvlog.local
SSD_UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"- 利用されるキーは
SSD_UUIDのみ - 未知キーは警告表示して無視
- 構文不正(
KEY=VALUE以外)や UUID 形式不正はエラー終了
UUID は例えば次で確認できます。
diskutil list
diskutil info <ボリューム名>./newvlog.sh --helpUsage:
./newvlog.sh [--ssd-uuid UUID]
# 1) CLI引数で指定
./newvlog.sh --ssd-uuid XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# 2) 環境変数で指定
SSD_UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ./newvlog.sh
# 3) .newvlog.local に設定済みなら
./newvlog.sh- 保存先SSDを UUID で確認
001 Camera/Footageの存在確認001 Camera/Footage/.import_historyを読み込み/Volumes/*をスキャンして、保存先SSD以外の接続ボリュームを調査
- Osmo Action 系:
DCIM/DJI_001があるボリュームを検出- 転送先サブフォルダ:
DJI_001 - 日付抽出対象ファイル名例:
DJI_20251019114536_0001_D.MP4
- 転送先サブフォルダ:
- DJI Mic 系:
DJI_Audio_001があるボリュームを最大2台検出- 1台目転送先:
DJI_Audio_001 - 2台目転送先:
DJI_Audio_002 - 日付抽出対象ファイル名例:
DJI_29_20251017_175848.WAV
- 1台目転送先:
- 日付・時刻はファイル名の正規表現から抽出
CUTOFF_TIME=04:00より前の時刻は前日扱い- 日付ごとに既存プロジェクト(
<YYYY-MM-DD>-*)を全Tierから検索 - 空白を含む既存プロジェクト名でも、表示番号と選択先が正しく一致
- 既存を使うか、新規プロジェクトを作るかを選択
- 新規作成時:
- タイトル入力(未入力時は
NewProject) - Tier選択
TIER_1__KEEPTIER_2__STORETIER_3__TEMP
- 既存名と重複時は
-1,-2... を付けて作成 _Templateがあれば内容をコピー_AssetsがあればAssetsシンボリックリンクを作成
- タイトル入力(未入力時は
- 転送は
rsync -a --progress - 除外パターン:
*.LRF - 転送成功時のみ
.import_historyにv2:<安定デバイスID>:<ファイル名>を追記 - 重複判定では旧形式
DEVICE_NAME:ファイル名も互換参照(段階移行)
- 日付ごとの転送完了件数を表示
- 対象プロジェクトフォルダを
openで表示 .import_historyにより次回以降の重複転送を抑止
- 転送対象は「履歴未登録」かつ「除外パターン非一致」かつ「日付抽出可能」なファイルのみ
- 日付抽出できないファイルはスキップ(警告表示なし)
- デバイス未接続時は何も転送せず正常終了
- 新規ファイルなしの場合も正常終了
--ssd-uuid、SSD_UUID 環境変数、.newvlog.local のいずれかを設定してください。
UUID が誤っているか、SSDが未接続です。diskutil info <UUID> で確認してください。
SSD内の前提フォルダ構成を作成してください。
接続先ボリューム直下に以下が存在するか確認してください。
- Osmo Action:
DCIM/DJI_001 - DJI Mic:
DJI_Audio_001
- 本リポジトリは個人運用のため、Issue / Pull Request ともに受け付けていません。
- 利用は自己責任でお願いします。