Install
openclaw skills install @kongzichixiangjiao/mv-sing-opener-skill人物说唱视频制作官。用户给一个想拍的人物/主题 + 一条说唱音频(音频可后补), 本 skill 让图片里的人跟着这条音频开口说唱,产出 9:16 的人物说唱视频; 速度=音频本身的速度(永不提速),成片长度=人声长度;单镜 ≤30 秒,超过就按句间切点自动拆镜。 前置创作链固定四站、四个角色、四份记录: ① 任务解读官(把用户原话拆成任务书,标已知/缺口/默认值)→ ② 创意总监(定母题、选点、结构、视觉、音频方案)→ ③ 钩子官(只写第一句,4 分制打分,锁定主钩)→ ④ 词作者(按方案与钩子写全词+出曲参数)。 不内置任何人物、母题、场景、金句、模板文案:全部按用户本次输入现场规划,推导链写进项目文件。 无音频时:④ 先交付歌词+出曲参数+海绵音乐提示词(30s/12bar、40s/16bar 一段式,主版+备选+逐字歌词); 音频回传后才进 ⑤–⑧;禁止从旧项目/其他目录借用音频,没有音频不得进入 ⑥⑦⑧。 核心口径:口型由参考音频驱动;单镜 ≤30 秒,超过就拆镜、绝不提速;各镜用同一张参考图,切点落在信息段; 画面零可读文字、不影射真人/IP/品牌;只支持图片素材。 公共经验(10 条):概念可行才算成立;代际题材先给边界、不逼原谅;平台硬约束在写词阶段排除; 字秒比按口型打折(40s 140–150 字、每句 6–9 字为主);结构现代失败先行;钩子用「物+关系+落空」不踩血腥线; 40s 按信息段拆 3–4 镜;视觉锚点低于嘴、反复出现;风险换表达不删情绪。 触发词:人物说唱、照片说唱、让照片里的人说唱、图片人物说唱、30秒说唱、40秒说唱、说唱视频、rap视频、 人物rap、开口说唱、说唱开场、mv-sing-opener、说唱短视频、海绵音乐提示词、出曲提示词。
openclaw skills install @kongzichixiangjiao/mv-sing-opener-skill一句话定位:把一个想拍的人物/主题 + 一条说唱音频,变成一条开口就对得上口型的说唱视频—— 人物不换、场景不乱;音频多长成片就多长、速度就是音频的速度;超过 30 秒按句间切点自动拆镜。
本 skill 只做一件事:图片里的人,跟着你给的音频开口(按 30 秒上限自动拆镜)。 不做:整首歌 MV、多镜叙事、镜头切换、自己生成音频、歌曲下载/翻唱、视频素材处理。 要整首多镜 MV →
mv-production(另行提供);要多镜整首对口型 →mv-concert(另行提供); 只要说唱词、不要视频 → 直接用 ④ 的产出;封神人物也可走fengshen-rap-30s(另行提供)。
⓪ 建档(项目管家)
↓ 00-项目状态.md / 00-输入/需求卡.md / 00-过程记录.md
① 解读任务(任务解读官)
↓ 01-解读/01-任务书.md
② 出方案(创意总监)
↓ 02-方案/01-方案.md
③ 写钩子句(钩子官)
↓ 02-方案/02-钩子句.md
④ 写歌词(词作者)
↓ 02-方案/03-歌词.md
⑤ 素材与出曲(素材官)
↓ 04-图片/ref_人物.* / 00-输入/音频/S01.wav…
⑥ 上传外网(上传官 · 硬门)
↓ 03-上传/素材外网路径.json
⑦ 时间轴+提示词(提示词官)
↓ 02-方案/04-时间轴.md / 04-提示词/分镜JSON.json
⑧ 出片+合成(出片官)
↓ 成片片段/SXX.mp4 → 06-MV成片.mp4
⑨ 质检交付(质检官)
↓ 06-质检/检查报告.md / 交付清单.md
四角色边界(不许串岗):
| 角色 | 只回答 | 只写 | 不碰 |
|---|---|---|---|
| 任务解读官 | 到底要做什么、做到什么算完成、还缺什么 | 01-解读/01-任务书.md | 不写方案、不写词 |
| 创意总监 | 唱什么、怎么唱、长什么样 | 02-方案/01-方案.md | 不写钩子、不写全词 |
| 钩子官 | 第一句凭什么让人不划走 | 02-方案/02-钩子句.md | 不写第二句 |
| 词作者 | 每一句为什么必须存在 | 02-方案/03-歌词.md | 不改钩子、不改曲 |
用户明确说「跳过前面,直接出片」时:只能跳 ②③④ 的展示,不能跳落盘—— 先把四份记录补齐(可以标「用户授权按默认执行」),再进 ⑤。没有记录的创作=没有发生。
| 输入 | 必需 | 处理 |
|---|---|---|
| 人物/主题描述 | 是(硬门) | 用户原话逐字记进任务书;没描述就不开工 |
| 说唱音频 | 是(音频门) | 有 → ④ 听写核对;无 → ④ 写词+出曲参数+海绵音乐提示词,停在 ④ 等回传;未回传不得进 ⑥⑦⑧ |
| 人物图片 | 否 | jpg/png/webp;有 → 校验后用;无 → 按方案风格卡生成一张 |
| 时长 | 否 | 默认 30s / 12 句;可选 40s / 16 句;成片按音频实际长度 |
| 画幅 | 否 | 默认 9:16;可选 16:9 / 1:1 / 3:4 / 4:3 |
| 是否要字幕 | 否 | 默认不烧字幕;要就说,⑧ 生成 .srt(可选烧进画面) |
01-解读/01-任务书.md,写明「做什么/给谁看/多长/素材状态/缺口默认值」。任一门没过就停住,如实报错;不要假装已上传,也不要先出片再补链。
| 状态 | ① 任务书要写 | 后续 |
|---|---|---|
| 有音频 | 文件路径、时长、是否 30s 内 | ④ 听写核对(不改词)→ ⑤ 切音频 |
| 无音频 | 「本阶段交付到歌词+出曲参数+海绵音乐提示词」 | ④ 写词+参数+海绵音乐提示词 → 停在 ④;用户出曲回传后才进 ⑤ 切音频;未回传不得进 ⑥⑦⑧ |
不许因为没音频就停摆,也不许假装音频已在手,更不许从旧项目复制音频。
① 四角色前置链固定:① 任务解读 → ② 方案 → ③ 钩子 → ④ 歌词,一站一角色、一站一文件。 不许一个人一口气写完全部内容再补记录;每站完成停下等确认。
② 不内置任何信息:不调用预设人物库、母题库、场景库、金句库、示例文案。 所有内容必须从本项目用户原话推导;每个名词都要能回答「它从哪来」。 推导链写进对应记录文件,不能只在对话里说。
③ 速度=音频本身的速度,长度=人声长度,按 30 秒上限自动拆镜:
atempo 永远不用、不改采样率改速;scripts/cut_audio.py 切(没有变速参数),只做裁区间 + 补齐 + 末段淡出;--end 必须 = 最后一个字的结束时间 + 0.5~0.8s;
⚠️ 拿句子的「开始时间」当结尾,会把最后一个字整段切掉;ceil(人声长度 / 30) 兜底;每镜 seconds ≤ 30、duration = ceil(seconds);
切点必须落在句与句之间(不切词),各镜音频首尾相接;assets/output 旧项目、其他目录、样例里复制音频;没有音频不得进入 ⑥⑦⑧,发现旧音频一律删除并回到 ④。④ 口型由音频驱动:顶层 generate_audio: false,单镜 ref_audio_urls 恰 1 条。
⑤ 必须用用户传的图:图片是唯一人物锚点,不重绘脸、不美化、不换装、不换发型。 只有用户没传图时,才按方案里锁定的风格卡生成一张。
⑥ 正面、嘴部全程可见;镜头要动,但动在节奏上:正面平视或 3-4 侧脸;不遮嘴、不甩头、不转身、不走位。
⑦ 歌词与音频逐字一致:音频定稿后一个字都不许改;每句用双引号包裹,带 [起-止s] 相对时间轴;
不引号=场景描述,模型不会按字对口型。
⑧ 时间轴写整数秒:[0-2s]、[2-5s]…末块 end 必须等于该镜 seconds。
小数时间戳会被静默四舍五入。
⑨ 人物锁定:提示词必须逐项锁住脸型、发型、服装、配饰、背景关系;refs_urls 是人物参考图绝对直链,
提示词里用 @图片1 指代。
⑩ 说不是念:提示词必须显式写「说唱 / Rap / 有 beat 有 flow」,并给 BPM、鼓组、flow 类型; 不要写成「朗读 / 念白 / 朗诵」。
⑪ 必须有律动,且不能只有人物在动:提示词 ④ 段必须写五层——镜头(卡拍)/ 人物律动 / 手部 / 饰品(本人物符号持续动、发丝动)/ 环境(本场景元素流动、光屑飘);再挑 3–5 个与歌词对应的秒点做「画面事件」, 其余保持轻动态。底线:不甩头、不转身、不走位;饰品与环境动效不进入面部区域。
⑫ 零可读文字:画面不出现文字、数字、字母、logo、水印、二维码;歌词只作可选后期字幕。
⑬ 合规:不影射在世真人/明星/IP/品牌;真人图片需本人/授权/AI 生成;未成年人默认健康表达; 交付提示加 AI 生成标识。
⑭ 成本纪律:先 --dry-run 看请求体,再出 1 条;不连出、不批量抽卡。
⑮ 确认门:① 任务书、② 方案、③ 钩子+主题,每站都要把摘要展示给用户; ③ 结束给一张四合一确认卡(任务解读+方案+钩子+主题;开头一句「以下方案是否适合现代社会年轻人?给出优化修改建议。」),用户一次确认后才进 ④; 未确认前,④ 不得定稿;已写歌词只算草稿,不得进 ⑤; 用户没说「确认/可以/生成」之前,不调付费出片。 也允许逐站确认:① 停一次、② 停一次、③ 停一次。
详细展开见
references/08-公共经验.md。与其它文件冲突时,以这 10 条为准。
| # | 口径 | 落地动作 |
|---|---|---|
| 1 | 概念成立 ≠ 表达成立 | 先判目标人群/文案/时长/画面/平台,再把文学母题翻成目标人群口语;不做父辈独白 |
| 2 | 代际题材先定边界 | 不替沉默父亲解释,让他承认「不会说」;不逼年轻人原谅,给「可以不原谅」的出口 |
| 3 | 平台硬约束前置 | 零文字下,聊天记录/朋友圈/字幕/弹幕一律改成声音、震动、反光、手势、剪影、口播 |
| 4 | 字秒比按口型打折 | 40s 优先 140–150 字、每句 6–9 字为主;主歌一辙,Bridge 换辙;不用纯文案字数判断 |
| 5 | 结构先让目标人群听进去 | 现代失败 → 神话关系 → 边界出口;不要一上来全是父辈苦衷 |
| 6 | 钩子狠但不踩线 | 用「物 + 关系 + 落空」;血腥/剔骨/还骨头慎用,口播抽象成「还清/还命」,画面不血腥 |
| 7 | 单镜按信息段拆 | 40s 拆 3–4 镜,每镜 8–12s;主镜微侧、中景、塔低于嘴 |
| 8 | 视觉母题一个锚点反复出现 | 风格词落到可反复拍的具体物件;塔在腰前掌心或胸腹侧,低于嘴 |
| 9 | 风险控制换表达不删情绪 | 保留复杂情绪,把审判性画面换成承认性口播;不拍剔骨、不说教、不烧字幕 |
| 10 | 可复用检查清单 | 十项见 references/08 §10;一项不过就停在当前站改 |
概念可行性五问(② 方案前必答):
五问有一问答不上,回 ① 重写任务书,不许直接出方案。
| 站 | 角色 | 做什么 | 记录文件(交接物) |
|---|---|---|---|
| ⓪ 建档 | 项目管家 | new_project.py 建目录 + 状态 + 需求卡 + 过程记录 + 登记 | 00-项目状态.md、00-输入/需求卡.md、00-过程记录.md |
| ① 解读任务 | 任务解读官 | 原话归档 → 5W2H → 素材状态 → 缺口+默认值 → 任务书;展示摘要,停下等确认 | 01-解读/01-任务书.md |
| ② 出方案 | 创意总监 | 事实清单 → 母题 → 只选一件事 → 三个当代场景 → 结构/视觉/音频方案;展示摘要,停下等确认 | 02-方案/01-方案.md |
| ③ 写钩子句 | 钩子官 | 找原数字 → 落生活成本 → 3–5 候选 → 4 分制 → 锁定主钩+备选+主题一句话;停下等用户确认 | 02-方案/02-钩子句.md |
| ④ 写歌词 | 词作者 | 按钩子与结构写全词 → 逐句功能表 → 七问自检 → 出曲参数 → 海绵音乐提示词(无音频时必出) | 02-方案/03-歌词.md、02-方案/05-海绵音乐提示词.md |
| ⑤ 素材与出曲 | 素材官 | 有图校验/无图生成;有音频只切不改速;无音频只交付提示词,不切音频 | 04-图片/ref_人物.*、00-输入/音频/S01.wav… |
| ⑥ 上传外网 | 上传官 | upload_project.py --verify --with-line-audio;图与音频 HEAD 200 | 03-上传/素材外网路径.json |
| ⑦ 时间轴+提示词 | 提示词官 | ASR 对齐 → 整数秒 → 六段式提示词 + 分镜JSON | 02-方案/04-时间轴.md、04-提示词/分镜JSON.json |
| ⑧ 出片合成 | 出片官 | --dry-run → 逐镜出片 → --merge → assemble.py | 成片片段/SXX.mp4、06-MV成片.mp4 |
| ⑨ 质检交付 | 质检官 | qa.py --require-clip --verify-links;人工看口型/画面/合规 | 06-质检/检查报告.md、交付清单.md |
用户说「继续/下一步」只推进一站;「全过」连跑到 ⑤;「暂停」存进度。 每站结束必须调用
log_step.py写过程记录,否则视为未完成。
每次输入=一个项目;进度全部落盘,换会话也不丢。
assets/output/项目登记.md
→ 读项目 00-项目状态.md 与 00-过程记录.md → 从当前步骤只推进一站 → 停下等确认。项目列表、暂停。assets/output/项目登记.md)| 项目ID | 项目名 | 时长 | 当前步骤 | 状态 | 输出目录 |
|---|---|---|---|---|---|
| MV01 | <短名> | 30s/40s/按音频 | ③ 钩子句 | ⏸待确认 | assets/output/MV01-<短名>/ |
MV01、MV02…;目录名=MVxx-<短名>(英文/拼音/中文均可,无空格)。00-项目状态.md)【项目】MV01-<短名> — 人物说唱视频(9:16 · 按音频拆镜)
【输入】人物/主题:<一句话>
【输入】人物图:有 / 无
【输入】说唱音频:有(路径)/ 无(待出曲)
【目标】成片=音频原速长度;口型由参考音频驱动
【当前步骤】③ 钩子句(等待用户确认)
【已完成】⓪ 建档 ✅ ① 任务 ✅ ② 方案 ✅
【待执行】④ 歌词 → ⑤ 素材/出曲 → ⑥ 上传 → ⑦ 提示词 → ⑧ 出片 → ⑨ 质检
【最近更新】YYYY-MM-DD HH:MM
【用户最近意见】-
00-过程记录.md · 强制)每一站一行块,由 scripts/log_step.py 追加(不要手写,避免漏字段):
python3 scripts/log_step.py assets/output/MV01-xxx \
--station "①" --role "任务解读官" \
--output "01-解读/01-任务书.md" \
--decision "用户授权按默认值执行;时长 30s;无音频,先写词" \
--pending "母题待确认 / 人物图待补"
落盘格式:
## ① 解读任务 · 2026-11-06 14:30
- 角色:任务解读官
- 输入:<用户原话摘要 / 附件>
- 产出:01-解读/01-任务书.md
- 关键决策:<…>
- 待确认:<…>
- 下一步:② 出方案
没有过程记录 = 这一站没做。换会话继续时,先读
00-过程记录.md最后一块。
📤 已落盘:<记录文件路径>
✅ 步骤 <X> <站名> 完成
📁 <项目名>(assets/output/<项目名>/)
🔎 本站结论:<一句话>
⏭ 下一步:<Y> <下一站>
回复「确认/继续」推进;要改就说「改<站名>:…」;「暂停」存进度。
没有收到确认之前,绝不调用付费出片接口。
python3 scripts/new_project.py --slug <短名> --duration 30
python3 scripts/new_project.py --slug <短名> --duration 40 --image ~/Desktop/me.jpg
--duration 只是目标档位(30/40),成片长度永远=音频实际长度;00-输入/素材/<原文件名>,复制一份到 04-图片/ref_人物.<ext>;.jpg/.jpeg/.png/.webp),JSON 里不要硬写 .png;01-解读/、02-方案/、03-上传/、04-图片/、04-提示词/、成片片段/、06-质检/,
并写 00-项目状态.md、00-输入/需求卡.md、00-过程记录.md,更新项目登记。详细规则见 references/01-任务解读与方案.md 第一部分。最小动作:
01-解读/01-任务书.md(不许总结掉限定词);log_step.py 记一条,停下等确认。任务门判据:任务书里没有「一句话任务」或没有「素材状态」→ 不合格,重写。
任务门判据:任务书里没有「一句话任务」或没有「素材状态」→ 不合格,重写。
详细规则见 references/01-任务解读与方案.md 第二部分。最小动作:
这个人在 <处境> 里,用 <动作>,换了 <代价>;再用目标人群的口语说一遍;log_step.py 记一条,停下等确认。方案自检:概念五问答得上吗?删掉人物名还成立吗?现代场景在前吗?有「不逼原谅」出口吗?唯一符号挡不挡嘴?
详细规则见 references/02-钩子句.md。最小动作:
02-方案/02-钩子句.md(含打分表、主题、定稿理由、确认状态),log_step.py 记一条;钩子与主题锁定后,词作者不得改写第一句,也不许跑题。
详细规则见 references/03-歌词写作.md。最小动作:
references/08 §10);02-方案/05-海绵音乐提示词.md(主版+备选+逐字歌词,写法见 references/09-海绵音乐提示词.md);log_step.py 记一条。有音频时:④ 不写词,改为「听写核对」——以音频为准,逐字记录,标出与词稿差异; 然后直接进 ⑤ 切音频。
无音频时:④ 交付到「歌词+出曲参数+海绵音乐提示词」就停;用户出曲回传后才进 ⑤, 未回传不得进 ⑥⑦⑧。不许拿旧项目的音频顶上。
见 references/05-素材与上传.md。两条线:
文生图提示词.json,先 --dry-run,再 --yes 出一张;
出图后 04-图片/ref_人物.png 是唯一人物锚点。start、每句 start、末字 end;用 cut_audio.py 只切不改速:
python3 scripts/cut_audio.py "00-输入/音频/原声.wav" \
--start <首字start> --end <末字end + 0.6> -o "00-输入/音频"
# 超 30 秒:加句间切点
python3 scripts/cut_audio.py "00-输入/音频/原声.wav" \
--start 0.72 --end 31.12 --split-at 15.54 -o "00-输入/音频"
02-方案/05-海绵音乐提示词.md(主版+备选+逐字歌词)交给用户;到此为止——不切音频、不传图、不做时间轴/提示词/出片。用户回传音频后才按上面流程切。
本 skill 不生成音频,不要假装已经出曲;禁止从旧项目或其他目录复制音频。音频门判据:S01.wav 存在、末字完整、末段有淡出、不是纯伴奏、速度未改。
# ⑥ 先上传(图 + 音频)——必须带 --with-line-audio,否则只传图
# 此时 JSON 还没写?先写一个「占位 JSON」(只含 refs_urls + ref_audio_urls),再上传
python3 scripts/upload_project.py assets/output/MV01-xxx --verify --with-line-audio
# ⑦ 写完 04-提示词/分镜JSON.json 后,用已保存的清单回填直链,不重传
python3 scripts/upload_project.py assets/output/MV01-xxx --fill-only
python3 scripts/upload_project.py assets/output/MV01-xxx --verify-json
MV01-xxx);https://your-static-host.example.com/public/mv/MV01-xxx/04-图片/ref_人物.png、
…/MV01-xxx/00-输入/音频/S01.wav;/var/www/public/mv 时如实报错,不静默降级。⚠️ 用
material-uploader时注意:overwrite_dir:true会先整目录删除再写。 只传音频子目录会把远端的04-图片/一起删掉。要么整项目一起传,要么加--no-overwrite-dir。
02-方案/04-时间轴.md)0 起;整数秒;首尾相接、不重叠、不跳段;end = 该镜 seconds;w.start 吸附到整数秒;text: ""),但保留;详细规则见 references/04-时间轴与字幕.md。
① 一句话摘要
让参考图中的同一位人物,在<场景>中以半身近景正面面对镜头,跟着参考音频开口说唱(Rap),
一镜到底 <该镜 seconds> 秒;<情绪>;<曲风/BPM>。
② 人物与参考图锁定
以 @图片1(<完整直链>)为唯一人物与造型锚点:同一张脸、同一发型、同一服装、同一配饰、
同一背景关系;<逐项可观察特征>;人物始终位于画面中央偏上,面部受光均匀,
嘴部完整可见、自然开合,全程不遮挡嘴部;不重绘脸、不美化、不换装。
③ 时间轴说唱(相对秒,整数,末块收到该镜 seconds)
[0-2s] 人物看向镜头,吸气、点头找拍,准备开口(不唱);
[2-5s] 开口说唱:"<第一句>",精准唇形同步音频,每个字都有开合、不吞字;
[5-8s] 继续说唱:"<第二句>",精准唇形同步;
…
[28-30s] 最后一句收尾:"<末句>",尾音落下,看镜头收住。
④ 镜头与表演(镜头卡拍 + 人物律动 + 饰品飘动 + 环境流动,画面不能死)
镜头(跟着节奏走):开场 0–3s 从全景/全身快速推到半身,之后锁在半身;
之后每 2 拍一次极轻推开与回拉(幅度 <2%),重拍处顿一下;不甩镜、不横摇、不变焦跳动。
人物律动:每拍肩线轻微下沉;每 4 拍一个动作单元(点头→耸肩→抬手比划→收手回胸前)。
手部:胸前到小腹之间做说唱手势,不高于下巴、不经过面部、不遮嘴。
面部:重音句挑眉、眼神钉住镜头,句尾吐气收住;不面瘫。
饰品:<本人物符号>持续动、有褶皱/摆荡/反光;发丝摆动。
环境:<本场景环境>缓慢流动、轻摇、飘落、侧光缓慢明暗推移。
画面事件(只挑 3–5 个与歌词对应的秒点,其余轻动态):
· <秒点>:<与歌词对应的动作>
边界:不甩头、不转身、不走位、不换景、不换装、不切镜;饰品与环境动效不进入面部区域。
⑤ 声音设计
本镜不生成人声与配乐;口型、咬字、flow 只严格匹配参考音频 @音频1 的人声;
画面节奏跟随该音频的 BPM 与鼓点;成片音轨使用该参考音频本身。
⑥ 画风与强制约束
<风格锁定句>;画面零可读文字、无字幕、无 logo、无水印、无二维码;不出现第二个人;
不出现乐器遮挡面部;不出现畸形手指/五官扭曲/换脸感;不出现画面闪烁/跳帧。
负面:糊嘴、双嘴、吞字、连读含糊、口型滞后、闭嘴不动、唱成旋律腔、念白朗读、
手挡嘴、侧脸背对、大幅转头、换脸、五官变形、镜头晃动
音频:不额外生成人声与背景音乐;口型与咬字只匹配参考音频 @音频1
④ 段里的「饰品」「环境」必须换成本项目方案的具体符号与场景,不许留占位符。
04-提示词/分镜JSON.json){
"project": "MV01-<短名>",
"ratio": "9:16",
"generate_audio": false,
"shots": [
{
"id": "S01",
"prompt": "<六段式全文 · 第 1–6 句>",
"refs_urls": ["04-图片/ref_人物.png"],
"ref_audio_urls": ["00-输入/音频/S01.wav"],
"seconds": 16.70,
"duration": 17,
"mode": "reference",
"resolution": "720p",
"lyrics": [
{"start": 0, "end": 3, "text": "<第一句>"},
{"start": 3, "end": 6, "text": "<第二句>"}
]
}
]
}
| 字段 | 规则 |
|---|---|
shots | 1–4 条;30s 可 1–2 镜;40s 按信息段拆 3–4 镜,每镜 8–12s |
seconds | 该镜成片长度(≤30,可小数) |
duration | 整数 = ceil(seconds) |
ref_audio_urls | 每镜恰 1 条,上传后回填直链 |
refs_urls | 每镜都写;多镜时用同一张图 |
lyrics | 挂在 shot 上,相对该镜起点;assemble.py 自动累加偏移 |
generate_audio | 顶层 false |
python3 scripts/upload_project.py assets/output/MV01-xxx --fill-only
python3 scripts/upload_project.py assets/output/MV01-xxx --verify-json
python3 scripts/qa.py assets/output/MV01-xxx
错误清零再进 ⑧。
P=assets/output/MV01-xxx
# 1) 干跑:只看请求体(每镜都应有 audio_url)
python3 scripts/generate_video.py "$P/04-提示词/分镜JSON.json" --dry-run
# 2) 逐镜出片(自动裁到每镜 seconds)→ 成片片段/S01.mp4、S02.mp4
python3 scripts/generate_video.py "$P/04-提示词/分镜JSON.json"
# 3) 多镜时合并成无音轨成片(单镜可跳过)
python3 scripts/generate_video.py "$P/04-提示词/分镜JSON.json" --merge
# 4) 贴回音轨 + 精确裁秒 + 字幕 → 06-MV成片.mp4
python3 scripts/assemble.py "$P"
python3 scripts/assemble.py "$P" --subtitle
python3 scripts/assemble.py "$P" --subtitle --burn
成片片段/SXX.mp4;合并:06-MV成片_无音轨.mp4;合成落点:06-MV成片.mp4;1 镜实测门:30 秒密字说唱是这套模型最难的一档,若糊嘴/对不上, 按顺序最多调 2 次:① 时间轴切更碎(1–3 秒一块);② 提示词加强「逐字开合、不吞字、不连读」。 仍不行 → 停止批量,如实告诉用户,给三条路:① 换更清晰正面图;② 换慢一点的成曲(BPM 85–90); ③ 改走
mv-concert(另行提供)。不要假装已对上口型。
| 现象 | 处理 |
|---|---|
| 完全不动嘴 | 查 ref_audio_urls 是否 1 条、generate_audio 是否 false、audio_url 块是否存在 |
| 嘴动但整体早/晚 | 时间轴起点没对齐音频首句;把第一块起点挪到真实首声 |
| 节奏对、字不对 | 歌词没引号 / 一块塞太多字;补引号、拆 1–3 秒小段 |
| 后半段越来越飘 | 末块没收到该镜 seconds;原速重切、末块对齐 |
| 糊嘴/双嘴 | 重出同一条;负面加「糊嘴、双嘴、连读」 |
| 人物不像 / 换脸感 | ② 逐项锁死;确认用的是用户传的图;降低推近幅度 |
| 唱成旋律腔 | ⑥ 写「说唱,不是唱旋律、不是念白」;负面加「旋律唱腔」 |
| 画面出现文字/logo | ⑥ 加「零可读文字、无 logo」;重出 |
| 上传 404 | 命名空间=项目文件夹名;图与音频都重跑 --verify --fill-json |
python3 scripts/qa.py assets/output/MV01-xxx --require-clip --verify-links
必须全过:
shots 1–4 条;30s 1–2 镜、40s 3–4 镜;每镜 seconds ≤ 30、duration = ceil(seconds)generate_audio: false;每镜 ref_audio_urls 恰 1 条seconds;中间断点为整数;每句歌词都在 prompt 里且带引号refs_urls 与 ref_audio_urls 全是绝对直链,HEAD 200成片片段/SXX.mp4 逐镜存在且时长 ≈ 该镜 seconds06-MV成片.mp4 存在;时长 ≈ Σ seconds(±0.35s);有音轨02-方案/04-时间轴.md、04-提示词/、成片片段/、06-MV成片.mp4;如存在,说明用了旧音频,返工00-过程记录.md 有对应记录06-质检/交付清单.md 已写06-质检/交付清单.md 固定写:项目名、时长、画幅、音频来源与时长、参考图直链、成片路径、
走的档位(是否字幕)、四个创作角色与对应记录文件、已知瑕疵(含 lip_sync 是否达标)、AI 生成标识提示。
assets/output/MV01-xxx/
├── 00-项目状态.md
├── 00-过程记录.md # ★ 每站一块:角色/输入/产出/决策/待确认
├── 00-输入/
│ ├── 需求卡.md
│ ├── 素材/<用户原文件名> # 原图归档(有图时)
│ └── 音频/
│ ├── S01.wav # ★ 第 1 镜音频(≤30s)
│ ├── S02.wav # ★ 第 2 镜音频(多镜时)
│ └── 原声-原始.wav # 原始整轨(留档)
├── 01-解读/
│ └── 01-任务书.md # ★ ① 任务解读官
├── 02-方案/
│ ├── 01-方案.md # ★ ② 创意总监
│ ├── 02-钩子句.md # ★ ③ 钩子官
│ ├── 03-歌词.md # ★ ④ 词作者(含出曲参数)
│ ├── 05-海绵音乐提示词.md # ★ ④ 无音频时必出(主版+备选+逐字歌词)
│ └── 04-时间轴.md # ⑦ 提示词官
├── 03-上传/
│ └── 素材外网路径.json
├── 04-图片/
│ └── ref_人物.png # 出片唯一人物锚点
├── 04-提示词/
│ ├── 分镜JSON.json # ★ 出片唯一输入(shots[] 1–4 条)
│ └── 提示词-S01.md …
├── 成片片段/
│ └── S01.mp4 …
├── 06-MV成片_无音轨.mp4
├── 06-MV成片.mp4 # ★ 交付成片
├── 06-歌词字幕.srt # 可选
├── 06-成片音轨.wav
└── 06-质检/
├── 检查报告.md
└── 交付清单.md
references/01-任务解读与方案.md —— ★ ① 任务解读官 + ② 创意总监:原话归档、5W2H、缺口与默认值、任务书模板;概念可行性、平台硬约束、事实清单、母题、选点、三场景、边界出口、人物卡、辨识符号、口型可做性、方案模板references/02-钩子句.md —— ★ ③ 钩子官:原数字、生活落点、自嘲式损失、物+关系+落空、风险线、4 分制、候选与定稿references/03-歌词写作.md —— ★ ④ 词作者:现代先行的结构、押韵、字秒打折、逐句功能、七问+三问、六刀、边界出口、出曲参数references/09-海绵音乐提示词.md —— ★ ④ 无音频时必出:一段式模板、30s/12bar、40s/16bar、人物风格库、反例、音频门references/04-时间轴与字幕.md —— ⑦ 整数秒、ASR 对齐、时间轴模板、字幕核对references/05-素材与上传.md —— ⑤⑥ 图片校验、音频只切不改速、上传与直链核验references/06-提示词与出片.md —— ⑦⑧ 六段式模板、JSON 契约、dry-run/出片/重出references/07-排障与质检.md —— ⑧⑨ 故障表、QA 清单(含公共经验十项)、交付口径、诚实降级references/08-公共经验.md —— ★ 10 条硬口径:概念可行性、代际边界、平台约束、字秒打折、结构顺序、钩子风险、信息段拆镜、视觉锚点、换表达、检查清单references/风格-重彩水墨轻鎏金.md —— 默认风格卡(固定节逐字照抄)references/合规红线.md —— 真人授权、IP/品牌、未成年人、AI 标识references/画面动态与感染力.md —— 通用:三层动态 / 画面事件 3–5 个 / 道具互动三档 / 负面四组references/对口型经验总结.md —— 口型三要素(参考音频 / 参考图 / 时间轴)与实测复盘cd mv-sing-opener-skill
pip install -r requirements.txt
# 准备:所有 key / 本地地址放 .env,不要把 .env 提交到仓库
cp env.example .env
# 0) 建档(有图带 --image;无图先空着)
python3 scripts/new_project.py --slug <短名> --duration 30
# 1) ① 解读任务 → 写 01-解读/01-任务书.md → 记过程
python3 scripts/log_step.py assets/output/MV01-<短名> \
--station "①" --role "任务解读官" --output "01-解读/01-任务书.md" \
--decision "<…>" --pending "<…>"
# 2) ② 出方案 → 02-方案/01-方案.md
# 3) ③ 写钩子 → 02-方案/02-钩子句.md
# 4) ④ 写歌词 → 03-歌词.md;无音频时再出 05-海绵音乐提示词.md,然后停在这里等回传
# 5) ⑤ 素材:只有「用户已回传音频」才切;无音频停在 ④,按 05-海绵音乐提示词出曲
python3 scripts/cut_audio.py "00-输入/音频/原声.wav" \
--start <首字start> --end <末字end+0.6> -o "00-输入/音频"
# 以下 6–9 仅在音频已经回传、音频门通过后执行
# 6) ⑥ 上传(硬门)
python3 scripts/upload_project.py assets/output/MV01-<短名> --verify --with-line-audio
# 7) ⑦ 时间轴 + 六段式 + 分镜JSON → 回填 + 质检
python3 scripts/upload_project.py assets/output/MV01-<短名> --fill-only
python3 scripts/upload_project.py assets/output/MV01-<短名> --verify-json
python3 scripts/qa.py assets/output/MV01-<短名>
# 8) ⑧ 出片 → 合并(2 镜)→ 贴音轨
python3 scripts/generate_video.py assets/output/MV01-<短名>/04-提示词/分镜JSON.json --dry-run
python3 scripts/generate_video.py assets/output/MV01-<短名>/04-提示词/分镜JSON.json
python3 scripts/generate_video.py assets/output/MV01-<短名>/04-提示词/分镜JSON.json --merge
python3 scripts/assemble.py assets/output/MV01-<短名> --subtitle
# 9) ⑨ 质检
python3 scripts/qa.py assets/output/MV01-<短名> --require-clip --verify-links