Communitygithub.com

skillmds/kinetic-multicam

1テイクの実写動画から、高速カメラホイップ+キネティックタイポグラフィ(動くテキスト)のプロンプトを生成します。Seedance 2.0 Fast向けのテンプレートで、発話のビートに合わせたカメラワークとスーパー(強調テキスト)を自動構成。

kinetic-multicam とは?

このスキルは、ユーザーがローカルに持つ「話している人の顔出し動画」を1つだけ入力として受け取り、それを**Seedance 2.0 Fast**(Google Omniでも動くが品質が明らかに劣るため非推奨)で動画-to-動画変換するためのプロンプトを生成します。生成されるプロンプトは、元の映像を一切変更せず(顔、部屋、音声、リップシンクはそのまま)、**目に見えるモーションブラーを伴う超高速カメラウィップ**と、**発話のビートに同期したキネティックスーパー(動くグラフィックテキスト)**のみを追加します。 特徴的な点は、テンプレートが完全に固定されており、変更されるのは「タイムスタンプ(`[Xs]`)」「スーパーのテキスト(`[TEXT]`)」「カメラ位置の説明(ユーザーが要求した場合)」の3箇所だけであること。兄弟スキルである`/multicam`(ハードカット版)とは「カメラが*移動しながら*ワイプする」「スーパーがテキスト付き」という点で明確に区別されます。 ワークフローは、事前チェック(ffmpeg, Whisperなど)→音声書き起こし→ビート検出→ブロック数決定(長さに応じて4〜6ブロック)→スーパー密度ルールに基づくテキスト割り当て→ユーザーとの**必須チェックポイント**(タイムスタンプ・スーパー・カメラ位置を調整可能)→プロンプト生成・検証・出力、という流れです。スーパーは発話から抽出した2〜6語の強調フレーズで、全大文字で出力され、「カメラのみ」のブロックも存在し得ます。最終的に生成されるプロンプトは常に英語で、スーパーのみが動画の言語に従います。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/skillmds/skillmd/tree/HEAD/plugins/design/skills/kinetic-multicam

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

/kinetic-multicam: 1テイク → キネティックスーパー + カメラスナップ

概要

1つのリアルな話し手テイクを、実証済みの動画-to-動画プロンプトに変換します。Seedance 2.0 Fast(Google Omniでも動作しますが明らかに品質が劣るため推奨しません)に最適で、元の映像に2つの要素を追加します: 分割単位での目に見えるカメラウィップ(モーションブラーのある動きで、到着後は安定したフレームにロックイン)と、発話ビートに同期した大胆なキネティックスーパー(動くグラフィックテキスト。キャプションではありません)。このプロンプトはアップロードされた元の動画を保持します。顔、部屋、音声、リップシンクはすべてそのまま固定されます。シーンを説明したり再生成したりするものではありません。

中核原理:テンプレートは固定されており、変更されるのは3つのゾーンのみです。すなわち、[Xs]タイムスタンプ(常に変更)、[TEXT]スーパー(実際に発話された単語から切り出します。すべてのブロックにスーパーが付くわけではなく、スーパーは独自の密度ルールに従います)、そしてカメラ位置の説明(ユーザーが要求した場合のみ変更)です。

兄弟スキルであり、同一スキルではありません: /multicamはテキストなしのハードカットを行います。2つのテンプレートを決して混在させないでください。こちらは「ハードカット」とは決して言わず、[Xs]〜[Xs]の範囲(* [Xs]時点ではない)を使用し、独自のタイポグラフィ指示を持ちます。トランジション自体が違いです: /multicamはアングルをカットします。このスキルは、目に見えるモーションブラーのあるウィップでアングル間を移動します。

入力

ローカルビデオファイルのみ(ユーザー自身の映像)。ユーザーがURL(InstagramリンクやDriveリンク)しか持っていない場合は、まずビデオをローカルファイルとして保存するよう依頼してください。複数のビデオがあり得る場合「どのビデオか」を尋ねてください。ls -tで推測してはいけません。

ステップ0 — 事前チェック(初回実行時、またはツール欠落エラー時)

python "<このスキルのベースディレクトリ>/scripts/check_env.py"

Python 3.8+、ffmpeg、ffprobe、Whisperを確認し、不足しているものがあれば、そのツールの用途と、ユーザーのOSに応じた正確なインストールコマンドを表示します。自身では何もインストールしません。不足している情報を伝え、ユーザーに許可を求め、インストール後、チェックを再実行してください。このセッションで最近すべてが合格していた場合は、ステップ1にスキップします。

ステップ1 — ビート(韻律の検出)

python "<このスキルのベースディレクトリ>/scripts/beats.py" "<動画パス>"

(スキルのベースディレクトリは、このスキルがロードされたときに通知されます。)

検出された LANGUAGE と DURATION をユーザーに報告します。フラグ: 検出が間違っていると思われる場合は --language <コード>、再書き起こしを行う場合は --force、速度より精度を重視する場合は --model medium、異なる境界カウント(ブロック数)を使用する場合は --cuts N(書き起こしJSONが存在すれば再実行は一瞬で終わります)。

ステップ2 — ブロック数の決定、次に境界の調整(判断が必要です。スクリプトは事実を報告するのみ)

ブロック数は長さに応じて変動します。ただしウィップは画面時間を消費するため(各移動で約0.2〜0.3秒の可視移動)、キネティック密度は/multicamのカット密度以下に保ち、超えることはありません: ≤10秒 → 4ブロック、 >10〜15秒 → 5ブロック、 >15秒 → 6ブロック(約1.6〜2.2秒ごとに1回のカメラ移動)。チェックポイントでユーザーが上書きできます。ブロック数が4でない場合は、--cuts Nを付けてbeats.pyを再実行してください(書き込みはキャッシュされているため一瞬です)。

タイムラインは、最初に元のカメラでホールドした後、ビデオをタイル状に並べたNブロックです: [0 → t1] 元の構図(スーパーなし)、その後 [t1 → t2] … [tN → 終了]。境界t1〜tNは NAIVE_CUTS — 決定論的な最初の推測であり、未調整のまま提供してはいけません。WORDSを話されたフレーズにグループ化し、以下を導出します:

  • オープニングホールド(元のカメラ)はブロック1が始まる前に≥0.8秒続き、かつあまり長くならないようにします。明確なフレーズ境界が0.8〜1.0秒にある場合、オープニングが〜1.2秒を超えて引きずらないようにそこにスナップします。長すぎる静的なオープンはフォーマットを損なわせます。ホールドは任意のフックスーパーを載せることができますが(チェックポイント参照)、カメラ移動は決してありません。
  • 境界はフレーズの開始位置に合わせ、単語の途中には決して置きません。Whisperはハイフンでつながれた単語を2つのエントリに分割することがあります("multi" + "-angle") — それらは1つの単語として扱い、その間で決して切ってはいけません。
  • GAPSエントリ(息継ぎや無音)がフレーズ境界の隣にある場合、境界を無音の開始位置に置きます。 直前の単語の終了時間を小数点第一位に切り上げます(単語終了が3.98 → 境界は4.0、5.68 → 5.7)。無音の終了位置に決して置かないでください。
  • キーメッセージのフレーズが最も長いブロックになります。
  • ペーシング: ブロックは約1〜2.5秒で実行されます。ブロックが〜2.5秒を超えそうになり、かつ内部に明確なフレーズ境界がある場合、そこで分割します。そして4つの境界をビデオ全体に分散させ、1つの範囲に集中させないでください。
  • 最後のブロックは常に、最終フレーズの前に元のカメラにスナップバックします。ビデオは開始時の構図で終了します。その終了タイムスタンプは小数点第一位に丸めた DURATION です。
  • 最小間隔は約0.7秒、tN ≤ 継続時間 − 1秒、タイムスタンプは昇順、小数点第一位。
  • ビデオが15秒を超える: このテクニックは短いフック映像で効果を発揮することを警告し、全体の弧をカバーするブロックを選択します。ビデオが4秒未満: 4ブロックは間隔ルールに適合しないことを警告し、チェックポイントで正直な選択肢(ブロック数削減 / 強制高速4ブロック)を提示します。ユーザーの選択がデフォルトのブロック数を上書きします。NO_SPEECH: 警告し、等間隔フォールバックまたは中止の選択肢を提供します。

ステップ2b — スーパーの作成(発話から。すべてのブロックに付けるわけではない)

スーパーには独自の密度ルールがあり、カメラのルールとは独立しています: 約1.5〜2秒ごとに1つのスーパー(5秒テイク → 3スーパー、8秒 → 4〜5スーパー)。スーパーはそのスタンプを獲得する必要があります。すなわち、CTA、提供する名詞、否定の保持、決めのフレーズなどです。接続詞やフィラー表現("you can"、"so"、"and then")にはスーパーを付けません。そのようなブロックはカメラのみとなります(テンプレートセクション参照)。選択されたフックスーパーは、合計数にカウントされます。

スーパーを付ける各ブロックについて、そのブロックの時間ウィンドウ内の WORDS から、実際に発話された単語を切り出します:

  • 連続する2〜6単語のつながり。意味を保つ最もタイトな切り出しを優先します(2〜4単語): 先頭や末尾の冠詞、前置詞、フィラーは積極的に削除します("the easiest way" → EASIEST WAY、"from a single video" → SINGLE VIDEO)。否定は保持します — "don't"を削除するとメッセージが反転します。そのウィンドウにない単語を並べ替えたり、置き換えたり、翻訳したり、追加したりしないでください。
  • 言語 = 動画の話し言葉(PT動画 → PTスーパー)。スーパーだけが動画の言語に従います。プロンプト内の他のすべては英語です。
  • すべて大文字で出力します。カンマと最終ピリオドは除去します。"?"や"!"はそのように発話されていれば保持します。
  • スーパーはパンチの効いた呼びかけであり、キャプションではありません。完全な字幕スタイルの文にしてはいけません。また、1ブロックあたり最大1つのスーパーです。単語ごとの出現タイミングやアニメーションスクリプトはありません。テンプレートのタイポグラフィ段落がすでにアートディレクションを提供しています。

ステップ3 — 提示、その後必須チェックポイント

以下の順序でユーザーに表示します:

  1. 仕組みについての2行: プロンプトはアイデンティティ/部屋/音声/リップシンクを固定します。追加されるのは分割単位のモーションブラー付きカメラウィップ(到着後ロック)と、発話から切り出したキネティックスーパーのみです。これが、同じリアルテイクからプレミアムなモーショングラフィックス編集のように見える理由です。
  2. 時間ウィンドウ付きのフレーズ表。
  3. 提案されたブロック。各ブロックの正当性(カバーするフレーズ、どの境界が息継ぎに配置されているか)と、ブロックごとの提案スーパー、または密度ルールにより画面がクリーンになる「カメラのみ」の指定。
  4. 以下のテンプレート。まだ[Xs]と[TEXT]のまま。

次に、何も埋める前に尋ねます(AskUserQuestion、利用不可の場合はプレーンチャットの質問):

  • ブロック数と提案されたタイムスタンプを受け入れますか? それとも調整しますか?
  • スーパープラン(テキストと、どのブロックをカメラのみにするか)を受け入れますか? それとも編集しますか(異なる切り出し、異なる大文字化、スーパーの追加/削除)?
  • デフォルトのカメラ位置を保持しますか? それともいくつか交換しますか(プリセット表を提供)?
  • オープニングホールドに任意のフックスーパー(フレーム1のテキスト、カメラは静止)を追加しますか? デフォルトはOFF。
  • 密度ルールにより価値のあるスーパーが失われた場合のみ、静的スーパーブロックを失う代わりとして提供します。

ユーザーが急いでいる場合やビートが明らかに見える場合でも、このチェックポイントを決してスキップしないでください。

ステップ4 — 記入して提供

変更するのは以下のみ:

  • [Xs]タイムスタンプ — Xだけを置き換えます: [Xs]は[0.8s]になります。角括弧はそのまま: [0.8s]から[2.1s]までが正しく、0.8sから2.1sまでは誤りです。隣接するブロックは境界を共有します(ブロック1が2.1で終了 → ブロック2は2.1で開始)。最後のブロックは動画の長さで終了します。
  • [TEXT]トークン — トークン全体(括弧を含む)をスーパーで置き換え、周囲の引用符は保持します: "[TEXT]" は "UPLOAD YOUR VIDEO" になります。"[UPLOAD YOUR VIDEO]"(括弧が残っている)は誤りです。
  • ユーザーが交換を要求したカメラ位置の説明(以下のプリセット)。

これを<動画ベース名>_kinetic_multicam_prompt.txtとして動画の隣に保存し、保存されたファイルを自己チェックします:

python "<このスキルのベースディレクトリ>/scripts/verify_prompt.py" "<保存された.txt>"

PASSと出力されなければなりません(先頭/末尾がテンプレートとバイト一致、すべてのブロックが整形式、位置が正規メニューから、境界が連鎖、最後のブロックが元のカメラに戻っている)。FAILの場合は修正して再実行してから提供します。

完成したプロンプトをフェンスで囲まれたコードブロックで提供します。使用方法で締めくくります: ソースビデオをSeedance 2.0 Fastにアップロード — このテンプレートが検証されているプラットフォームです(2026-07時点、Omniはテストで劣っていたため推奨しません) — それをソース映像として選択し、プロンプトを貼り付けます。提供されるプロンプト本文は、会話やビデオの言語にかかわらず常に英語です。スーパーだけがビデオの言語に従います。

正規テンプレート(固定)

バイト単位で再現します。改行も含めます。奇妙な部分は意図的です("The Supers"の大文字化、"same as original video"など)。奇妙に読めてもそのままにします。

アップロードされたビデオをソースとして使用します。スーパーはオーディオのペースに従わなければなりません。
ビデオのタイミングは元のビデオと正確に同じでなければなりません。

人の顔、アイデンティティ、表情、服装、体型、リップシンクを元の映像と正確に保持します。部屋、照明、家具、背景、環境全体を保持します。シーンの一部を置き換えたり、再デザインしたり、幻覚させたりしないでください。

唯一の変更は、高速な映画的なカメラの再配置と、キネティックモーショングラフィックスの追加のみです。

従来の字幕を追加しないでください。代わりに、大胆で高エネルギーのキネティックスーパーを作成し、話されたメッセージを視覚的に強調します。スーパーはモーショングラフィックスのように振る舞うべきであり、キャプションではありません。動的なタイポグラフィ、スケーリング、回転、遠近法、マスキング、トラッキング、創造的なレイアウトを使用します。ビデオ全体でスタイルを変化させ、各呼びかけが意図的で視覚的に魅力的になるようにします。テキストは決して話し手の顔を覆ってはいけません。各スーパーをフレームの空き領域に配置するか、話し手の体の後ろにレイヤーして、人物がテキストを部分的に隠すようにします。まるで単語が物理的にその背後にある部屋に存在しているかのように。テキストは構図と自然に統合する必要があります。

カメラの動きは非常に速くなければなりません。各トランジションは一瞬で、新しい視点に急速にスナップし、すぐに完全に安定したフレームにロックインします。カメラは各新しい位置まで**目に見えて移動**しなければなりません。つまり、高速でモーションブラーのあるウィップ移動で、スピードランプ感を伴います。編集カットであってはならず、アングル間の目に見えない瞬間ジャンプであってはなりません。長く連続したカメラ移動、浮遊感のある動き、ハンドヘルド感のある動きを作成しないでください。すべての動きは高速な映画的再配置とそれに続く停止のように感じられるべきです。

以下のタイムラインに従ってください:

[Xs]から[Xs]まで
キネティックスーパーを表示:
"[TEXT]"
カメラを高速モーションブラー軌道スイープで左に振り、左軌道位置に着地し、その後完全に静止します。

[Xs]から[Xs]まで
キネティックスーパーを表示:
"[TEXT]"
カメラを高速モーションブラークレーン上昇で上に振り、高いクレーンアングルに着地し、その後完全に静止します。

[Xs]から[Xs]まで
キネティックスーパーを表示:
"[TEXT]"
カメラを高速モーションブラープルアウトで後方に振り、話し手を中央に配置した部屋全体が見えるワイドポジションに着地し、その後完全に静止します。

[Xs]から[Xs]まで
キネティックスーパーを表示:
"[TEXT]"
カメラを高速モーションブラースイープで元のカメラ位置に戻し、終了まで静止します。

重要な要件:

* 部屋と人物を正確に維持します。
* 顔の特徴、服装、照明、背景を変更しないでください。
* 完璧なリップシンクを維持します。
* 異なるシーンへのハードカットはありません。
* すべてのトランジションは目に見えるモーションブラーのあるカメラ移動です。編集カットではありません。
* タイトルカードはありません。
* 字幕スタイルのキャプションはありません。
* スーパーは決して話し手の顔を覆いません。フレームの空き領域に配置するか、体の後ろにレイヤーし、決してその上に重ねません。
* 高速で一瞬のカメラ再配置のみで、その後ロックオフショットが続きます。
* モーショングラフィックスはプレミアムでモダン、エネルギッシュでソーシャルメディア最適化されたものにする必要があります。

フェンスは4ブロックのデフォルトを示しています。5ブロックまたは6ブロックの場合は、同じ固定の4行単位 — [Xs]から[Xs]まで / キネティックスーパーを表示: / "[TEXT]" / プリセット表から一字一句そのまま取った1行の位置 — を空行で区切って追加ブロックとして挿入し、元のカメラに戻るブロックを最後にします。デフォルトの位置シーケンス:

  • 4ブロック: 左軌道 → 高いクレーン → ワイド(部屋を見せる) → 元に戻る
  • 5ブロック: タイトクローズアップ → 左軌道 → 高いクレーン → ワイド → 元に戻る
  • 6ブロック: タイトクローズアップ → 左軌道 → 高いクレーン → 右軌道 → ワイド → 元に戻る

意味のマッチングはデフォルトの順序より優先されます。 確定する前に、各ブロックのフレーズをスキャンして、位置にマッピングされる意味を探します: 啓示/空間/「準備不要」 → ワイド、親密さ/秘密 → タイトクローズアップ、力/挑戦 → 低いヒーロー、概要/リスト → トップダウン、キーの詳細 → パンチインクローズアップ。フレーズがマッチした場合、そのブロックにマッチする位置を与え(それでもコントラストルールは尊重します)、チェックポイントでその選択を正当化します。「DON'T HAVE A FULL SETUP」がワイドルームリビールにマッチするのは正規の例です。

オプションのフックスーパー(チェックポイントでオプトイン)

デフォルトでは、オープニングホールドはテキストを持ちません。ユーザーがオプトインした場合、タイムラインの最上部に1つの追加ブロックを挿入します。[0s]からt1まで、カメラは動きません。これはフックとなるスーパーをフレーム1に配置するためだけに存在します:

[0s]から[Xs]まで
キネティックスーパーを表示:
"[TEXT]"
カメラを元の位置と構図に保ち、完全に静止します。

そのスーパーは密度ルールのカウントに含まれます(チェックポイントで「これは合計にカウントされます」と注意してください)。タイムスタンプの連鎖は同じです: フックブロックは[0s]から[t1]までで、[t1]はブロック1の開始と同じ値です。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル