mcpField
S
scenario-video

scenario-video

github.com/scenario-labsクリエイティブ・メディア1.2k481 回インストール1 日前に更新
リポジトリ

scenario-video について

scenario-video は、動画生成・編集モデルの検索、実行、反復手順を扱う Scenario のスキルです。動画制作者向けに、テキストや画像からの生成、吹き替え、リップシンク、拡大、クリップ操作を案内します。

主な機能

  1. 01動画モデルの検索と選択
  2. 02モデルごとの入力確認
  3. 03テキスト・画像からの動画生成
  4. 04動画の編集・吹き替え・リップシンク
  5. 05クリップのカット・結合・拡大

活用シーン

  1. 01静止画から短い動画を作成
  2. 02台詞を翻訳して口の動きを同期
  3. 03クリップの延長や画角の変更

MCP 対応

Scenario MCP ツールでモデルを推奨または検索し、入力スキーマを確認してアセットをアップロードし、生成・編集ジョブを実行して結果を表示またはダウンロードします。

インストール

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

$npx skills add https://github.com/scenario-labs/skills --skill scenario-video

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

詳細

シナリオの動画生成と編集

概要

Scenario では、1 つの MCP ループを通じて豊富な動画カタログを利用できます。テキストから動画および画像から動画を生成するツールに加え、動画から動画への編集、リップシンク、アップスケーリング、決定論的なカット/分割/結合ツールが揃っています。ファミリーごとの仕様:scenario-kling、scenario-veo、scenario-seedance、scenario-gemini-omni、scenario-luma-video、scenario-runway、scenario-grok-imagine-video、scenario-wan、scenario-minimax-video、scenario-vidu。

接続と生成の基本的な流れについては、scenario スキルを参照してください。ここに記載されている兄弟スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください (npx skills add scenario-labs/skills --skill <name>)。ユーザーの応答を待たずに進める場合は、ツールのスキーマに基づいて作業し、不足しているスキルがあることを明示してください。

クイックリファレンス

手順ツール備考
モデルを探すrecommend または searchrecommend には、ユーザー自身の言葉で書かれた要望と、列挙型から選んだ capability(曲の場合は img2video、video2video、audio2video。映像のアップスケーリングとトラックへの同期はいずれも video2video)を指定します。名前を探す場合は search を使用します
入力を確認するmodel_schema_getmodel_run の前に必ず実行してください。動画のスキーマは大きく異なります(長さ、アスペクト比、フレームアンカーなど)
ソースをアップロードするupload_assetローカルの静止画またはクリップが asset_id になります
生成するmodel_run動画では wait=false を指定します。先にコストを見積もるには dry_run=true を指定します
待機するjobs_wait返された pending_job_ids を使って、完了するまで再度呼び出します。約 180 秒のタイムアウトはエラーではありません
確認するasset_display / asset_downloadインラインで表示します。asset_download はファイル URL を返すため、curl -L で保存します

実例:キーアートの静止画を短い広告クリップにアニメーション化する

  1. ユーザー自身の言葉をpromptとしてrecommendを呼び出します(必要なのは機能であるimg2videoです)。scenarioスキルの指示に従ってnext_stepを処理します。
  2. 選択した候補に対してmodel_schema_getを呼び出します。画像フィールド、長さの選択肢、最後のフレームのアンカーがある場合はその内容を確認します。
  3. 静止画をupload_assetに渡します。asset_id="asset_abc"が返されます。
  4. 次のparametersを指定してmodel_runを呼び出し、wait=falseにします。job_idが返されます。 parameters={"image": "asset_abc", "prompt": "Close-up on the mug; slow dolly-in as steam curls through window light, shallow focus on the rim. Room tone and a soft kettle hiss, no subtitles."}
  5. job_ids=["job_xyz"]を指定してjobs_waitを呼び出し、保留中のジョブがあればpending_job_idsを指定して再度呼び出します。
  6. 出力に対してasset_display(asset_idを指定)を呼び出し、その後asset_downloadを呼び出します(formatは指定しません)。

元画像ですでにルックが決まっているため、プロンプトでは動き、カメラ、タイミングだけを指定します(「左に回り込む」、「最後のポーズで静止」など)。再試行のたびに変更するのは一節だけにします。最初のフレーム用フィールドはクリップの冒頭を固定します(最後のフレーム用フィールドがある場合は、どのように終わるかを固定します。ただし、最初のフレームと一緒に指定する場合に限ります。単独で指定すると400エラーA first frame must be provided if a last frame is setが発生します)。参照画像用フィールドは、特定の瞬間を固定せずにアイデンティティとルックを引き継ぎます。そのため、正確な冒頭の構図にはレンダリング済みの静止画を、繰り返し登場するキャラクターや製品には参照画像を使用します。1回の実行で両方を使えるかどうかはスキーマによって異なり、組み合わせを禁止しているものもあります。参照音声用フィールドは、プロンプトで用途を明示する必要があります。何を条件付けるか(あるファミリーではタイミングと勢い、別のファミリーでは声)、また単独で使えるか、画像または動画の参照と併用する必要があるかは、各ファミリーのスキルの仕様に従います。ただし、どのメンバーでも、キャラクター参照と一緒に音声トラックを黙って渡すだけでは簡単に無視されてしまうため、そのトラックの用途をプロンプトで指定します(セリフなら「参照音声は彼女自身の声で、リップシンクさせる」、音楽ならカットを合わせるビート)。学習済みLoRAは一緒に指定できません。作成時点では、動画のどのメンバーもlorasを受け付けていなかったため、カスタムスタイルを動画に反映させるには、LoRAを使って生成した静止画を最初のフレームまたは参照画像として渡します。最も安価な解像度ティアと実用上最短のdurationで反復し、採用するものを後からアップスケールします。高いティアでの再実行は新たな生成です。多くの動画スキーマにはseedがなく、ティアをまたいで同じショットを再現できる保証もありません。

ショットのプロンプト作成

タグではなく文章でショットの演出を記述します。ショットサイズ、設定、被写体と1つの動作、名前を指定したゆっくりしたカメラ移動、光源、スタイル、音声の指示を、ファミリースキルが示す順序で記述します。名前を指定したカメラ移動や具体的な光の指示は生成後も維持されますが、雰囲気を表す言葉は維持されません。

多くの生成器は映像とともに音声(セリフ、効果音、環境音、ときには音楽)を返します。スキーマにgenerateAudioまたはaudioがある場合はそれで切り替えます。どちらにもそれぞれ独自のデフォルト値があります。どちらもない場合は、検索結果に音声が返るかどうかが示され、音声内容を制御できるのはプロンプトだけです。効果音と環境音は通常の言葉で記述し、セリフは引用符で囲み、音にすべきものだけを指定します。「音楽なし」は、指定したジャンルや楽器と同様に、サウンドトラック独自のモデレーションに抵触することがあります(音楽は編集工程で一度だけ追加し、サウンドトラック全体を編集工程で用意する場合は音声をオフにします)。それでも音楽が混入する場合は、音声をオフにして再実行し、効果音モデルまたは動画から音声を生成するモデルで音を追加します。音声切り替え機能のないメンバーではそのように再実行できないため、切り替え機能のあるメンバーに移行します。画像には「字幕なし、画面上のテキストなし」といった除外指定を引き続き使います。字幕ツールは字幕を追加しますが、削除はしないためです。スキーマにnegativePromptがある場合を除き、除外指定はプロンプトに含めます。視聴者に読ませる文字は編集工程(scenario-video-assembly)で合成します。生成文字は崩れていきます。

既存の映像素材を編集する

編集はすべて、recommendで見つけた動画入力対応モデルでのmodel_runです。

  • プロンプト駆動の編集(スタイル変更、オブジェクトやキャラクター、背景の差し替え、別のアスペクト比へのリフレーミング)。リフレーミングではフレーム外をアウトペイントします。決定論的なリサイズとは異なります。プロンプト駆動の編集で指示した変更(色の変更、小道具の差し替えなど)が反映されなかった場合は、静止画を編集します。asset_getはクリップのfirstFrameを無料のアセットIDとして返します。画像モデルで編集し、最初のフレームとして使って再レンダリングします。スキーマがそのペアを受け取る場合は、ソースクリップも一緒に渡します(対応するモデルは少数です)。
  • リップシンクと吹き替え:次のセクションを参照してください。
  • 最大4Kへのアップスケーリング。
  • 決定論的なユーティリティ(トリム、分割、リサイズ、エフェクト、カラーグレーディング、フレーム抽出、背景除去):scenario-video-editingを参照してください。完成したカットの組み立てについては、scenario-video-assemblyを参照してください。
  • クリップの最終フレームからの延長。専用の延長メンバーを使うか、メンバーの長さ上限を超える場合は、最初のフレームを指定した実行を連鎖させます。レンダリングしたクリップに対してasset_getを実行し、lastFrameのアセットIDを次の実行の最初のフレームとして渡します。計画ではなく、フレームに表示される内容(位置、向き、カメラの側など)をもとにプロンプトを作成し、つなぎ目で画面上の方向が維持されるようにします。レンダリング結果は計画からずれるためです。実行結果をmodel_scenario-video-concatで結合します。カットツールや分割ツールと同じ理由で固定IDが使われます。デフォルトではハードカットとなり、詳細はscenario-video-assemblyを参照してください。

吹き替えはリップシンクではありません

吹き替えでは音声を翻訳し、各話者の声、口調、タイミングを維持します。口は動かさないため、吹き替え後のトーク映像でも、口は元の言語を話す形のままです。以下の3つの手順を行います。下記の制限に応じて、必要なトリムを済ませてから実施してください。

  1. 吹き替え。 クリップをfileとして渡し、スキーマで許可された値からtargetLangを指定します。モデルによって自動検出を意味する値が異なるため、sourceLangは省略して自動検出させます。ブランド名や名前を翻訳後も保持する必要がある場合は、すべてのモデルが対応しているわけではないため、スキーマにkeytermsを持つ候補を選びます。array: trueの場合は、用語が1つだけでも["Scenario"]のように渡します。
  2. 抽出。 吹き替えで返されるのは吹き替え後の動画であり、音声トラック単体ではありません。一方、リップシンクには音声アセットが必要です。音声を取り出すには、固定のファーストパーティIDであるmodel_scenario-audio-extractを使います。この処理を行うScenarioの決定論的なツールはこれだけなので、検出しても同じIDが再び見つかるだけです。
  3. リップシンク。 吹き替え後の動画と、そこから抽出した音声トラックを渡します。入力の元の音声が出力に残るかどうかは、どのスキーマにも記載されていないため、公開前に出力を聴いて確認してください。クリップとトラックは別々のフィールドで、多くの候補ではvideo/audio、それ以外ではvideoUrl/audioFileを使います。長さの不一致を制御する設定はすべてのモデルにあるわけではありません。用意されている場合はsyncModeまたはlipsyncMode(cut_off、loop、bounce、silence、remap)で指定し、デフォルト値はモデルごとに異なります。この設定がある場合、loopとbounceは短い方のストリームを延長し、cut_offは短い方の長さで終了します。それ以外の場合は、loopブール値で音声をループします。

フォトリアルなキャラクターで実現できると約束する前に、様式化されたキャラクターのローカライズ済みトーク映像で品質を確認してください。

長さの制限

モデルが入力長に上限を設けている場合、入力はトリミングされずに拒否されます。たとえば、上限が30.0秒のとき、30.08秒の素材を参照すると実行全体が失敗し、エラーには両方の数値が示されます。クリーンな dry_run ではペイロードの料金が見積もられますが、上限を超えていないことの証明にはなりません。asset_get で入力の長さを確認し、自分で上限と比較してください。上限は、ファイルフィールドの型付き max_duration、そのフィールドの説明文、または上限なしのいずれの場合もあるため、動画だけでなく音声入力についても両方を確認してください。上限がある場合は、それを適用する実行の前に、決定的なカットツールまたは分割ツール(上記の抽出ツールと同じ理由で、固定IDを使用します)でトリミングしてください。また、ダビングなど、出力をトリミング後の映像に合わせる必要があるステップの前にもトリミングしてください。範囲の端ではなく、指定された範囲内に収めてください。

下限も上限と同様に厳格です。メンバーがレンダリングする最短クリップの長さはスキーマに定義されています。数値の duration の min、duration の列挙型にある allowed_values の最小値、またはフィールドがない場合の固定長(作成時点で、参照条件付きメンバーのひとつでは5秒、ほかのメンバーでは1秒または2秒)として指定されています。そのため、VFX要素を1〜2秒だけ作る場合、最初の候補に duration: 1 を指定しても実現できません。ユーザーの言葉にあるクリップの長さを使って recommend を呼び出し、スキーマで下限を確認してください。十分に短いものがない場合は、最短のクリップをレンダリングして model_scenario-video-cut でトリミングするか、「爆発を3回、順番に」など、ひとつのクリップに複数のイベントを含めるよう依頼し、model_scenario-video-split で分割してください。逆に max を超えて延長する方法については、「既存映像の編集」のラストフレーム連結を参照してください。

リップシンク:映像素材か静止画か

入力素材によって、使う方法は2つに分かれます。映像素材に新しい音声トラックを合わせる場合は、capability="video2video" で recommend を呼び出し、ユーザーの言葉で依頼します。この方式のメンバーは口元の領域を描き直し、フレームの残りの部分を維持します(video と audio、または videoUrl と audioFile を使います。一部のメンバーは音声の代わりに音声付きの型指定 text を受け付けますが、両方は指定できません)。静止画に音声トラックを合わせる場合は、capability="img2video" を使います。トーキングアバター向けのメンバーはポートレート全体をアニメーション化し、動きを生成します。そのため、映像素材がないポートレートや、動きを残す必要のない映像素材に適しています。リップシンクに失敗したクリップを救済する用途には使えません。結果は別のショットを使った別の演技になるためです。リップシンクを機能名として指定すると、この2つのどちらかに読み替えられるため、入力素材を指定してください。

事前確認は無料で、実行するかどうかの判断に役立ちます。同期用のメンバーは、検出した口元のピクセルを描き直します。顔がフレーム内で小さい、そっぽを向いている、遮られている、または動きでぼやけている場合、描き直す対象が見つかりません。その場合、実行は完了して課金されますが、口元には新しい音声トラックが反映されません。これはユーザーから「リップシンクがまったくない」と報告される失敗です。asset_get で取得できるクリップの firstFrame を asset_display で表示し(無料)、表示サイズで唇がはっきり見えるか確認してください。見えない場合は、メンバーを再試行するのではなく、まず顔に寄せてクロップします(model_scenario-compose-video を使います。コンポジターの scenario-video-assembly では方法を説明しています。または、上記のカットツールと同様に固定のファーストパーティ ID を使います。あるいは、話者に寄るよう指示した生成的なリフレームを使います。アウトペインティングによるリフレームはフレームを広げて顔を小さくします)。クロップすると解像度が下がるため、同期の実行料金を確認する前に、asset_get からクロップ後のクリップの幅と高さを読み取り、メンバーの下限と照らし合わせてください。下限を下回る場合はアップスケールするか、下限のないメンバーを選びます。複数の顔がフレーム内にある場合は、話者選択を公開しているメンバー(作成時に指定する activeSpeaker が使えるメンバー)を選ぶか、1人の話者だけが映るようにクロップしてください。メンバーごとの制限は説明ではなくスキーマに記載されています。あるメンバーは720p~1080pの2~10秒のクリップに対応し、ほかのメンバーには制限がありません。video フィールドには cost_impact: true が設定されているため、実行前に出力可能な範囲に合わせてトリミングしてください(上記の再生時間の制限を参照)。

この用途ではプランによる制限が一般的です。recommend は、そのようなメンバーのランク付きエントリーに requires_plan_upgrade: true を付け、必要なプランを required_plan に示します(レスポンスでプラン制限が _degraded とされている場合を除きます)。そのメンバーを実行すると、必要なモデルとプランを示す403エラーが返されます。再試行しても解消されないため、利用可能なメンバーを選ぶか、アップグレードを案内してください。scenario スキルのプラン表を参照してください。

ジョブの完了が証明するのは、モデルが実行されたことだけであり、口元が動いたことではありません。出力とソースをダウンロードし、同じタイムスタンプのフレームを比較してから公開してください(両方をローカルでコンタクトシートにまとめ、ffmpeg -vf "fps=2" を使って口元の領域を確認します)。一連のフレームで口元のピクセルが変化していない場合、顔が検出されていません。同じペイロードで再現されるため、シードではなくフレーミングまたは方式を変更してください。音声も聴いて確認してください。入力に含まれる音声トラックが保持されるかどうかは文書化されていません(上記のダビングを参照)。

1回の実行で曲全体を生成

capability="audio2video" を指定した recommend にユーザーの言葉を渡すと、完成した曲から1回の呼び出しでミュージックビデオを生成するメンバーが見つかります。作成時点で利用できる曲全体向けメンバーは、10秒から6分までの audio を受け取り、トラックと同じ長さの動画を返します(同じランキングには、長さが約20秒に制限されたセグメント向けメンバーも含まれます)。そのため、次の点に注意してください。

  • まずトリミングします。 audio と resolution には cost_impact があるため、model_scenario-audio-cut で納品する部分だけにカットしてから、実際のペイロードで dry_run を実行します。
  • スタイル参照はカスタムスタイルの場合のみ使います。 プリセットの style では styleImage は無視されます。スタイル画像を使うには、カスタム値を設定してください。キャラクターの image は別の任意フィールドです。プロンプトは不要です。方向性は style、musicStyle、参照画像で指定します。
  • 歌詞は動画に焼き込まれた字幕になります。 組み立て時に字幕を追加する場合(scenario-video-assembly)、歌詞が重ならないよう lyrics は空にしておきます。

トラック全体を一度に処理する場合は、この方法を選んでください。ショットごとの指示に基づくビートカットのショットには scenario-seedance-music-video を使います。曲の長さに応じてジョブの処理時間が変わるため、wait=false と jobs_wait で起動してください。

よくある間違い

  • 完了ステータスだけを見てリップシンクの実行結果を納品すること。新しいトラックに合わせて口元が静止したままになる場合があるため、まずソースとフレームを比較してください。
  • model_schema_get を呼び出さずに model_run を呼び出すこと。Kling で動作したペイロードが Veo では使えないことがあります。
  • 検索結果が変わらないと思い込むこと。カタログは更新されるため、search を再実行し、非推奨ではない結果を優先してください(deprecated:<replacement_id> タグには後継モデルが示されます)。ファミリー全体が予告のうえで世代ごと廃止されることがあり、廃止されたメンバー固有の制御項目(キーフレームの強度や fps の列挙値など)は引き継がれません。古いペイロードを移行するのではなく、後継モデルのスキーマを再確認してください。また、保存済み ID が 404 Model not found を返す場合は、同じ ID を再試行せず、ファミリー名で search してください。
  • 音声対応プロンプトで音楽を除外すること。サウンドトラックは個別にモデレーションされ、「音楽なし」や特定のジャンル・楽器名は、除外の中にあってもモデレーションに引っかかります。「部屋の環境音、足音、1人の声」のように、場面内の音を肯定的に記述するか、音声フィールドをオフにしてください。

コメント