scenario-seedance-music-video について
scenario-seedance-music-videoは、指定されたマスタートラック、歌詞、ストーリー、フレーム、生成ショットからミュージックビデオを制作するスキルです。スクリプトで楽曲を分析して編集を組み立て、マスターが変更されていないことを検証します。
主な機能
- 01楽曲構成とカット候補の分析
- 02歌詞、ストーリー、参照フレームの計画
- 03Seedanceによるショット生成
- 04ffmpegによるクリップの編集と整形
- 05ハッシュによるマスターの検証
活用シーン
- 01指定曲を基にしたミュージックビデオ制作
- 02楽曲のセクションに合わせたカット配置
- 03生成した環境音をマスターの下にミックス
- 04元のトラックを保った動画の納品
MCP 対応
Scenario MCPツールで歌詞の文字起こし、画像・動画モデルの検索と実行、素材のアップロード、ジョブの監視を行います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-seedance-music-videoインストール後、Claude Code で/scenario-seedance-music-videoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/shots.mdscripts/build.pysong.py詳細
シナリオ:Seedance ミュージックビデオ
概要
5つのステップで進めます。曲、歌詞、ストーリー、フレーム、動画です。提供されたマスター音源だけをスコアとして使い、各ショットで独自のスコアは作成しません。scripts/build.py は最後にマスター音源を一度だけ映像に重ね、ハッシュでファイルが変更されていないことを証明します。scripts/song.py はマスター音源を読み込み、その構成に合わせてカットを配置します。スクリプトの実行には PATH 上の ffmpeg と ffprobe、さらに song.py には numpy が必要です。
接続方法と基本的な生成ループについては、このリポジトリの scenario スキルを参照してください。Seedance のパラメータ仕様とコンディショニング時の注意点については、scenario-seedance スキルを参照してください。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で進める場合は、ツールのスキーマに従って作業を進め、不足しているスキルがあることを明記してください。
2種類のサウンドトラック
ショット内で作成した音楽はカットごとに別のキーで再開するため、スコアは動画モデルの外部から用意します。それが提供されたマスター音源です。Seedance が生成するのは映像に付随する音です。選択によってすべてのショットの generateAudio が決まるため、生成を始める前に決めてください。
- 曲のみ:すべて
generateAudio: falseにします。MP4 が許す場合、build.py はマスター音源をストリームコピーするため、納品されるサウンドトラックは提供されたファイルとビット単位で同一です。 - 曲にショット独自の音を重ねる:
generateAudio: trueにし、すべてのプロンプトで「diegetic sound only:」の後にシーン自体が出す音(濡れたアスファルトを歩くヒールの音、室内の環境音など)だけを記述し、編集ファイルには"sound": 0.2を指定します。トラックにどれほど合っていても、楽器名やジャンル名は記述しないでください。「音楽なし」のような除外指定も避けてください。楽器を指定するとスコアが生成される可能性があり、ある実行では「遠くのギター」が追加され、出力音声のコンテンツチェックに失敗しました。除外指定でも同じチェックに失敗したことがあります。build.py は各クリップの音声を該当スロットの長さにカットし、指定したゲインでマスター音源の下にミックスします。クリッピングが発生するミックスは拒否します。この場合、納品時に AAC エンコードを1回行うため、ビット単位で同一である保証は失われますが、マスターファイルのハッシュチェックは維持されます。
クイックリファレンス
| ステップ | 呼び出し | 備考 |
|---|---|---|
| 1. 曲 | python3 scripts/song.py master.mp3 -o song.json | ハッシュ、長さ、ラウドネス、テンポ、セクション、カット候補 |
| 2. 歌詞 | 文字起こしには recommend、model_run | 提供された歌詞を優先。歌声の文字起こしは下書きです |
| 3. ストーリー | 1ページでまとめ、まずユーザーに提示 | 誤りが最も低コストで済む段階です。変えてはいけない要素を明記します |
| 4. フレーム | 納品時のアスペクト比に合わせた画像モデル | ルックごとに1枚の参照静止画を用意し、一貫性を保ちます |
| 5. ショット | Seedance の model_run。音声は上記の選択に従います | まず dry_run を実行します。wait=false にし、pending_job_ids を指定して jobs_wait を使います |
| 6. 編集 | python3 scripts/build.py edit.json out.mp4 | ffmpeg の処理1回で、形式を統一し、連結し、マスター音源を重ねて検証します |
作業を始める前に一度だけ確認してください。チームとプロジェクト、トラックの使用許諾、アスペクト比と長さ、曲に音を重ねるかどうか、映してよいもの・いけないもの、予算上限です。回答者がいない場合は曲のみを選び、提示を待たずにストーリーを書き留めてください。その後は中断せずに進めます。
例:1つのヴァース、3つのショット
python3 scripts/song.py master.mp3 -o song.jsonを実行します。セクションはショットの境界、カット候補はカットポイントです。信頼する前に耳で確認してください。- マスターをアップロードします。マルチパートの
upload_assetに続けてupload_asset_completeを実行します(scenarioスキルを参照)。文字起こしモデルをrecommendし(ユーザー自身の言葉で、必要なことをpromptとして指定します)、model_schema_get、model_run、jobs_waitを実行します。文字起こしデータはジョブのアセット ID の中にあるテキストアセットです。hasFullPreviewが true の場合、asset_getはmetadata.previewに全文を返します(執筆時点では Whisper ベースのツールが SRT 形式のタイムコード付きブロックを書き出していました)。それ以外の場合はasset_downloadでファイルを取得します。インストゥルメンタルの場合は、その旨を伝えて先に進みます。 - 1ページにまとめます。何が起こるのか、どこで起こるのか、各セクションを通じてどう展開するのかを記し、最後のイメージに名前を付けます。何かに費用をかける前に、ユーザーに見せてください。
- 画像モデルを使い、納品時のアスペクト比で、ルックごとに1枚ずつ参照用静止画を生成します(
recommend経由)。内容を確認してください。これらが後続の生成におけるアイデンティティとパレットを決めます。複数のショットで同じキャラクターを保つ方法は、scenario-consistencyスキルを参照してください。 - ショットごとに条件付けを決めます。開始時の状態が重要なら、最初のフレームとして
imageを渡します。アイデンティティと世界観だけが重要なら、referenceImagesを渡します(references/shots.md を参照)。トリミング用の余裕を持たせるため、各ショットは割り当てられた尺より1〜2秒長く生成します。ショット内の拍に動作を合わせるには、クリップの開始時点からタイムコードを指定します。拍のマスター上の時刻からショットのatを引き、予定している冒頭のトリムをinとして加えます(予定していないトリムを行うと、すべての拍がずれます)。タイムコード全体を通じて、カメラの動きと場所はそれぞれ1つに保ちます。ムードを表す言葉は残らなくても、タイムコード付きの動作を表す動詞は生成結果に反映されます。 edit.jsonを書き、python3 scripts/build.py edit.json out.mp4を実行します。
{
"master": "master.mp3",
"fps": 24,
"width": 1280,
"height": 720,
"sound": 0.2,
"shots": [
{ "clip": "clips/01.mp4", "at": 0.0 },
{ "clip": "clips/02.mp4", "at": 12.5, "in": 1.0 }
]
}
各ショットは次のショットが始まるまで再生され、最後のショットはマスターの終わりまで続くため、隙間は生じません。また、すべての at は最も近いフレームに合わせられます。in は省略可能な冒頭のトリムです。sound はクリップ自体の音声に対するゲインです。マスタリング済みのトラックの下に重ねる場合は 0.1〜0.3、クリップの音量が小さい場合は最大 1.0 にします(build.py は 0〜4 を受け付けます)。曲だけを使う場合は、この行を削除してください。クリップが短すぎる場合、クリッピングが発生するミックスの場合、または納品する音声がマスターでない場合、ビルドはエラーを明示して失敗します。
よくある間違い
- ショット単体で採点させる:スコアはカットのたびにリセットされます。
- すべてのクリップを聴く前に
soundを有効にする:generateAudioはトラック全体に適用される1つのスイッチです。そのため、音楽が混入したクリップは、言葉で除外するのではなくgenerateAudio: falseに戻します。 - マスターを自分でトリミング、ノーマライズ、フェード、再エンコードする:build.py はそのままコピーするか、ユニティゲインで取り込み、どちらの場合もファイルのハッシュを検証します。
- 指定したアスペクト比を過信する:静止画やクリップは指定値に近い比率で生成されますが、ぴったり一致するとは限りません。build.py は差分をパディングするため、まず納品時の比率にクロップしてください。
- リファレンスモードで開始時の状態をプロンプトに指定する:その状態は表示されません。最初のフレームとして
imageを渡してください。 - コンタクトシートの情報が少ない状態でクリップを判断する:連続したカメラの動きがハードカットのように見えます。まず計測してください(references/shots.md を参照)。
- ビートグリッドを過信する:セクションとカット候補はあくまで提案です。実際に聴こえる音と照らし合わせて確認してください。
- 音声あり、次にミュートで納品物を視聴せずに、作業完了とする。