---
name: 数字人唱歌与口播视频生成
description: 基于 minimax-h3 的数字人口播、带货讲解、唱歌/翻唱、对镜播报视频生成技能。当用户要求让某个人物（文字描述、参考图、本地视频或网络视频链接中的人物）"念文案/口播/播报/讲解/说话/唱歌/演唱/对口型/跟唱"，或要求用指定音色模仿播报、对网络爆款视频做二创翻拍、对已有数字人视频做续作扩展时使用。支持文字、图片、音频、视频链接及其任意组合输入，自动判定参考图角色（主体人/场景/道具）与参考音频模式（内容驱动/音色克隆），自动完成长内容切分、尾帧连贯、多段拼接与音轨对齐，输出嘴型同步、人物一致的成片。
metadata:
    tools: [generateVideo, videoEditor, hearing, videoDownloader]
---

# 数字人唱歌与口播视频生成

## 0. 工具角色与能力边界

| 工具 | 在本技能中的职责 |
|---|---|
| generateVideo | **唯一的视频/声音生成入口**。文生视频、图生视频、参考音频驱动口型/音色、直接生成口播语音，一次完成；返回成片路径与**视频尾帧** |
| hearing | 识别音频的文本内容、逐句时间戳、总时长、发音人，用于切分、模式判定 |
| videoDownloader | 仅用于下载网络 URL（YouTube/TikTok 等 20+ 平台）的视频或音频；本地文件不需要它 |
| videoEditor | FFmpeg 透传：抽音轨、切片段、抽帧、多段拼接、替换/混合音轨、统一规格 |

**关键事实（必须内化，禁止违背）：**
1. generateVideo 的 7 个参数 `savePath/prompt/model/ratio/duration/referenceImages/referenceAudios` **全部必传**，没有参考图/音频时传空数组 `[]`；`model` 固定写 `'minimax-h3'`。
2. 单次 `duration` 为整数，**4–15 秒**，默认 10；`referenceAudios` 最多 3 条且**合计时长 ≤15 秒**；`referenceImages` 最多 9 张；`ratio` 仅 `'9:16'`（默认竖屏）/`'16:9'`。
3. generateVideo **自带口播语音生成**：把要念的文案写进 prompt 即可，本技能链路中**不存在 TTS 工具，禁止寻找或调用 cosyvoiceTTS**。
4. 本技能链路中**不存在 uvr5 / synthesisMusic / generateHuman**：不做人声分离、不做独立翻唱合成、不做旧版音频驱动口型；唱歌改为"原曲/纯人声片段直接进 referenceAudios 驱动跟唱"。
5. generateVideo 返回的**尾帧是多段连贯的唯一可靠锚点**：第 N+1 段必须把第 N 段尾帧放入 referenceImages，续作 prompt 只描述"接下来发生的新动作"。

---

## 1. 输入识别与路由（开工第一步）

### 1.1 清点输入模态并解析四要素

从全部输入中拆出四类要素，缺一不可地列出：
- **人物**：谁出镜（文字外貌描述 / 哪张图 / 哪个视频里的人）
- **场景**：在哪（文字 / 图 / 视频背景）
- **道具**：手持或桌面商品等（文字 / 哪张图）
- **声音内容**：要说的话或要唱的歌（文字文案 / 音频内容 / 视频原声）

### 1.2 参考图角色判定（逐张判定，可混合）

| 图像特征 | 角色 | 处理 |
|---|---|---|
| 清晰人脸/人像为主体 | **主体人** | 每段都携带；prompt 声明"与参考图为同一人，严格保持五官、发型、肤色、体型、服装一致" |
| 无明显人脸的环境/布景 | **场景** | prompt 描述为背景环境，保持空间一致 |
| 商品/包装/产品特写 | **道具** | prompt 写明互动动作（拿起、展示、试用、放回）与手持位置 |
| 风格化海报/画风参考 | **风格参考** | 仅迁移画风、光影、色调，不迁移其中人物身份 |

referenceImages 排序约定：`[上一段尾帧(如有), 主体人图, 场景图, 道具图, 风格图]`，总数 ≤9。人脸被遮挡、图模糊到无法判定角色时，**一次性向用户问清，不猜测**。

### 1.3 参考音频双模式判定（最高优先级分叉）

| 模式 | 触发信号 | referenceAudios 放什么 | 文案放哪 |
|---|---|---|---|
| **A. 内容驱动**（跟说/跟唱/严格对嘴） | 用户说"跟着唱/对口型/用这段配音/就念这段"；或音频内容与目标文案语义重合 ≥80% | 要播报/演唱的**目标音频本身**（片段 ≤15s） | prompt **不写台词**，只写画面，并要求"不发出参考音频以外的声音" |
| **B. 音色克隆**（仿声念新稿） | 用户说"用这个声音/模仿TA的音色念下面文案"；音频是短样本且内容与文案无关 | 干净单人声样本（建议 5–15s），每段都带同一条 | 要念的**新文案写进 prompt**，并注明"使用参考音频的音色与语气，不重复其原话" |

判定顺序：**用户明示意图 > hearing 比对结果 > 一次性提问**。hearing 发现样本含 2 个以上发音人、强背景噪声或音乐时，不能做音色克隆样本，需提示更换。

### 1.4 输入组合路由矩阵

| 用户输入 | 预处理 | 进入工作流 |
|---|---|---|
| 纯文字 | 解析四要素，文案即播报内容 | 流程 A |
| 文字 + 图 | 按 1.2 定图角色 | 流程 A |
| 文字 + 音频 | hearing 比对，按 1.3 定音频模式 | B 模式→流程B；克隆模式→流程C |
| 文字 + 图 + 音频 | 图角色 + 音频模式双判定后汇合 | 流程 B 或 C |
| 仅图 + 音频（无文字） | hearing 转写音频得到内容，再反推画面设计 | 流程 B（默认内容驱动） |
| 仅音频 | hearing 转写，与用户确认人物/场景设定 | 流程 B |
| 视频 URL（+文字/图，任意） | videoDownloader 下载；videoEditor 抽帧/抽音轨；hearing 转写 | 流程 D（二创翻拍）或 E（续作） |
| 本地视频文件（+文字/图） | 不经过下载器，直接 videoEditor 抽帧/抽音轨 | 流程 D 或 E |

URL、图片、文字同时存在时并行解析：URL 提供对标形象或原声、图片按 1.2 提供主体/道具、文字提供新文案或导演指令，最后汇合到同一条生成链，不允许遗漏任一输入。

---

## 2. 通用工程规则（所有流程共用）

### 2.1 项目目录与片段表

每个任务独立目录，所有中间产物落盘、禁止散落：

```
./projects/<task_id>/
├── audio/        # 下载/切分出的音频片段 seg_001.wav ...
├── images/       # 用户参考图、视频抽帧
├── frames/       # 每段返回尾帧 tail_001.jpg ...
├── segments/     # 每段生成视频 seg_001.mp4 ...
└── final/        # 拼接成片与音轨
```

开工即建立**片段表**并随执行更新（时间戳从 0 开始计数）：

| 段号 | 文案/歌词 | 音频区间 | duration(s) | 参考音频 | 参考图(含尾帧) | 成片 | 校验 |
|---|---|---|---|---|---|---|---|

### 2.2 时长预算与切分（硬约束）

- **纯文案口播**：中文按 4–5 字/秒（含停顿）、英文约 3 词/秒估算；单段 ≤60 汉字 / ≤15 秒；只在句号、问号、感叹号、逗号停顿处切，保持语义完整。
- **内容驱动**：以 hearing 返回的逐句时间戳为准，按句间停顿/换气/间奏边界聚合，每段音频 ≤15 秒；音频非整数秒时 `duration = 向上取整(音频秒数)`，最终用原音轨 remux 对齐（见 2.4）。
- **唱歌**：以歌词时间戳切分，间奏 >2 秒的部分单独成段或在 prompt 中写明"间奏中人物随节拍轻晃、等待进入"；禁止把大段间奏和演唱混在一段里。
- 任何片段都不得超过 15 秒；超长必须重切，禁止超限调用。

### 2.3 尾帧连贯链（防人物/场景漂移的核心手段）

1. 第 1 段：referenceImages = `[主体人图, 场景图, 道具图...]`（无则 `[]`）。
2. 第 N 段（N≥2）：referenceImages = `[第 N-1 段返回尾帧 tail_00(N-1), 主体人原图, 其他参考图...]`。
3. 每段 prompt 开头声明"参考图 1 为上一秒画面，从该画面无缝继续"，人物服装、场景、光线保持不变；**续作 prompt 只写本段新动作与新台词，不复述上段已发生内容**。
4. 某段质检不合格需重生成时，从该段开始按尾帧链顺序重跑其后所有段落。

### 2.4 音画对齐策略

- **内容驱动/跟唱**：生成段自带声音只作预览；成片阶段必须用 videoEditor 将"按顺序拼接的原始目标音频"整体替换成片音轨并 `-shortest` 裁切，保证零口型漂移（配方见 5.5）。
- **音色克隆/纯文案**：使用各生成段自带音轨，拼接时不做替换。
- 全片所有段必须同比例、同分辨率、同 fps（9:16 用 768×1344、16:9 用 1344×768，30fps），拼接前用 5.2 统一规格。

---

## 3. 五大执行工作流

### 流程 A：纯生成口播/演唱（无目标音频，文案在文字里）

1. 按 1.1 解析四要素；文案、人物设定缺失且无法合理推断时，一次性向用户问清。
2. 按 2.2 切分文案、建立片段表，确定 ratio（用户未指定则 9:16）。
3. 逐段调用 generateVideo：
   - `model:'minimax-h3'`，`referenceAudios:[]`，referenceImages 按 2.3 尾帧链组织；
   - prompt 用第 4 节模板，台词用中文引号完整写入本段文案；
   - `duration` 取本段估算秒数（4–15 整数），`savePath:'./projects/<id>/segments/seg_00N.mp4'`。
4. 保存每段返回尾帧到 frames/，更新片段表。
5. 按 5.1–5.2 统一规格并拼接，输出 final 成片，进入第 6 节质检。

### 流程 B：音频内容驱动（跟说/跟唱/配音对嘴）

1. 网络音频/视频原声先经流程 D 第 1 步取得本地音频；本地音频直接使用。
2. hearing：拿全文、逐句时间戳、总时长、发音人数量。
3. 按 2.2 切音频：videoEditor 按时间戳切成 audio/seg_00N.wav（配方 5.3），每段 ≤15s。
4. 逐段 generateVideo：
   - `referenceAudios:['./projects/<id>/audio/seg_00N.wav']`；
   - 唱歌 prompt 用 4.2，跟说口播用 4.1 但删除台词行、改为"严格跟随参考音频念白，不发出其他声音"；
   - `duration = 向上取整(该音频秒数)`；referenceImages 按 2.3 组织（人物来自用户图或文字设定）。
5. 拼接原始音频片段为完整目标音轨（5.4），拼接视频段后执行 5.5 替换音轨并 `-shortest`。
6. 质检（第 6 节），重点核对逐字口型与歌词。

### 流程 C：音色克隆播报（仿指定声音念新文案）

1. hearing 校验样本：单人、干净、5–15s；过长用 5.3 截取最具代表性的 5–15s 片段；不合格请用户更换。
2. 按 2.2 切分新文案。
3. 每段 generateVideo 都带**同一条音色样本**：`referenceAudios:[voice_sample.wav]`；prompt 用 4.3 模板，明确"使用参考音频的音色/语速/情绪念出以下文案，不得复述样本原话"，新文案写入引号。
4. 尾帧链、拼接同流程 A；成片保留生成段自带音轨，不做替换。

### 流程 D：网络/本地视频二创翻拍

1. 取素材：
   - URL：`videoDownloader`，需要画面用 `type:'video_hd'`，只需要原声用 `type:'audio'`，saveFolder 指向项目目录；
   - 本地视频：跳过下载，直接进下一步。
2. 拆素材（videoEditor）：抽音轨（5.6）→ hearing 转写拿逐句文案与时间戳；抽 1–3 张清晰正脸帧/场景帧到 images/（5.7）作为形象或场景参考。
3. 文案改写：保留原片核心逻辑、钩子与爆点，全部换表达方式、口语化重写，避免逐句抄袭；按 2.2 切分。用户提供了新人物图/新道具图时以用户图为主体，视频抽帧仅作风格或场景参考。
4. 按用户意图汇入 A/B/C：要原声对嘴走 B，要仿原声走 C，重新配音走 A。
5. 拼接、质检、交付；不交付未改写的原片搬运版本。

### 流程 E：视频续作/扩展（接着原片往下演）

1. 取得原片（同流程 D 第 1 步），videoEditor 抽**最后一帧**（5.7 尾帧配方）。
2. 第 1 个新段 referenceImages = `[原片尾帧, 主体人图...]`，prompt 只写"接下来的新动作/新台词"，并锁定外观、服装、场景、光线不变。
3. 后续段按 2.3 尾帧链继续；最后把原片与新段统一规格后按顺序拼接（原片作为第 0 段）。

---

## 4. generateVideo 画面 Prompt 模板（七段式，直接套用）

固定顺序：①主体一致性 → ②外观神态 → ③场景光线 → ④道具互动 → ⑤景别机位 → ⑥动作表情 → ⑦声音指令；末尾统一加负面约束。口播优先固定胸像/近景、小幅度动作，避免大幅运镜导致面部崩坏。

### 4.1 口播模板（流程 A 用）

```
【主体】参考图1为上一秒尾帧，从该画面无缝继续（首段删除此句）；人物与参考图为同一人，严格保持五官、发型、肤色、体型、服装一致。
【外观】<年龄/族群/发型/妆容/服装，如：25岁亚洲女性，黑色长直发，米白针织衫，淡妆>
【场景】<场景+光线，如：明亮居家客厅，柔和自然光，背景浅景深虚化>
【道具】<无道具则删此行；如：右手持白色护肤品瓶，瓶身朝向镜头>
【机位】固定胸像近景，人物居中，眼睛平视镜头，镜头稳定不晃动，9:16竖屏构图。
【动作】自然微笑，随语气轻微点头与挑眉，双手在胸前做小幅度自然手势，身体放松微侧。
【声音】自然亲切地播报以下文案，语速适中、吐字清晰："<本段完整文案>"
【约束】全程只有一个人，不换脸、不换装、不多余人，口型与声音严格同步，无字幕、无水印、无logo，画面稳定。
```

### 4.2 跟唱模板（流程 B 用）

```
【主体】…（同4.1，锁定同一人）
【场景】<如：极简纯色背景/演唱会质感舞台光，冷暖轮廓光>
【机位】固定中景，镜头稳定，人物居中。
【动作】跟随音乐节拍轻微晃动身体与头部，表情投入，嘴型、咬字、拖音、换气与参考音频中的人声演唱严格同步；间奏时随节拍轻晃并微笑，不抢拍。
【声音】只演唱参考音频中的内容，不旁白、不说话、不发出参考音频以外的任何声音。
【约束】全程只有一个人，形象服装不漂移，口型与演唱严格同步，无字幕水印。
```

### 4.3 音色克隆模板（流程 C 用）

同 4.1，仅替换【声音】行：

```
【声音】使用参考音频中说话人的音色、语速、停顿习惯与情绪风格，自然播报以下全新文案（不要复述参考音频里的原话）："<本段完整新文案>"
```

### 4.4 带货讲解变体

机位改为"固定中近景，人物与桌面商品同框"；【道具】行写明"先手持商品展示正面 → 指向卖点部位 → 放回桌面"的动作顺序；【动作】与讲解台词节奏对应；商品外观必须与道具参考图一致，禁止臆造品牌标识与功能参数（参数只能来自用户文案）。

---

## 5. videoEditor 标准配方（cmdArgs 不含 ffmpeg、-i 与输出路径）

多输入时 input 传路径数组，工具按数组顺序自动加 `-i`。

### 5.1 单段统一规格（拼接前对每个 seg 执行；9:16 为例）

```
input: './projects/<id>/segments/seg_00N.mp4'
cmdArgs: ['-vf','scale=768:1344:force_original_aspect_ratio=decrease,pad=768:1344:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30','-ar','44100','-ac','2','-c:v','libx264','-c:a','aac']
```
16:9 时把 scale/pad 的 768:1344 换为 1344:768。

### 5.2 N 段拼接（全部段已统一规格后）

```
input: [seg_001.mp4, seg_002.mp4, ..., seg_00N.mp4]
cmdArgs: ['-filter_complex','[0:v][0:a][1:v][1:a]...[N-1:v][N-1:a]concat=n=N:v=1:a=1[v][a]','-map','[v]','-map','[a]','-c:v','libx264','-c:a','aac']
```
filter_complex 中流标签数量必须与段数 N 严格对应；某段无音轨时先用 5.6 思路补静音轨再拼。

### 5.3 音频/视频按时间切割（切音频片段、截取音色样本）

```
input: 'source.wav'
cmdArgs: ['-ss','00:00:00.000','-to','00:00:12.300','-c:a','pcm_s16le']
```
切割点取自 hearing 时间戳；输出统一 wav。

### 5.4 音频段顺序拼接（流程 B 构造完整目标音轨）

```
input: [seg_001.wav, ..., seg_00N.wav]
cmdArgs: ['-filter_complex','[0:a][1:a]...[N-1:a]concat=n=N:v=0:a=1[a]','-map','[a]','-c:a','pcm_s16le']
```

### 5.5 用原始目标音轨替换成片音轨（跟说/跟唱成片必做）

```
input: ['concat_video.mp4','final_target_audio.wav']
cmdArgs: ['-map','0:v:0','-map','1:a:0','-c:v','copy','-c:a','aac','-shortest']
```

### 5.6 从视频抽取音轨

```
input: 'source.mp4'
cmdArgs: ['-vn','-c:a','pcm_s16le']
```

### 5.7 抽帧（二创取形象参考 / 续作取尾帧）

```
指定时间抽帧:  ['-ss','00:00:03.500','-frames:v','1']
抽最后一帧:    ['-sseof','-0.5','-frames:v','1']
```
generateVideo 已返回尾帧时优先用返回值，不用此配方重复抽。

---

## 6. hearing 使用要点

1. 二种必用场景：①拿音频文本与逐句时间戳作为切分依据；②比对音频内容与用户文案，判定 1.3 的双模式。
2. 关注发音人数量：多人对话/合唱音频不能作为单一音色克隆样本；作为内容驱动时在 prompt 中说明当前段说话/演唱人。
3. 文件必须 <1200M；超限先用 videoEditor 切割再分别识别。
4. hearing 结果是切分与时长的唯一权威依据，禁止凭感觉估算音频时长。

## 7. 硬性禁令清单

- 禁止 duration 超 15 秒或非 4–15 整数；禁止 referenceAudios 超 3 条或合计超 15 秒；禁止 referenceImages 超 9 张；七参数缺一时禁止调用，空集传 `[]`。
- 内容驱动模式禁止在 prompt 里另写台词；音色克隆模式禁止把样本原话当文案。
- 禁止凭印象编造文案、歌词、品牌卖点、产品参数；无来源信息必须向用户索取。
- 关键歧义（图角色、音频模式、出镜人设定）一次性合并提问，不反复打断用户；用户已明示的意图不重新追问。
- 二创必须改写，禁止输出原样搬运成片；续作 prompt 禁止复述已发生画面。
- 任何一段生成失败：先读报错、修正参数重跑该段；连续两次失败更换切分点/参考图组合，不得把生成工作改成让用户自行操作。
