---
name: make-ai-video
description: 协助把想法、文章、提纲、已有口播、资料包或音频制作成有来源、可审核、可恢复的 AI 视频，并可选接入本地声音克隆。适用于用户提出“帮我把这个思路做成视频”“文章转视频”“整理口播和分镜”“用我的声音生成”“制作课程视频或短视频”“检查字幕、渲染或发布状态”等任务；也适用于需要区分首次声纹建档、本次配音、视频渲染和人工发布门禁的场景。
---

# AI 视频制作助手

从用户已有的想法或素材开始，先判断输入和当前阶段，再协助完成内容、声音、画面与审核。不要把文章当作默认入口，也不要把首次声音建档、本次正式配音和整片发布合并成一次生成。

## 启动即执行

触发 Skill 后，立即进入工作流并执行当前可安全完成的步骤，不要只复述流程、列菜单或让用户自己拼命令。

1. 先运行 `node scripts/doctor.mjs --json` 检查基础能力。定位或创建本次生产包，检查已有文件、设备、运行时和当前状态；没有生产包时运行 `node scripts/create-package.mjs --dir <目录> --input-mode <类型> --summary <摘要>`，不要临时拼接一套不可复用目录。
2. 把用户现有输入写入 `video-brief.json`，明确缺失项，并继续执行到下一个真实人工门禁。
3. 可逆的本地检查、建目录、生成合同对象和校验应主动执行。安装依赖、下载大模型或需要额外系统权限时，说明体积、目录和用途后发起所需批准；获准后继续，不要退回成教程。
4. 只有授权/权利不明、核心事实待核验、口播确认、声音所有者选声、整片审核和发布授权等人工门禁才暂停。
5. 每次暂停或交付都报告：`当前阶段 / 已完成动作 / 产物路径 / 校验结果 / 需要用户做的一个决定 / 批准后下一步`。

用户说“帮我做成视频”代表持续推进到下一个人工门禁；用户明确要求本人克隆声音且没有可用 Profile 时，按下文时钟 A 先执行本地声音建档，然后自动回到时钟 B。不要把“给一句开始话术”当作完成。

## 读取所需合同

1. 先读 `references/input-routing.md`，把用户输入整理为 `VideoBrief`。
2. 设计内容时读 `references/content-contract.md`。
3. 选择画幅和分镜时读 `references/visual-routing.md`。
4. 使用声音、渲染或报告状态前读 `references/production-gates.md`。
5. 只有用户要求克隆或复用克隆声音时，才读 `references/voice-cloning.md`。
6. 进入画面与渲染阶段时读 `references/rendering-adapter.md`。如果当前项目没有渲染适配器，继续交付内容、声音、字幕和 `video-unit.json`，但不得声称已经可以生成正式 MP4。
7. `assets/example-package/` 只用于理解完整对象和测试，不作为新项目直接改写；需要首次本地声纹建档时，再复制 `assets/voice-clone-starter/`。

## 使用两条时钟

### 时钟 A：低频声音能力建立

仅在用户明确选择克隆声音且没有可用 `VoiceProfile` 时执行：

```text
授权与私有范围
→ 参考录音和准确逐字稿
→ 三个校准候选
→ 机器 QA
→ 声音所有者选择
→ production-pilot VoiceProfile
```

这条链通常只在首次建档、参考或模型漂移、授权范围变化时重跑。它先于完整视频生产，但不生成本次正式口播。

### 时钟 B：每条视频自己的生产

每个视频项目都执行：

```text
VideoBrief
→ ContentDecision
→ VideoContentPlan
→ 口播人工确认
→ 本次 VoiceRun 或其他配音
→ 正式时序
→ 视觉预检
→ 渲染与技术检查
→ 整片人工审核
→ 发布候选
```

如果已有可用声音档案，在项目开始时做一次 preflight，口播确认后再生成本次三个候选。不要在口播未冻结时提前生成正式音频。

## 执行工作流

### 1. 建立 `video-brief.json`

识别 `idea`、`article`、`outline`、`script`、`source-pack` 或 `audio` 输入。记录受众、期望变化、来源、权利、证据成熟度、时长/画幅偏好和声音意图。

用户只有想法时，协助展开方向，但把假设与待核验事实写入 `verificationNeeds`；不要编造个人经历、数据或案例。

### 2. 检查声音依赖

- `none`、`human` 或普通 `synthetic`：按相应合同继续。
- `cloned` 且已有 Profile：立即 preflight；漂移则阻断。
- `cloned` 且没有 Profile：读取 `references/voice-cloning.md`，先做设备与本地模型预检；缺少模型时按该参考执行下载与锁定，随后走时钟 A，再自动进入完整生产。

### 3. 建立 `content-decision.json`

根据输入成熟度生成 2–6 个候选，每个候选只回答一个问题，包含核心判断、观众动作、来源锚点、待核验项、时长建议和画幅建议。一次只推荐一个；保留其余候选。

### 4. 建立 `video-content-plan.json`

按内容密度选择时长：

- `quick`：35–50 秒，一个纠偏或动作；
- `standard`：60–85 秒，一个机制、比较或诊断；
- `deep`：90–120 秒，一个带证据的案例；
- `course-master`：130–180 秒，只用于一个需要 3–5 个相互依赖章节的问题。

每段绑定来源、时间预算、口播职责、情绪和唯一视觉任务。先建立具体冲突，再引入术语；结尾给出动作或边界。

### 5. 冻结内容和口播

向用户展示主问题、核心判断、事实边界、时长、画幅和完整口播。`content_plan_reviewed` 与 `narration_reviewed` 未通过时，不生成本次克隆配音，也不做完整渲染。

### 6. 生成本次声音

克隆声音时先重新 preflight，再按认知章节整段生成三个候选。机器淘汰坏音频；声音所有者明确选择其中一个。本次选择只批准该 VoiceRun，不批准整片或发布。

### 7. 建立正式时序与 `video-unit.json`

把已审内容和选定声音翻译成连续 beat。每个 beat 只使用一个 `visualJob`：`conflict`、`mechanism`、`comparison`、`evidence`、`action` 或 `conclusion`。

估算字幕只能用于草案。使用转写或人工对齐后，才能把 `timing_ready` 标为通过。

### 8. 预览、渲染与检查

先检查当前项目是否存在可用的 Remotion、剪辑工程或其他渲染适配器。存在时，先检查开场、核心解释、证据/动作和结尾代表帧，再渲染完整视频；检查尺寸、帧率、编码、音频、字幕范围、缺失资产和隐私残留。不存在时，明确报告 `rendering_adapter_required`，保留已完成产物，不得把视觉计划写成已经生成成片。

### 9. 记录真实状态

分别记录 `local_package`、`review_candidate`、`release_candidate`，以及各平台 `draft`、`previewed`、`scheduled`、`published`。自动校验、文件存在、本人选声和整片发布是不同事实。

## 校验生产包

在 Skill 目录运行：

```bash
node scripts/validate-package.mjs --dir <生产包>
```

加 `--json` 获取机器可读结果。修复错误后再推进状态；警告必须在交付说明中解释。

## 停止条件

遇到以下情况时停止并报告精确阻塞点：

- 用户意图、输入类型或权利边界不明确；
- 待核验事实会改变核心结论；
- 请求时长会删除结论边界；
- 声音授权、Profile、模型、参考或哈希漂移；
- 口播未审却准备生成本次克隆音频；
- 估算字幕被当成正式时序；
- 渲染命令结束但目标文件不存在；
- 自动检查被用来推断人工批准。

保留已完成对象，从失败阶段恢复，不要重做整条链。
