Communitygithub.com

Clip Montage

ユーザーの動画クリップを編集し、TikTok、Reels、Shorts向けの縦型リール動画に仕上げます:各クリップのベストな瞬間、ビートに合わせたカット、キャプション、ラベル、エンドカードを自動生成。

Clip Montage とは?

このスキル(Clip Montage)は、ユーザーがスマートフォンで撮影した短い動画クリップと音楽やボイスレコーディングを組み合わせ、すぐに投稿可能な9:16の縦型モンタージュ動画に編集するためのAIエージェントスキルです(Claude Code、Cursor、Codexなどで動作)。各クリップから最も印象的な瞬間を選び、ストーリーを伝える順序に並べ、ビートに合わせてカット。フック(冒頭の惹句)、各ショットのラベル、CTA(行動喚起)を自動付与し、人物の会話や効果音など重要な音声はそのまま残しつつ、全体にボイスオーバーとシンクロしたワードバイワードのキャプションを追加します。ユーザーが満足するまで何度でも編集可能で、各バージョンは上書きされず保存されます。このスキルは完全無料で、すべての処理はローカルマシン上で実行され、アカウント登録やクレジット消費、外部サーバーへのデータ送信は一切不要です。静止画のみの場合は姉妹スキル「montage-video」を呼び出し、AIカメラムーブが必要な場合のみ有料プランの利用を提案します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/GreyCatVP/marketing-skill/tree/main/skills/clip-montage

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

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

ドキュメント

Clip Montage(クリップモンタージュ)

目的

ユーザーがスマートフォンで撮影した短い動画と、手持ちの音楽や音声録音を使って、すぐに投稿できる完成度の高い9:16モンタージュに編集します:

  • 各クリップのベストな瞬間を、ストーリーを伝える順序で配置
  • ビートに合わせてカット
  • 最初のショットにフック(惹句)、各ショットにラベル、最後にCTA(行動喚起)
  • 重要な音声(誰かの会話、ジュージューという音、歓声など)はクリップの音声をそのまま使い、ワードバイワードでキャプション
  • 動画全体にユーザーのボイスオーバーを載せ、同期したキャプションを表示

その後、ユーザーが満足するまで(「彼女が笑っている部分を使って」「キッチンを最初に」「音量を上げて、音楽なし」など)編集を繰り返します。各バージョンは上書きされず、以前のバージョンは保持されます。

これがモンタージュのデフォルトであり、無料です。 すべてのレンダリングはこのマシン上でプラグインの scripts/video/ ツール(montage.js が短いスクリプトからページを構築、render.js がMP4を生成)を使って行われます。アカウントもクレジットも不要で、データがマシンの外に出ることはありません。実際の映像こそ、場所や製品を最も真実に伝えます。AIが何かを捏造することはありません。

費用がかかるものと、それを提案するタイミング:

ユーザーが持っているもの実行内容費用
動画(写真、音楽、音声録音があってもなくても)このスキル無料
写真のみで、いくつかクリップを撮影できるクリップを依頼し、その後このスキル無料
写真のみで、クリップ撮影不可montage-video でローカルムーブ(パン、プッシュイン、3Dムーブ)無料
写真のみで、本格的なカメラムーブ(新しいアングル)を希望montage-video の「AIカメラムーブ」。ただし、ユーザーが有料プラン(Figma Weaveは有料Figmaプラン、Higgsfield等)を持っていると明言し、見積もりを承認した場合のみ。有料クレジット

このスキルから有料のビデオモデルを実行しないでください。ユーザーが有料プランを持っていて希望すると言わない限り、見積もりを提示しないでください。

ステップバイステップのプロセス

プラグインルート: 以下のパスに未展開の CLAUDE_PLUGIN_ROOT プレースホルダーが含まれている場合(Claude Codeは自動展開しますが、Codexなどの他のエージェントは展開しません)、使用前に解決してください:printenv CLAUDE_PLUGIN_ROOT の出力(パスが表示される場合)を取得するか、表示されない場合はこのファイルのフォルダから references/brand-voice.md を含む最初のフォルダまでさかのぼります。どちらも機能しない場合は、ユーザーにプラグインの場所を尋ねてください。その絶対パスを以下のすべてのファイルパスとシェルコマンドで使用します。以下の VIDEO は ${CLAUDE_PLUGIN_ROOT}/scripts/video を意味します。

  1. オンボーディング状況を確認します。 ${CLAUDE_PLUGIN_ROOT}/references/brand-voice.md を読み込みます。ファイルが存在しない場合、または最初の行が <!-- MARKETING-SKILL:UNCONFIGURED --> の場合、処理を一時停止し、ユーザーにこのプラグインの4つのセットアップ質問をしてから続行します(優先タスク;作成するコンテンツタイプ;ターゲットオーディエンス+トーン;デフォルトの出力形式—/marketing-skill:marketing-setup と同じ)。回答をそのファイルに保存し、マーカーを今日の日付付きで CONFIGURED に変更します。ファイルが未設定だが、ユーザーが既にセットアップをスキップするかデフォルトを使用すると言った場合は、質問しません:この実行ではプレースホルダーのデフォルト値を使用し、その旨を1行で伝え、マーカーはそのままにします。

  2. クライアントを選択します。 montage-video のステップ2(${CLAUDE_PLUGIN_ROOT}/skills/montage-video/SKILL.md)とまったく同じです:保存済みクライアント(プロフィールとその ## Notes を読む)、新規クライアント(事業名、連絡先、必要な細則、ロゴ、カラー、好みの音楽)、またはユーザー自身のビジネス(client: は省略)。プロフィールは ${CLAUDE_PLUGIN_ROOT}/state/clients/ に保存され、git管理対象外です。

  3. 映像、音楽、ボイスを依頼します。 1メッセージで:

    • クリップ(デフォルトの依頼)。 各3~15秒の短いスマホ動画。部屋、アングル、または瞬間ごとに1つ。まだ撮影していない場合は、montage-guide.md の「クリップ撮影のコツ」を伝えます:縦向き、各ショットを3~5秒静止、ゆっくり動かす、良い照明、詳細はクローズアップで。
    • 音楽(もしあれば)。 広告で使用する権利のあるトラック。ストリーミングアプリやラジオの曲は該当しません。それ以外の場合:クライアントの保存済みサウンド(無料生成トラック)、クリエイティブ・コモンズのトラック(node VIDEO/media.js search "<mood>" --type music --out state/videos/assets --count 3)、または音楽なし(後でアプリでトレンドサウンドを追加)。TikTokとInstagramのビジネスアカウントには商用利用ライブラリがあります。
    • ボイス(もしあれば)。 録音したナレーション(1ファイルでOK、スマホのボイスメモでも可)、その内容を一字一句正確にキャプション用に添えて。または、誰かがカメラに向かって話しているクリップ。またはなし:ほとんどのモンタージュは音楽のみです。
    • 参考にしたいモンタージュ(あれば)。 ユーザーが送る動画(または brand-voice.md のビデオ設定にあるスタイルリファレンス)。node VIDEO/reference.js <video> を実行し、その reference.md を読み、シートを確認します。その後、そのペース(pace: 典型的なショットの長さ、カットがビートに合う場合の拍数)、クイックカットの連続、キャプション、雰囲気に合わせ、何を合わせているかを1行で伝えます。編集方法をコピーするのであって、映像、音楽、言葉をコピーするのではありません。アプリから誰かの投稿をダウンロードするのではなく、ファイル自体を依頼してください。
    • 写真のみの場合? 代わりにいくつかクリップを撮影できるか尋ねます(無料で最も真実を伝えます)。できない場合は montage-video に引き継ぎます。このスキルは無料のローカルムーブで写真を動かします。本格的なカメラムーブや新しいアングルをユーザーが求めた場合にのみAI写真動画変換を提案し、有料プラン(Figma Weaveのビデオモデルは有料Figmaプランでのみ動作)が必要であることを伝えます。ユーザーが有料プランを持っていると明言し、見積もりを承認した後にのみ、montage-video の「AIカメラムーブ」に従って実行します。
    • ファイルをディスクに保存します。 レンダラーはファイルを必要とします:フォルダ(またはファイルパス)を依頼します。チャットに貼り付けられた動画はレンダラーで読み取れません。Google Driveにあり、Driveコネクタが利用可能な場合は、それを使って新しいフォルダにダウンロードします。
    • ユーザーまたはクライアントが撮影した、または使用ライセンスを持つ映像のみを使用し、かつ出演に同意した人のみを使用します。
  4. ファイルを取り込みます。 node VIDEO/montage.js inspect <folder> --slug <slug> を実行します。スラッグは短く、動画に名前を付けます(maple、taco-night など)。

    • 各クリップを state/videos/assets/<slug>-01.mp4 などにコピーします。画像と音声はそのまま、メタデータは削除されます(スマホクリップの位置情報など)。オリジナルには触れません。
    • 各クリップのサイズ、形状、長さ、音声の有無を表示し、長いクリップ、横向きクリップ、低解像度クリップにフラグを付けます。
    • 番号付きのコンタクトシート <slug>-contact.png と、スタータースクリプト state/videos/<date>-<slug>.md(ファイルごとに1ショット)を書き出します。
    • ユーザーの音楽を state/videos/assets/<slug>-music.<ext> に、ボイスオーバーを state/videos/assets/<slug>-vo.<ext> にコピーします。
  5. すべてのクリップを確認します。 動画を再生できないため、フレームを確認します:

    • 各クリップに対して node VIDEO/montage.js frames <clip> --every 1 を実行します(短くて動きの多いクリップは --every 0.5)。毎秒のフレームを時刻付きで並べ、クリップの音声が大きい箇所(誰かが話している、または残す価値のある音)を表示します。各シートを読みます。
    • 各クリップが何を示しているかを名前付け、ベストな瞬間を選びます:安定していて、鮮明で、照明が良く、被写体がはっきりしているもの。震えている開始部分、電話を下げる動作、ぼけ、出演に同意していない人がいる部分はスキップします。各選択は範囲 [from: 3.5] [to: 6.5] で指定します:ほとんどのショットには1.5~4秒が適切です。長いクリップは異なる瞬間から2~3のショットを提供できます。
    • 横向きクリップは9:16にトリミングされます。フレーム内に何を収めるかを [focus: x%,y%](人物、製品、暖炉)で指定します。
    • 音声を残すべきクリップ([sound])をメモします:カメラに向かって話している人、笑い声、グリル上のジュージューという音。再生できないため、ユーザーに何が言われているかを一字一句尋ね、キャプション用に取得し、どのクリップの音声を残すかをユーザーが確認できるように伝えます。
    • どのクリップまたは瞬間を除外したかとその理由を伝え、ユーザーが覆せるようにします。
    • ショットを ${CLAUDE_PLUGIN_ROOT}/references/montage-guide.md(「クリップ:順序」)に従って並べます:最も強い瞬間を最初に、次に場所やイベントを巡るルート、最後にCTA。
  6. 1メッセージでスコープを確認します。 提案し、ユーザーが修正できるようにします:

    • 長さとショット数: 約15、30、または60秒、それを埋める瞬間。
    • 音楽: ユーザーのトラック、クライアントのサウンド、別のジャンル、クリエイティブ・コモンズのトラック(まず聴いてもらうために送信)、またはなし。
    • ボイス: ユーザーのナレーション、独自の音声を残すクリップ、またはなし。
    • 画面上のテキスト: フック(${CLAUDE_PLUGIN_ROOT}/references/hooks.md から3つのオプション、それぞれ異なるパターンから)、各ショットのラベル、ステータスステッカー(あれば)、CTA、さらにリスティングや商品の場合は価格とスペック。すべての事実はユーザーまたはクライアントから提供されたものです。欠けているものがあれば尋ねるか、省略します。
  7. スクリプトを書き、ページを構築します。 スタータースクリプトを編集します。フォーマットとすべてのタグは VIDEO/montage.js の先頭に文書化されています:

    ---
    title: taco night
    client: casa-lupe
    hook: tuesday is taco night
    cta: book a table · link in bio
    music: assets/taco-night-music.mp3
    pace: 4 beats
    ---
    3. assets/taco-night-03.mp4  Fresh off the grill  [from: 1.2] [to: 4] [sound]
    1. assets/taco-night-01.mp4  Handmade tortillas  [from: 0.5] [to: 3] [focus: 40%,60%]
    2. assets/taco-night-02.mp4  Meet chef Lupe  [from: 6] [to: 10.5] [sound] [say: Every tortilla is pressed by hand, every morning.]
    4. assets/taco-night-04.mp4  The patio  [from: 2] [to: 5] [move: push-in]
    
    • クリップの範囲: [from:] と [to:] で範囲を設定します。ショットはその後ビートに合わせられます(切り上げられるため、[to:] を少し超えて再生されます)。クリップには小節ではなく拍数(pace:)を使用します:小節は96BPMで3秒の範囲を5秒に切り上げます。
    • クリップの独自音声: [sound] は同期して再生され、音楽はその下でダックされます。そのクリップに [say: ...] がある場合、それはクリップ内で話されている内容で、ワードバイワードでキャプションされます。再度音声化されることはありません。
    • ユーザーのボイスオーバー: voiceover: assets/<slug>-vo.m4a と voiceover-text: <一字一句正確なテキスト>。0.3秒から再生され(voiceover-at: で変更可能)、音楽はその下でダックされ、キャプションはすべてのショットで下部に表示され、ショットはそれをカバーするように引き伸ばされます。[say: ...] の音声ラインは併用しないでください。
    • ユーザーの音楽: music: assets/<slug>-music.mp3。ビートは beats.js で読み取られ、カットはそれに合わせられます。music: none はアプリでトレンドサウンドを追加するためにスペースを残します。
    • ムーブ: クリップは独自の動きを保持します。[move: push-in]、pull-out、または drift でスローズームを追加します。パンはズームされたクリップをスライドさせます。フレームの外にパンする対象はありません。
    • 写真が混在する場合 は montage-video(パン、プッシュイン、3Dムーブ)と同様に動かします。

    次に node VIDEO/montage.js state/videos/<date>-<slug>.md を実行します。スクリプトの隣に <date>-<slug>.html を書き出し、ショットテーブル、サウンド、ボイス、および注意事項(クリップがショットより短い、ラベルが読めるようにショットが保持されているなど)を表示し、render.js --check を実行します。チェックでリストされた内容を修正し(通常はラベルを短くする)、クリーンになるまで再実行します。

  8. 初回カット。 node VIDEO/render.js <page> --slides のすべてのフレームを自分で確認します:被写体がフレーム内にあるか(横向きクリップから切り取られていないか)、ラベルが読めるか、キャプションがラベルと重なっていないか、順序がストーリーを伝えているか。その後:

    • ユーザーにスライドを送り、順序とテキストを承認してもらいます。
    • レンダリング:node VIDEO/render.js <page> state/videos/<slug>-v1.mp4 --cover 0。MP4(1080×1920、30fps)、カバー画像、およびボイスまたはキャプション付きクリップ音声がある場合は .srt キャプションファイルを書き出します。--draft はタイミング確認用のクイック半サイズ版を作成します。ドラフトを投稿しないでください。
    • 結果の音声は聞けません。ユーザーに聴いてもらうよう依頼します:音楽、保持された各クリップ音声、キャプションに対するボイスオーバー。
  9. 完了するまで編集します。 各リクエストはスクリプトの編集になり、ページの編集ではありません。montage.js がすべてのタイミングを再計算するためです:

    ユーザーの発言スクリプトの変更
    「彼女が笑っている部分を使って」該当ショットの [from:] / [to:](--every シートで見つける)
    「ブレている部分をカットして」より遅い [from:]、またはより早い [to:]
    「キッチンをもっと長く」より遅い [to:]、または [hold: 4s]
    「速く」 / 「遅く」より短い範囲、pace:(例:3 beats)、または length:
    「15秒にして」length: 15、最も弱い瞬間を削除(どれかを伝える)
    「キッチンを最初に」、「3と5を入れ替えて」番号付き行の順序を変更
    「そのクリップの音声を残して」 / 「ミュートして」[sound] を追加または削除
    「彼の言っていることにキャプションを追加して」その [sound] クリップに [say: <彼の言葉、正確に>]
    「私のナレーションを追加して」voiceover: と voiceover-text:
    「別の曲」 / 「音楽なし」music: を別のファイル、ジャンル、または none に
    「左側を見せて」、「彼女をフレームに収めて」[focus: 25%,50%]
    「そこをズームインして」[move: push-in](その場所に [focus:] を付けて)
    「よりスムーズに」 / 「カットを力強く」transition: fade、または cut、slide、zoom、wipe、flash
    「テキストを変更して」ラベル、hook:、cta:、price:、specs:
    「スローモーションで」未サポート:速度変更は不可。スマホのスローモーションで撮影されたクリップはそのまま再生
    「別の色/ロゴ/電話番号」クライアントのプロフィール、スクリプトではない

    各ラウンド:スクリプトを編集し、montage.js を再実行し、タイミング変更の場合は --draft、見た目の変更の場合は --slides を使用します。次のバージョンを <slug>-v2.mp4、-v3.mp4 としてレンダリングします。以前のバージョンを上書きしないでください。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル