mcpField
M
multicam-sync

multicam-sync

github.com/chatcut-incクリエイティブ・メディア98893 回インストール今日更新
リポジトリ

multicam-sync について

マルチカメラ素材の同期と編集を支援するスキルです。文字起こしと同期根拠に基づく検証可能なマスターを作り、通常は話者を追う編集案も作成します。

主な機能

  1. 01文字起こしからカメラとレコーダーを特定
  2. 02ツールまたは文字起こしで同期
  3. 03素材区間間のタイミング連続性を確認
  4. 04根拠に基づき話者・画角・音声をラベル付け
  5. 05標準で話者を追う編集案を作成

活用シーン

  1. 01複数カメラと別録音の音声を同期
  2. 02クリップの整合性と連続性を検証
  3. 03話者に合わせた画角切り替え案を作成

MCP 対応

使用前に`multicam_sync`ツールを読み込み、利用可能な場合は独立したマスタータイムライン上の素材同期に使用します。その結果と根拠を後続の編集に活用します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/chatcut-inc/agent-plugin --skill multicam-sync

インストール後、Claude Code で/multicam-syncを入力して読み込まれたか確認します。

同梱ファイルscripts/transcript-offset.mjs

詳細

マルチカム同期

multicam_sync がまだ読み込まれていない場合は、呼び出す前に ToolSearch で読み込んでください。推測ではなく、実際のパラメーターを使用できます。

パート 1~3 は必ず実行します。これらのパートで同期済みマスターを作成します。これは、後続の編集がすべてここから再構築されることを確認できる成果物です。デフォルトでは、パート 4 でマスターからラフカットを作成します。同期のみの明示的なリクエストがあった場合に限り、パート 4 を省略します。 作業の大部分はトランスクリプトで行います。AI が位置を特定し、フレームは計算で決定します。

通常のタイムライン、トラック、アイテムのみを使用してください。コンパウンドまたはネストされたマルチカムクリップは作成せず、カメラスイッチャーアイテムにも依存しないでください。メインの編集がすでに存在する場合は、同期済みマスターと話者追従型カッティングボードを別のタイムラインに作成する間、その編集には手を加えないでください。

パート 1 — 構成を把握する

位置合わせを始める前に、実際に何があるかを把握してください。カメラの台数をユーザーに尋ねてはいけません。素材を見ればわかります。

役立つ 2 つのルール

同じタイミングで同じ言葉がある → 1 台のカメラによる連続した区間ではあり得ません。 トランスクリプトが重複している場合、2 台のデバイスが同じ出来事を同時に録画しているため、異なるソースまたは同時刻の別アングルです。

共通する言葉がなく、一方の終わりと次の始まりが一致する → 撮影を停止して再開した 1 台のカメラです。 これらは、別々のアングルではなく、単一の撮影ソースにおける連続した区間です。

手順
  1. 各アセットのトランスクリプトを読み、ペアごとの重複マトリクス(各ペアでどの程度のテキストが共有されているか、またその位置)を作成し、上記のルールに従って分割します。
  2. 動画アセットはアングル、音声のみのアセットはレコーダーです。
  3. ファイル名、フォルダー構成、カメラモデルのメタデータ、長さで裏付けを取ります。ただし、これらは判断が分かれる場合の補助材料にすぎず、トランスクリプトの証拠より優先してはいけません。実際の撮影では、3 台のカメラすべてが C0001.MP4 という名前で納品されることもあります。
作業前に報告する

素材の構成をユーザーの用語で伝え、不明点がある場合は返答を待ちます。

カメラアングル 2 つ(Pocket3、3 区間・Pocket4、2 区間)、音声レコーダー 2 台 (MIC1、MIC2)。セッションは 53 分です。

証拠が乏しい場合(発話がほとんどないソースや、わずかな行の一致に基づく重複など)は、その旨を伝えてください。推測で不足を補ってはいけません。

パート 2 — 位置を合わせて配置する

クリップごとに数値を 1 つだけ使います。タイムライン上の時刻からソース上の時刻を引いた値です。そのクリップから切り出すすべての部分で、その数値を一定に保ってください。自動的にタイムストレッチしてはいけません。オフセットが変化している場合、誤ったマッチ、クロックのずれ、またはフレームのドロップが原因かもしれません。それぞれ確認が必要です。

手順
  1. リファレンス: セッション全体をカバーする、最もリッチなトランスクリプトを持つソース — 通常はカメラではなく、専用のオーディオレコーダーです。

  2. 利用可能な場合はレンダラーを使用する: 別個のマスタータイムライン上で、 トリミングされていないクリップを通常のソーストラックに配置し、その後、同じテイクの アイテムとリファレンスを指定して multicam_sync を呼び出します。これが推奨される Web/デスクトップのパスです。決定的な場合は既存のソースタイミングを使用し、そうでなければ 音声相関を使用します。マルチカムオブジェクトは作成しません。

    applied、already_synced、または理解済みの partial の結果のみを受け入れます。 メソッド、マッチ信頼度、相関、オーバーラップ、相対オフセットについては alignmentEvidence を読みます。同期後の実際の timelineSourceOffsetSeconds については placementEvidence を読みます。スキップされた アイテムや低信頼度のアイテムは使用しないでください。ツールが利用できない場合、または 確信のあるアラインメントが見つからない場合は、マスターをそのままにして、以下の トランスクリプトフォールバックを使用してください。

  3. トランスクリプトフォールバック: このスキルから scripts/transcript-offset.mjs <utterances.json> を実行します。計算を 自己流で行わないでください。まず共有フレーズで粗いオフセットを投票し、次に ほぼ同一の発話ペアの差分の中央値を取ります。また、ペアが少なすぎる場合、一貫性のない ペア、早すぎる/遅すぎるドリフトも拒否します。出力が confident:true のファイルのみを配置してください。それ以外については、出力された すべての問題を報告してください。--help に入力と符号の規約が記載されています。

  4. 連続性チェック(無料、実行してください): 1 台のカメラのスパンは 連続して録画されているため、スパン N+1 のオフセットからスパン N のオフセットを引いた値は、 スパン N の長さと等しくなる必要があります。各オフセットは独立して測定されているため、 一致すれば両方が確認できます。サブフレームの一致が標準であり、複数フレームの ずれはフレーム落ちまたは不一致を意味します — どちらであるかを述べてください。 1 台のカメラの配置されたスパン間のオーバーラップまたはギャップは、 オフセットが間違っていることを意味します。再計算してください — 合わせるために スパンをトリミングしてはいけません。

  5. トランスクリプトフォールバックの結果を配置する: 最も早いクリップが 0 から 始まるようにすべてをシフトします。カメラごとに 1 つのビデオトラック、レコーダーごとに 1 つの オーディオトラック。秒 → フレームへの変換は最後に一度だけ行い、累積はせず、 アセットの末尾では floor し、絶対に切り上げないでください — 切り上げられた最終フレームは、ファイルに存在しないソースを主張することになります。レンダリングは それを黙って許容しますが、後でスクリプト編集はそれを拒否します。

レポート

クリップごとに: 実際のタイムラインソースオフセット、メソッドと裏付けとなる証拠 (レンダラーの信頼度/相関/オーバーラップ、またはトランスクリプトのペア数/ばらつき/ドリフト)、 および連続性チェックの結果。

Part 3 — 識別とラベル付け

「トラック 1 / トラック 2」を、実際にそこにいる人物に変えます。ここではすべてが 証拠優先です。間違った自信のある主張は失敗であり、正直な「判断できない」は失敗では ありません。

セッションに誰がいるか

話者は通常、自分自身またはお互いの名前を言います — 自己紹介、冗談など。トランスクリプトから 実名を引き出してください。名前がまったく現れない場合は、A/B で問題ありません。名前を 捏造しないでください。

どのカメラが誰を映しているか

トランスクリプトから、1 人だけが話している瞬間をセッション全体にわたって 3〜4 か所選びます。同じ実時刻のフレームを すべての カメラから表示します。 話している顔がその人物を特定し、服装と座席がアングル間での身元を裏付けます。 ツーショットはアイデンティティのアンカーであり、ノイズではありません。その場で フレーミングを分類します: クローズアップ / ミディアム / ツーショット。支配的な フレーミングが変わる場合はリフレーミングを記録します。

アングルのラベルは要約であり、約束ではありません。フレーミングはドリフトし、失敗し、 その後回復することがあります。カットのたびに、正確な同期区間を検査してください。 ラベルだけから選択しないでください。

結論を出す前のハードチェック: 各自己紹介の時点で、唇が動いている顔がその名前の 持ち主です。「両方のカメラが同じ人物を映している」は、2 カメラ・2 マイク・2 音声という 構造と矛盾します — 両方の自己紹介のフレームがそれを証明するまでは、その結論を エラーとして扱ってください。

どのマイクが誰のものか

ラベリアマイクは、装着者の声を劇的に大きく拾います。通常、15 dB 以上です。推測せず、測定してください。

  • 一方の人だけが話しているときと、もう一方の人だけが話しているときで、同じトラック同士を比較します。トラック内の差を見れば、レコーダーのゲインの影響は相殺されます。約 4 dB を超えれば判定できます。それ以下なら「判別不能」とします。それ自体が、環境マイクや共有マイクであることを示す判断材料です。
  • ある瞬間だけでなく、分布を見てください。一貫していれば専用マイク、50/50 なら個人用マイクではなく、セッションの途中で入れ替わるならハンドヘルドマイクを回しているか、席が変わっています。
  • 発話数や文字起こしの音量を、マイクの所有者を判断する根拠にしてはいけません。 クロストークも問題なく文字起こしされるため、両方の話者が両方のマイクの文字起こしに完全な形で現れます。2 つのマイク間の全体的な音量差も根拠にはなりません。根拠になるのは、トラック内での一人だけの発話同士の差だけです。
  • 断片化した話者ダイアライゼーションは、機械的に統合します。話者 ID を、トラック間の音量差の中央値でクラスタリングしてください。アセットをまたいで話者 ID を手作業で照合してはいけません。話者 ID はアセットごとに連番で付けられています。
どの音源が番組音声か

視聴者が何を聞くかを基準に判断します。デフォルトでは、専用レコーダーの音声をカメラ内蔵音声より優先します。ユーザーの指定は何よりも優先されます。「カメラ A の音声が良い」という指定は、番組音声の割り当てを意味します。そのカメラの音声トラックは、レコーダーとまったく同じように扱います(オフセットはパート 2 ですでに判明しています)。割り当てはレポートに記録してください。

音声がクリアなレコーダーがない場合は、同じ一人だけの発話のタイミングでカメラのマイクを比較します。十分な品質の音源が 1 つあるなら、途切れずにその音源を使うのが望ましいです。別の音源が一定の区間にわたって明らかに優れていて、切り替えが聞こえない場合に限り、話者や区間に応じて切り替えます。ラベルや発話数ではなく、聞き取りやすさ、ノイズ、クリッピング、残響で判断してください。

ラベル付け

根拠から判断できる最短のラベルを使い、トラック名をその場で変更します。Cam · <subject or view> と Audio · <speaker or source> を使用してください。似たアングルを区別する必要がある場合に限り、ショットサイズを追加します。たとえば、WS(ワイドショット)、MS(ミディアムショット)、CU(クローズアップ)を使い、Cam · Speaker A · MS や Cam · Two-shot · WS のようにします。それ以外の場合は省略します。対象を特定できない場合は、番号付きラベルを使用します。

根拠を示す表も併せて提出します。項目は「主張 | 根拠(タイムスタンプ+確認または測定した内容) | 確信度」です。根拠が裏付けていないラベル付けは避けてください。断片化した文字起こしの話者 ID は、通常その対象です。判断できないことも明記してください。

まずマスターを納品し、デフォルトでは続けてカットする

納品物はマスターです。レポートの構成、オフセット、人物の識別情報、根拠を含めます。マスターはアングルを重ねたものであり、参照用であって視聴用ではないことを明記してください。一番上のトラックがほかのトラックを覆います。ユーザーが同期だけを明示的に依頼している場合は、ここで終了します。それ以外の場合は、別途話者に合わせたカットを依頼されるのを待たず、そのままパート 4 に進んでください。

パート 4 — 話者に合わせてカットする(同期のみの場合を除きデフォルト)

同期済みのマスターを、会話に合わせて映像が切り替わり、番組音声が下で途切れずに流れる、視聴可能なドラフトにします。

マスターは絶対に編集しない

すべてのカットは、新しいタイムライン(同じ fps/キャンバス)で行います。同期済みのマスターは、派生するあらゆるカットを再作成するための信頼できる唯一のソースです。マスターが変わると、すべてのオフセットが検証不能になります。指示を文字どおりに実行すると同期が崩れる場合(たとえば、同期済みの位置が 0 ではない音声を「フレーム 0 から開始する」など)は、同期を維持し、その理由を説明してください。同期の維持は、指示の字義どおりの実行よりも優先されます。

話者を追うタイムラインは、不透明なクリップとしてではなく、ソースまたはカッティングボードとして扱います。ユーザーがその一部を既存の編集に含めたい場合は、通常の映像および音声範囲だけをメインタイムラインに反映します。後から別のアングルに差し替える場合は、マスターのオフセットを使って、そのカメラから同じ実時間区間を取得します。マスターがタイミングの記録となるため、隠れたマルチカメラデータ構造は必要ありません。

会話を軸に編集する

まず、1つの会話ドキュメントを作成します。各人の発話は、割り当てられたプログラム素材(パート3)から取り出し、クロストークは除外して、パート2のオフセットを使って実時間順に並べ、実名とタイムスタンプを付けます。その後、配置を始める前に、開始〜終了、アングル、理由を記したアングルプランを作成します。

ユーザーがフィラーの削除、回答の短縮、会話の再構成も求めている場合は、トーキングヘッドのワークフローを使って、どの発話範囲を残すか判断します。マルチカムでは同期とアングルの選択を担当し、トーキングヘッドでは内容を担当します。映像を配置する前に、内容のプランを確定してください。

編集の目的

視聴者が状況を把握し、感情を理解し、映像に集中し続けられるようにしながら、意味のあるカットだけを最小限にします。

何を見せるかは意味で決めます。いつカットするかはリズムで決めます。どれだけ広く映すかは状況の把握しやすさで決めます。 フレームから新たな情報が伝わっている間はそのまま保ち、別のフレームのほうがより多くを伝えるなら切り替えます。関係性を改めて示す必要があるときは、部屋全体のショットに戻します。

アングルのルール(デフォルトでは次のとおりですが、ユーザーの要望を優先します):

  • その瞬間を担う対象:基本は話者ですが、絶対ではありません。情報が話者から発せられるなら話者を映し、リアクションが意味を持つなら聞き手を映します。関係性がその場面の要点ならペアや小グループを、注意が分散しているなら部屋全体を映します。
  • ショットのサイズ:その場面の要点を伝えられる、最小のグループを選びます。CUは思考や感情を際立たせ、MSは会話の基本です。ツーショットやグループショットでは関係性を示し、WSでは空間の位置関係を改めて伝えます。新しい質問や話題、参加者の交代、発話の重なり、全員の笑いや沈黙、身体の動き、または単独ショットが長く続いた後には、広い画にします。内容を読み取れるだけの長さ(通常は2~5秒)保ち、注意が集中したらタイトな画に切り替えます。
  • ショットの長さ:通常、ショットが落ち着くまでに約2~3秒必要です。4~10秒は会話に適した目安とし、機械的に当てはめないでください。変化のない単独ショットが約8~12秒続いたら、意図のある別の選択肢を積極的に探します。20~25秒を超える場合は、意図を持ってそのショットを維持してください。演技、感情、または視覚情報が展開し続けているなら、維持時間に上限はありません。
  • 話者の切り替わり:音が変わるたびに追いかけてはいけません。2秒未満の短い発言なら、通常は現在のショットを維持します。予期しない新しい話者が話し始めた場合は、カットする前に約1秒待ちます。直接の質問なら、回答者が答える準備をしている姿を映す理由になります。紹介、直接の呼びかけ、オチなど、短くても重要なセリフにはショットを割り当てます。必要ならその前後で画を広げます。
  • リアクション:セリフの受け取られ方を変えるときや、固定ショットに変化を加えるときは、目に見える自然なリアクションを使います。リアクションは通常1.5~3秒です。変化を付けるだけのために汎用的なうなずきを挿入してはいけません。また、実時間上の別の場面からリアクションを借りてはいけません。
  • リズム:タイマーや恣意的な単語の区切りではなく、思考、息継ぎ、身振り、視線、笑い、または関係性の変化に合わせてカットします。文の終わりは安全なカットポイントですが、必須ではありません。
  • つなぎ目:文の終わりにある明瞭な音声のつなぎ目なら、何も必要ありません。目立つジャンプカットが続く場合は、そのまとまり全体を覆う、実時間に同期したリアクションショットまたは関係性を示すショットを1つ使います。つなぎ用の映像を作るために、素材の同期を崩してはいけません。
  • アングルを変えずにカメラが再起動した場合、それは編集上のカットではなく、同一アングル内のつなぎです。別に数えて報告してください。
フラットに配置する
  • ビデオトラックは1つにし、アングルのセグメントを交互に並べ、空白を作らないようにします。各セグメントのソースオフセットは、トランスクリプトから再計算せず、マスター配置の計算値を使います。
  • 話者を追う全尺のドラフトでは、プログラム音声をトリミングせず、同期した位置で連続させます。短縮または並べ替えた編集では、すべてのプログラムマイクで同一の保持ソース時間範囲を使い、映像と音声がずれないようにします。
  • 各カメラセグメントに埋め込まれた音声はすべてミュートします。
  • 音声が映像より長い場合(レコーダーが後まで動作していた場合)は、音声を残して、末尾を暗転させます。映像を覆うために、映像を捏造したり静止させたりしてはいけません。
プログラム音声の一貫性を保つ

保持する各区間を通して、分離された各プログラムマイクを開いたままにしてください。プログラム音声がカメラマイクから供給される場合は、その箇所には選択した音源のみを使用し、静かな境界でクロスフェードし、それらを重ねないでください。単語のタイムスタンプには ASR ノイズが ±30~60ms 含まれるため、境界には自然なハンドルが必要です。単語のタイムスタンプでのハードカットは、息継ぎや単語の立ち上がりを切り落とします。アイドル状態のマイクに載る相槌(「嗯」、笑い声)も会話の一部です。コンテンツ編集の後は、トーキングヘッドワークフローの音声スムージング手順を実行してください。マイク分離が弱い場合は、話者を個別にゲート処理するのではなく、音声パス向けにフラグを立ててください。

検証は最後に、そして数値で証明する

検証は最終アクションであり、すべての編集とすべての視覚チェックの後に行います。タイムラインに触れるものは何であれ――フレームを確認するためにブラウザーでドラッグすることも含めて――アイテムを移動させる可能性があります。検査は読み取り専用ではありません。 いずれかの時点でエディター UI を操作した場合は、その後にこれらのチェックを再実行してください。その操作より前のパスは無効です。

  • マスター実時間の不変条件: 同期済みマスター上では、タイムライン時間 − ソース時間が、そのソースのマスターオフセットと等しくなければなりません。
  • 派生カット同期の不変条件: 保持する各箇所について、同じカット時間における映像とすべてのプログラム音声ソースに対して カット時間 − (ソース時間 + マスターオフセット) を計算します。それらの値は 1 フレーム以内で一致しなければなりません。短縮または並べ替えられた編集では、箇所ごとに変位が異なることがあります。それをマスターのオフセットに無理に戻さないでください。
  • アングルのスポットチェック: いくつかのサンプリングしたショットで――最も長いものも含めて――ウィンドウ内の支配的な話者が、そのアングルの人物と一致しなければなりません。

実際の値を報告してください。「検証済み」という言葉ではなく: master MIC1/MIC2 offsets 3.700 / 3.700; cut passage at 111, picture/audio master times 123.000 / 123.000。数値を提示できない主張は、チェックされていません。

同じルールが復旧にも当てはまります。アイテムを乱した場合は、すべてのフィールドを復元し、行を再読み取りしてそれを証明してください――位置、長さ、ソースオフセットはそれぞれ独立に失敗し、気づいた 1 つを修正しても復元にはなりません。

また、以下も報告してください: カット数、ショットの長さの最小/平均/最大、会話ドキュメント、プラン、そしてルールが素材と衝突したすべての箇所と、あなたが何を選んだか。

コメント