mcpField
S
scenario-seedance-music-video

scenario-seedance-music-video

github.com/scenario-labs创意与媒体1.2k415 次安装1 天前更新
代码仓库

关于 scenario-seedance-music-video

scenario-seedance-music-video 用于基于指定母带、歌词、故事、画面和生成镜头制作音乐视频。脚本分析歌曲并组装剪辑,同时校验母带未被更改。

主要功能

  1. 01分析歌曲结构与剪辑候选点
  2. 02规划歌词、故事和参考帧
  3. 03使用 Seedance 生成镜头
  4. 04通过 ffmpeg 组装并匹配片段
  5. 05通过哈希校验母带

适用场景

  1. 01围绕指定曲目制作音乐视频
  2. 02按歌曲段落安排镜头切换
  3. 03将生成场景音混入母带之下
  4. 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.md
scripts/
build.py
song.py

详细介绍

Scenario Seedance 音乐视频

概述

分五步:歌曲、歌词、故事、画面、视频。提供的母带是唯一配乐,不会为任何镜头另写配乐。scripts/build.py 会在最后一次性将母带铺到剪辑上,并通过哈希验证文件未被改动。scripts/song.py 会读取母带,使剪辑落在歌曲结构上。脚本需要 PATH 中有 ffmpeg 和 ffprobe,并且 song.py 需要 numpy。

关于连接和核心生成循环,请参阅此仓库中的 scenario 技能。关于 Seedance 参数约定和条件设置陷阱,请参阅 scenario-seedance 技能。如果你可用的技能中缺少此处提及的同级技能,请让用户安装(npx skills add scenario-labs/skills --skill <name>);若无人值守,请根据工具架构继续操作,并标明这一缺口。

两种音轨

在镜头内创作的音乐会在每次剪辑时以新调重新开始,因此配乐来自视频模型之外:提供的母带。Seedance 生成的是附着在画面上的声音。此选择会设置每个镜头的 generateAudio,所以请在生成前确定:

  • 只有歌曲:所有地方都设为 generateAudio: false。只要 MP4 支持,build.py 就会对母带进行流复制,因此交付的音轨与提供的文件逐位相同。
  • 歌曲叠加镜头自身的声音:设为 generateAudio: true,每条提示词都要在 "diegetic sound only:" 后写明场景本身发出的声音(湿漉漉的沥青上高跟鞋的声音、房间底噪),除此之外不写其他内容,并在剪辑文件中设置 "sound": 0.2。不要提及任何乐器或曲风,不管它们与曲目多么契合;也不要添加 "no music" 之类的排除描述:提到乐器会引入配乐,有一次运行因输出音频内容检查发现额外添加了 "distant guitar" 而失败,排除描述也未能通过该检查。build.py 会将每个片段的音频剪裁到其对应时段,以指定增益混入母带,并拒绝会导致削波的混音。交付文件随后会经过一次 AAC 编码,以声音效果换取逐位相同的保证;母带文件仍会接受哈希校验。

快速参考

步骤调用说明
1. 歌曲python3 scripts/song.py master.mp3 -o song.json哈希、时长、响度、节奏、段落、剪辑候选点
2. 歌词用于转录的 recommend,以及 model_run优先使用提供的歌词;演唱人声转录仅为草稿
3. 故事一页,先展示给用户犯错成本最低的环节;写明哪些内容不能偏离
4. 画面使用与交付画幅比例一致的图像模型参考静帧,每种造型一张,用于保持一致
5. 镜头Seedance model_run,音频按上述选择处理先运行 dry_run;设置 wait=false;使用 pending_job_ids 调用 jobs_wait
6. 剪辑python3 scripts/build.py edit.json out.mp4一次 ffmpeg 处理:统一规格、拼接、铺上母带、验证

开始前只询问一次:团队和项目、曲目授权、画幅比例和时长、歌曲下是否叠加声音、必须出现和不得出现的内容、预算上限。若无人回答,就选择只有歌曲,并直接写下故事,而不是等待展示。然后不中断地继续操作。

实例:一段主歌,三个镜头

  1. python3 scripts/song.py master.mp3 -o song.json。段落是镜头边界,切点是候选剪辑点;请先试听,再决定是否采用。
  2. 上传母带:使用 multipart 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 获取文件。如果是纯伴奏,就说明这一点,然后继续。
  3. 写一页内容:讲清楚发生了什么、地点在哪里,以及情节如何随着各段落推进;并点明结尾画面。先给用户看,再花费任何资源。
  4. 使用图像模型(通过 recommend)按交付宽高比为每种视觉风格生成一张参考静帧。查看这些图:它们将决定后续内容的角色身份和调色板。要让同一角色贯穿多个镜头,请参见 scenario-consistency 技能。
  5. 对每个镜头,决定如何进行条件控制:如果开场状态很重要,就传入首帧 image;如果只需确定角色身份和世界设定,就传入 referenceImages(参见 references/shots.md)。每个镜头的生成时长要比对应时段多一到两秒,以便留出剪辑余量。若要让某个动作在镜头内的某个节拍上发生,请从片段起点开始计算时间码:该节拍在母带中的时间减去镜头的 at,再加上计划的片头裁剪量 in(未计划的裁剪会使每个节拍都发生偏移)。在这些时间码内保持同一运镜和地点;与情绪词不同,带时间码的动词在生成时更能保留下来。
  6. 编写 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 是针对整条音轨的一个开关,因此,如果某个片段漏出了音乐,应将其设为 generateAudio: false,而不是在提示词中添加排除内容。
  • 自行裁剪、标准化、淡入淡出或重新编码母带:build.py 会复制母带或以原始音量使用它,并会在两种情况下都校验文件哈希。
  • 轻信指定的宽高比:静帧和片段生成的宽高比会接近指定值,但不会完全一致;build.py 会补齐差异。请先裁剪到交付宽高比。
  • 在参考模式下提示开场状态:它不会出现;请传入首帧 image。
  • 根据稀疏的联系表判断片段:连续运镜看起来会像硬切;先测量(参见 references/shots.md)。
  • 轻信节拍网格:段落和切点都只是建议,请根据听到的内容进行检查。
  • 不带声音看过交付成品就认定完成;之后还要静音观看。

评论

支持 Markdown