agentsclimarketplace

Fcp library ops

Skill kiwamust/fcp-six-skills/skills/fcp-library-ops

Final Cut Pro の library 運用に関するノウハウ。Copy to library 設定、SDカード運用 (NTFS / mount issue / DJI OP3)、Event 間の media 共有挙動、Transcoded Media と Analysis Files のキャッシュ管理、library サイズ抑制、 import 前ゲート (xmllint で DTD valid + asset uid 整合性チェック) を扱う。 「library」「Copy to library」「media management」「Transcoded Media」「キャッシュ」 「SD」「DJI OP3 SDカード」「diskutil mount」「fcpbundle」「外付け SSD」「Storage Locations」 「ライブラリが大きい」「ディスク容量」「import error」「uid 衝突」「unique identifier」 「media already exists in the library」「xmllint」「DTD valid」「import 前チェック」等で発動。 XML仕様・spine編集は dji-fcpxml / fcp-spine-edit、 overlay系は fcp-titles / fcp-image-overlay。From its SKILL.md

Install
npx -y skills add kiwamust/fcp-six-skills --skill fcp-library-ops

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

13.1 KB, ~4.2k tokens by cl100k_base, as published. Nobody here has run it

fcp-library-ops — FCP library運用とmedia管理

Final Cut Pro の .fcpbundle library と外部 media (SDカード / 外付け SSD) の運用ノウハウ。「ライブラリが数百GBに膨れた」「SDカードが見えない」「Transcoded Media を消したい」などのトラブル対処と、最初から肥大化を防ぐ設定を扱う。

核となる教訓

  • 「Copy to library」を OFFにしないと media が library に複製されてサイズが膨らむ
  • SD のファイルシステムは環境依存(exFAT/FAT32/NTFS など)。macOS での read/write 可否もそれに依存する。断定せず diskutil info で確認する
  • Event 間で media は共有されない → 同じソースを複数 Event に import すると Transcoded が重複生成
  • Library Properties → Storage Locations は別設定(コピー先指定であって、「コピーしない」設定ではない)

1. Copy to library を OFF にする

Final Cut Pro → Settings → Import タブ → Copy to library media folder のチェックを外す。

これで import 時に動画が library 内にコピーされず、外部参照のままになる。

注意点

  • Library Properties → Storage Locations は別設定。これは「コピーする場合にどこへコピーするか」の指定で、「コピーしない」設定ではない。混同しやすい
  • 一度 ON の状態で import した素材は、.fcpbundle/EventName/Original Media/ にコピー済み。後から OFF にしてもコピー済み media は残る。手動で削除する必要がある
  • ON のままだと library が 数百GB に膨れる(特に4K HEVC の DJI素材)

library 内の media 配置

.fcpbundle/
├── <EventName>/
│   ├── Original Media/         ← Copy to library ON で入る原本コピー
│   ├── Transcoded Media/       ← FCPが自動生成する proxy / optimized media
│   ├── Analysis Files/         ← shake/face detection等の分析結果
│   └── CurrentVersion.fcpevent

2. Event 間で media は共有されない

同じソースファイルを複数の Event に import しても、トランスコード済み media (Transcoded Media / Analysis Files) は Event ごとに重複生成される。

  • 同じ library 内で XML import と通常 import を併用すると二重化する
  • 試行錯誤で「probe」「test1」「test2」のように Event を増やすと、各 Event で同じ素材の Transcoded を持つ

対策

  • 試行錯誤用の Event は、終わったら library から削除 (Right-click → Move to Trash)
  • 不要な Event の Transcoded Media を直接削除する場合は まずパスを人間が検証してから(下の「破壊的操作ゲート」)

3. SDカード運用(DJI OP3 等)

ファイルシステム確認(先にこれ)

diskutil list
diskutil info diskXsY

ここで File System Personality を確認してから読み取り専用かどうかを判断する。

macOS で read-only になりがちなケース

  • NTFS: 追加ドライバ無しの環境では read-only になりやすい
  • exFAT/FAT32: たいてい read/write 可能だが、取り外し手順を誤ると壊れる

撮影分の整理・削除が書き込み必須なら、カード上で直接いじらず、まず外付けSSDへコピーして編集するのが安全。

自動マウントしない問題

時折、SD カードが macOS で自動認識されない:

# 検出はするが /Volumes に出ない
diskutil list

# 手動マウント
diskutil mount disk6s1   # disk番号は環境依存
# → /Volumes/DJI_OP3 が出現

SD 依存を避ける

長期 editing では SD依存を避ける:

# 必要ファイルを外付け SSD にコピー (read-only NTFS から外付け SSD へ)
cp -R /Volumes/DJI_OP3/DCIM/Movies/ /Volumes/<SSD>/<project>/Video/

# XML の src を書き換え(まずバックアップ)
cp -R /path/to/project.fcpxmld "/path/to/project.fcpxmld.$(date +%Y%m%d-%H%M%S).bak"

# sed はパスに `%` などが混じると事故りやすい。まず dry-run:
grep -n "file:///Volumes/DJI_OP3/" /path/to/project.fcpxmld/Info.fcpxml | head

# 問題なければ置換(実行後も grep で残りが無いことを確認)
sed -i '' 's|file:///Volumes/DJI_OP3/|file:///Volumes/<SSD>/<project>/|g' /path/to/project.fcpxmld/Info.fcpxml

置換後は xmllint --noout /path/to/project.fcpxmld/Info.fcpxmlFCP で import までがセット。

これで SD抜き差しの度に library が壊れる事故を避けられる。

破壊的操作ゲート(必須)

ターミナルで library / XML を触るとき、最低これだけ守る:

  1. FCP を終了(未保存が無いことを確認。killall は最終手段)
  2. 対象パスを ls / Finder で実在確認rm -rf のTypoは復旧不能)
  3. バックアップ.fcpbundle は丸ごと、fcpxmld はフォルダごと)
  4. 変更後に import / 再生確認(静的に成功したつもりにならない)

import 前ゲート(必須)— XML valid + uid 整合性

スクリプト生成 fcpxml を FCP に import する前に、 必ず以下2つをチェックする。

(A) DTD / XML 構造 valid

xmllint --noout /path/to/.fcpxmld/Info.fcpxml

無出力 = OK。 エラーが出たら閉じタグ漏れ・属性 escape 漏れ等を修正。

(B) asset uid 整合性 — FCP library 既存 entry との衝突回避

症状: 「The media already exists in the library with a different unique identifier. (uid="..." : /fcpxml[1]/resources[1]/asset[N]/@uid) The file XXX.MP4 cannot be imported again with a different unique identifier」

原因: 同じ media file が library に既に登録されているが、 新 fcpxml が異なる uid を指定している。 FCP は file ↔ uid の 1:1 対応を強制する。

根治策: 既存 fcpxml backup から該当 file の uid を抽出して再利用する。 不明な file には uid 属性を省略する (FCPXML 1.13 で uid は #IMPLIED = optional)。

import re, glob
from pathlib import Path

def load_known_uids(backup_glob: str) -> dict[str, str]:
    """既存 fcpxml backup から file_basename → uid マップを構築"""
    uid_map: dict[str, str] = {}
    pattern = re.compile(
        r'<asset id="[^"]+" name="([^"]+)"[^>]*uid="([A-F0-9]+)"',
        re.DOTALL,
    )
    for path in sorted(glob.glob(backup_glob)):
        try:
            content = Path(path).read_text(encoding="utf-8")
        except Exception:
            continue
        for m in pattern.finditer(content):
            name = m.group(1)
            uid = m.group(2)
            if name not in uid_map:
                uid_map[name] = uid
    return uid_map

# 例:
# load_known_uids("<PROJECT_ROOT>/edit/series-vlog.fcpxmld*/Info.fcpxml")
# → 既存 backup 全部から uid を集約

asset 出力時の helper:

def asset_uid_attr(name: str, uid_map: dict[str, str]) -> str:
    u = uid_map.get(name)
    return f'uid="{u}" ' if u else ""  # 不明なら省略

uid を省略してよい場合:

  • backup に該当 file が無い (新規 file、 もしくは backup 取得前に library 登録された file)
  • → FCP は path で resolve、 既存 entry があればそれを使う、 無ければ新規登録

uid を必ず指定すべき場合:

  • backup 内で uid が判明している file
  • → 同じ uid を維持しないと library 側で別 entry とみなされる (or import error)

import 前ゲートのチェックリスト

ゲート検証コマンド / 確認NG時の対処
DTD validxmllint --noout Info.fcpxml出力エラーから閉じタグ・escape 漏れを修正
uid 整合backup uid 抽出 + uid map 適用uid 不明の asset は uid 属性省略
物理 pathls で各 media-rep src= の実在確認切れていればコピー / src 書き換え
frame整合/30000s denominator 確認 (29.97 NDF/DF)1001 の倍数チェック

これら 4 ゲートを通れば「import 通る」 確率が大幅に上がる。 通らない場合は一段ずつ症状を切り分け。

4. Transcoded Media のキャッシュ管理

FCPは import / playback 時に自動でトランスコードや analysis を行い Transcoded Media/ Analysis Files/ を生成する。これが library 肥大化の主因。

削除して空き容量を取り戻す

# まず通常は GUI で十分:
# Final Cut Pro を終了 → Finder で対象 Event フォルダを確認 → Transcoded Media をゴミ箱へ

# どうしてもコマンドでやるなら(上の「破壊的操作ゲート」を全部クリアしてから)
osascript -e 'tell application "Final Cut Pro" to quit' || true

DEST_TM="/path/to/<library>.fcpbundle/<EventName>/Transcoded Media"
DEST_AF="/path/to/<library>.fcpbundle/<EventName>/Analysis Files"
ls -ld "$DEST_TM" "$DEST_AF"   # ここでパスが想定通りか人間が確認する

rm -rf "$DEST_TM" "$DEST_AF"

FCP内から削除

File → Delete Generated Library Files… で対話的に:

  • All proxy media
  • All optimized media
  • All render files
  • All Analysis Files

を選択削除可。これは安全なやり方。

自動生成を抑制

Final Cut Pro → Settings → Playback:

  • Background tasks: optimized/proxy media の生成タイミング制御
  • Background render: OFFにすると render files が自動生成されなくなる(ただし再生がカクつく)

5. Project / Event のバックアップ

XML export での保全

File → Export XML….fcpxmld バンドルを作る。これが最も safe な project スナップショット

  • 中身は plain XML (Info.fcpxml) なので diff / merge 可
  • library が壊れても XML から re-import で project を復元できる
  • バックアップは バンドル全体(フォルダ) をコピー: cp -R foo.fcpxmld foo.fcpxmld.YYYY-MM-DD.bak

library 自体のスナップショット

# FCPを閉じてから
cp -R /path/to/<library>.fcpbundle /path/to/<library>.fcpbundle.YYYY-MM-DD.bak

ただしサイズが大きいので、Transcoded を消してからコピーすると軽い。

6. 既知の落とし穴

  • 「Copy to library」を OFF にしたつもりが Storage Locations だった: 別設定、混同しやすい
  • import後に Original Media が library 内にある: ON状態で import済み。手動 rm で削除可、ただし FCP は途切れる場合あり (再import 推奨)
  • SD 抜き差しで library が壊れる: src パスが切れる。外付け SSD にコピーして src 書き換えで安定化
  • Transcoded Media を削除したらFCPが激重: 起動後に再生成中。バックグラウンドで完了するまで待つ
  • 同じ project名で複数 Event 作成: FCP 内では区別つくが、 file system では <library>.fcpbundle/<EventName>/<Project>/ と階層が深く混乱
  • 新生成 fcpxml に独自 uid を付ける: 既に library に登録済の file を異なる uid で参照すると import error (The media already exists in the library with a different unique identifier)。 既存 backup から uid を抽出するか、 uid 属性を省略する (FCPXML 1.13 で uid は #IMPLIED)
  • xmllint だけで通せたつもりになる: DTD valid でも uid 衝突や物理 path 切れで import 落ちる。 import 前ゲート 4項目 (DTD / uid / path / frame整合) を全部通す

関連スキル

  • dji-fcpxml: 基本のFCPXML仕様 (asset.start / format / TC変換)
  • fcp-spine-edit: spine編集後に library media のリフレッシュが必要な時
  • fcp-titles / fcp-image-overlay: overlay 編集後の re-import 手順

関連メモリ

  • feedback_fcpxmld_bundle.md.fcpxmld バンドル形式を作業基準にする運用
  • feedback_fcpxml_uid_consistency.md — asset uid は library 既存 entry と一致 / 不明なら uid 省略

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,367. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.