Atomic MCP 時間軸組裝與驗證 (/assemble-timeline)
選項 A:FilmCraft MCP 執行 (filmcraft MCP 伺服器 — 需 FilmCraft v0.17.0+)
1. 環境與橋接驗證
- 首先執行
python3 ./.agents/skills/assemble-timeline/scripts/check_filmcraft_env.py來確認 FilmCraft $\ge$v0.17.0,自動同步filmcraft-cli與FilmCraft.app,並將任何新增的 MCP 指令顯示在00_Archive_Indexes/filmcraft_capabilities.json中。 - 確保 FilmCraft 以橋接模式執行,並將快取路由至
~/Movies/Cache_And_Previews:mkdir -p ~/Movies/Cache_And_Previews && cd ~/Movies/Cache_And_Previews open -a FilmCraft --args --control 9876
2. 即時視覺組裝模式(預設且建議)
在已開啟的 FilmCraft GUI 中即時觀看時間軸組裝,只會增加不到 1.5 秒的總 socket 執行時間(透過本地橋接的呼叫耗時 $< 20\text{ ms}$),並提供即時的視覺驗證:
- 在 0 秒處開啟空白畫布:
立即透過
command_run({"id": "file.open", "params": {"path": "<fcproj_path>"}})或sequence.new在 FilmCraft 中建立並開啟乾淨的.fcproj殼層。使用者會看到空白的 4K 序列出現在第 0 秒。 - 串流媒體匯入:
使用所有選定影片剪輯、照片、封存素材以及選擇的
03_Audio_Library/01_Curated_BGM/音軌(A2)的絕對檔案路徑呼叫media_import。 - 即時逐場景串流:
當處理經過核准的
Cut Table中的每個場景時,透過 9876 橋接埠即時串流command_batch呼叫:playhead.set:將播放頭移至場景開始時間碼。source.overwrite/timeline.insertClip:將視覺剪輯放置在V1(或V2用於疊加/PIP)上,並將同步音訊放置在A1上。motion.apply:對靜態影像注入 Ken BurnsEaseIn/EaseOut縮放與平移關鍵影格(100% $\rightarrow$ 108%,或 4:3 照片為 134% $\rightarrow$ 142% 以防止郵筒式裁切)。audio.append:放入A2背景音樂,並帶有 1.5 秒淡入與漸強。voiceover.insert:在每個音訊提示完成合成時,將A4旁白片段放入即時時間軸。
- 廣播級後製:
- 同語言即時對白尊重法則: 絕不將語言 $L$ 的
A4旁白放置在以同一語言 $L$ 說出的A1即時攝影機對白之上(EN旁白尊重即時EN對白;RU旁白尊重即時RU對白;UA旁白尊重即時UA對白)。當A4旁白翻譯包含外語攝影機對白的剪輯(edition_lang != clip_dialog_lang)時,在旁白提示活躍期間將A1降低-12 dB。 - 自然
1.00x語速、1:1 V1 == A1唇形同步與開場音樂導言法則: 絕不對即時攝影機語音(A1)或合成旁白(A4)套用atempo > 1.0或內部暫停移除(stop_periods=-1)。務必將說話的視覺剪輯(V1)調整為符合完整的1.00x口語句子(src_in、dur),使V1和A1保持 1:1 影格與樣本同步(透過atrim=start=...:end=...,asetpts=PTS-STARTPTS切片,並在amix後套用一次dynaudnorm=f=150:g=7:p=0.90),且絕不溢出到不相關的場景。務必以1.5s–2.0s的音樂導言開始每個時間軸和渲染的.mp4,然後才開始第一個旁白提示。 - RMS 校準音樂閃避(語音下平均
-28.5 dB): 透過ffmpeg volumedetect(compute_bgm_ducked_gain_db)測量每個A2音樂音軌的mean_volume,並將gain_db = -28.5 - raw_mean_db設定為閃避後的 BGM 平均-28.5 dB— 比正規化的-16.0 dB平均旁白和即時對白安靜整整12.5 dB,即使在熱母帶處理的快節奏音軌上也是如此。 - 將
A4旁白和A1對白標記為Dialogue(clarity.eqPreset: "Balanced Voice"),並對A2音樂執行essentialSound.generateDucking(reduceDb: -6.0、fadeS: 0.45)。 - 在結尾視覺剪輯上套用原生 1.5 秒至 2.0 秒的
dip_to_black轉場。 - 強制同步結尾音訊淡出: 主音訊輸出(
[fullout])和A2上的音樂必須執行同步的2.0s–2.5s半正弦淡出(afade=t=out:st=<TOTAL_DUR - FADE_DUR>:d=<FADE_DUR>:curve=hsin),使所有音訊(音樂、攝影機噪音、SFX 尾音)在最末影格或之前達到完全靜音(-infinity dB)。在.fcproj中,A2音軌必須帶有EndAtCut音訊淡出轉場(from: Some(clip.id), to: None, align: "EndAtCut")。聲音絕不能突然中斷。 - 將多語言字幕軌道寫入
caption_tracks(C1),並設定enabled: false(預設burnCaptions: false)。
- 同語言即時對白尊重法則: 絕不將語言 $L$ 的
3. 無頭批次備援方案 (assemble_engine.py)
如果 FilmCraft GUI 未執行或橋接模式離線,則直接透過 assemble_engine.py 在 $< 1$ 秒內自動組裝 .fcproj,並透過 filmcraft-cli 渲染 4K 主 MP4。
- 儲存庫整潔規則: 嚴格保留
.agents/skills/assemble-timeline/scripts/給通用、與專案無關的引擎(assemble_engine.py、gpx_widgets.py、generate_voiceover.py、check_filmcraft_env.py)。如果為了特定專案建立了自訂或專屬的組裝腳本,務必將其儲存在該專案的 git 忽略目錄(04_Project_Catalog/YEAR/<project_name>/)內,而絕不放在.agents/skills/內。
4. 視覺驗證與主渲染
- 在三個時間戳記(第一幕開頭、中點、尾聲)呼叫
render_frame以確認構圖。 - 將主 4K MP4 渲染至
~/Movies/Exports/YEAR/<project_name>.mp4。 - 如果需要多語言版本(
option_b),則重新封裝為_UA.mp4和_RU.mp4本地化片段。
選項 B:DaVinci Resolve Studio MCP 執行 (davinci-resolve)
- 建立一個新的時間軸(
1920x1080或3840x2160、29.97fps、DaVinci YRGB Color Managed Rec.709)。 - 透過
media_pool將選定的媒體匯入Selects容器,透過timeline_edit將剪輯附加到V1/V2/A1並將音樂附加到A2,透過transitions套用Cross Dissolve轉場,透過keyframes設定 Ken Burns 縮放關鍵影格,並透過audio/inspector設定音訊閃避。 - 在三個時間戳記呼叫
export_still以視覺驗證剪輯,將.drp/.drt備份匯出到04_Project_Catalog/YEAR/<project_name>/,並將最終的.mp4渲染排入佇列至~/Movies/Exports/YEAR/,透過render完成。