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 を意味します。
-
オンボーディング状況を確認します。
${CLAUDE_PLUGIN_ROOT}/references/brand-voice.mdを読み込みます。ファイルが存在しない場合、または最初の行が<!-- MARKETING-SKILL:UNCONFIGURED -->の場合、処理を一時停止し、ユーザーにこのプラグインの4つのセットアップ質問をしてから続行します(優先タスク;作成するコンテンツタイプ;ターゲットオーディエンス+トーン;デフォルトの出力形式—/marketing-skill:marketing-setupと同じ)。回答をそのファイルに保存し、マーカーを今日の日付付きでCONFIGUREDに変更します。ファイルが未設定だが、ユーザーが既にセットアップをスキップするかデフォルトを使用すると言った場合は、質問しません:この実行ではプレースホルダーのデフォルト値を使用し、その旨を1行で伝え、マーカーはそのままにします。 -
クライアントを選択します。
montage-videoのステップ2(${CLAUDE_PLUGIN_ROOT}/skills/montage-video/SKILL.md)とまったく同じです:保存済みクライアント(プロフィールとその## Notesを読む)、新規クライアント(事業名、連絡先、必要な細則、ロゴ、カラー、好みの音楽)、またはユーザー自身のビジネス(client:は省略)。プロフィールは${CLAUDE_PLUGIN_ROOT}/state/clients/に保存され、git管理対象外です。 -
映像、音楽、ボイスを依頼します。 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コネクタが利用可能な場合は、それを使って新しいフォルダにダウンロードします。
- ユーザーまたはクライアントが撮影した、または使用ライセンスを持つ映像のみを使用し、かつ出演に同意した人のみを使用します。
- クリップ(デフォルトの依頼)。 各3~15秒の短いスマホ動画。部屋、アングル、または瞬間ごとに1つ。まだ撮影していない場合は、
-
ファイルを取り込みます。
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>にコピーします。
- 各クリップを
-
すべてのクリップを確認します。 動画を再生できないため、フレームを確認します:
- 各クリップに対して
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。
- 各クリップに対して
-
1メッセージでスコープを確認します。 提案し、ユーザーが修正できるようにします:
- 長さとショット数: 約15、30、または60秒、それを埋める瞬間。
- 音楽: ユーザーのトラック、クライアントのサウンド、別のジャンル、クリエイティブ・コモンズのトラック(まず聴いてもらうために送信)、またはなし。
- ボイス: ユーザーのナレーション、独自の音声を残すクリップ、またはなし。
- 画面上のテキスト: フック(
${CLAUDE_PLUGIN_ROOT}/references/hooks.mdから3つのオプション、それぞれ異なるパターンから)、各ショットのラベル、ステータスステッカー(あれば)、CTA、さらにリスティングや商品の場合は価格とスペック。すべての事実はユーザーまたはクライアントから提供されたものです。欠けているものがあれば尋ねるか、省略します。
-
スクリプトを書き、ページを構築します。 スタータースクリプトを編集します。フォーマットとすべてのタグは
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を実行します。チェックでリストされた内容を修正し(通常はラベルを短くする)、クリーンになるまで再実行します。 - クリップの範囲:
-
初回カット。
node VIDEO/render.js <page> --slidesのすべてのフレームを自分で確認します:被写体がフレーム内にあるか(横向きクリップから切り取られていないか)、ラベルが読めるか、キャプションがラベルと重なっていないか、順序がストーリーを伝えているか。その後:- ユーザーにスライドを送り、順序とテキストを承認してもらいます。
- レンダリング:
node VIDEO/render.js <page> state/videos/<slug>-v1.mp4 --cover 0。MP4(1080×1920、30fps)、カバー画像、およびボイスまたはキャプション付きクリップ音声がある場合は.srtキャプションファイルを書き出します。--draftはタイミング確認用のクイック半サイズ版を作成します。ドラフトを投稿しないでください。 - 結果の音声は聞けません。ユーザーに聴いてもらうよう依頼します:音楽、保持された各クリップ音声、キャプションに対するボイスオーバー。
-
完了するまで編集します。 各リクエストはスクリプトの編集になり、ページの編集ではありません。
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としてレンダリングします。以前のバージョンを上書きしないでください。