关于 scenario-seedance-music-video
scenario-seedance-music-video 用于基于指定母带、歌词、故事、画面和生成镜头制作音乐视频。脚本分析歌曲并组装剪辑,同时校验母带未被更改。
主要功能
- 01分析歌曲结构与剪辑候选点
- 02规划歌词、故事和参考帧
- 03使用 Seedance 生成镜头
- 04通过 ffmpeg 组装并匹配片段
- 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详细介绍
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 处理:统一规格、拼接、铺上母带、验证 |
开始前只询问一次:团队和项目、曲目授权、画幅比例和时长、歌曲下是否叠加声音、必须出现和不得出现的内容、预算上限。若无人回答,就选择只有歌曲,并直接写下故事,而不是等待展示。然后不中断地继续操作。
实例:一段主歌,三个镜头
python3 scripts/song.py master.mp3 -o song.json。段落是镜头边界,切点是候选剪辑点;请先试听,再决定是否采用。- 上传母带:使用 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获取文件。如果是纯伴奏,就说明这一点,然后继续。 - 写一页内容:讲清楚发生了什么、地点在哪里,以及情节如何随着各段落推进;并点明结尾画面。先给用户看,再花费任何资源。
- 使用图像模型(通过
recommend)按交付宽高比为每种视觉风格生成一张参考静帧。查看这些图:它们将决定后续内容的角色身份和调色板。要让同一角色贯穿多个镜头,请参见scenario-consistency技能。 - 对每个镜头,决定如何进行条件控制:如果开场状态很重要,就传入首帧
image;如果只需确定角色身份和世界设定,就传入referenceImages(参见 references/shots.md)。每个镜头的生成时长要比对应时段多一到两秒,以便留出剪辑余量。若要让某个动作在镜头内的某个节拍上发生,请从片段起点开始计算时间码:该节拍在母带中的时间减去镜头的at,再加上计划的片头裁剪量in(未计划的裁剪会使每个节拍都发生偏移)。在这些时间码内保持同一运镜和地点;与情绪词不同,带时间码的动词在生成时更能保留下来。 - 编写
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)。
- 轻信节拍网格:段落和切点都只是建议,请根据听到的内容进行检查。
- 不带声音看过交付成品就认定完成;之后还要静音观看。