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 が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 秒未満(ローカルブリッジ上の呼び出しは各 20 ms 未満)で、瞬時に視覚検証が可能です:
- 0秒地点にブランクキャンバスを開く:
command_run({"id": "file.open", "params": {"path": "<fcproj_path>"}}) またはsequence.newを使用して、すぐにクリーンな.fcprojシェルを作成し FilmCraft で開きます。ユーザーは 0 秒地点に空の 4K シーケンスが表示されるのを見ます。 - ストリーミングメディア取り込み:
選択されたすべてのビデオカット、写真、アーカイブ素材、および選択された
03_Audio_Library/01_Curated_BGM/トラック(A2)の絶対ファイルパスを指定してmedia_importを呼び出します。 - シーンごとのライブストリーム:
承認された
Cut Tableの各シーンが処理されるにつれて、command_batch呼び出しを 9876 ブリッジ経由でライブストリームします:playhead.set: 再生ヘッドをシーン開始タイムコードに移動。source.overwrite/timeline.insertClip: ビジュアルクリップをV1(またはオーバーレイ/PIP の場合はV2)に配置し、同期オーディオをA1に配置。motion.apply: 静止画に Ken BurnsEaseIn/EaseOutスケール&パンキーフレームを注入(100% → 108%、または 4:3 写真の場合は 134% → 142% でピラーボックスを防止)。audio.append: 1.5 秒のフェードインと盛り上がりを伴うA2背景音楽をドロップ。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がフレーム&サンプル同期(atrim=start=...:end=...,asetpts=PTS-STARTPTSでスライスし、amix後にdynaudnorm=f=150:g=7:p=0.90を一度適用)で 1:1 にロックされ、無関係なシーンに溢れ出さないようにする。すべてのタイムラインおよびレンダリングされた.mp4は、最初のナレーションキューが始まる前に必ず1.5s–2.0sの音楽イントロで開始する。 - RMS校正済み音楽ダッキング(音声下で平均
-28.5 dB):ffmpeg volumedetectを使用して各A2音楽トラックのmean_volumeを測定し(compute_bgm_ducked_gain_db)、gain_db = -28.5 - raw_mean_dbを設定。これにより、ダックされた BGM はホットマスタリングされたアップビートトラックでも、正規化された-16.0 dB平均のナレーションおよびライブダイアログより 12.5 dB 静かな-28.5 dB平均 で再生される。 A4ナレーションとA1ダイアログをDialogueとしてタグ付けし(clarity.eqPreset: "Balanced Voice")、essentialSound.generateDucking(reduceDb: -6.0,fadeS: 0.45)をA2音楽に実行。- 最後のビジュアルクリップにネイティブの 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 を介して .fcproj を 1 秒未満でアセンブルし、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. ビジュアル検証とマスターレンダリング
- 3つのタイムスタンプ(Act 1 イントロ、中間、エピローグ)で
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を3つのタイムスタンプで呼び出し、カットを視覚検証。.drp/.drtバックアップを04_Project_Catalog/YEAR/<project_name>/にエクスポート。renderを介して最終.mp4レンダリングを~/Movies/Exports/YEAR/にキューイング。