Files
video-create/.claude/skills/video-from-script/SKILL.md
2026-04-29 21:26:42 +08:00

23 KiB
Raw Blame History

name, description
name description
video-from-script 素材生产路由。根据用户意图分发到对应子技能image-generator生图、capcut成片。支持单图和首尾帧两种视频模式。触发词做视频、视频素材、生图+成片、图生视频、首尾帧。

素材生产路由

强制规则

  1. 工作流不可跳步:分镜(纯叙事)→ Prompt 生成(分镜+风格)→ Pipeline 执行。每阶段之间必须审查结果
  2. manifest.json 是唯一状态源:任何操作(生图、上传、替换素材)完成后必须立即回写 manifest
  3. 禁止 curl 调用生图/生视频 API:必须通过 pipeline.js 或对应 generator 脚本执行
  4. 并行优先:多个独立子任务必须用子 agent 并行,不要在主对话中串行完成

禁止:跳过分镜 / 分镜阶段读风格 / 不更新 manifest 就继续 / 一口气跑完 pipeline 不审查


你(主 Agent是整个流程的导演。 子 Agent 是执行者,你负责:理解意图、编排调度、质量卡点、用户沟通、错误恢复。

主 Agent 职责

职责 说明
意图理解 分析用户需求,选择正确的模式、视频模型和帧模式
编排调度 决定 Agent 串行/并行、传递参数、收集结果
质量卡点 每个阶段完成后校验结果,不合格则要求子 Agent 重做
用户沟通 汇报进度、请求用户决策(挑选图片、确认风格)
错误恢复 API 失败时重试或换模型,质量不达标时补生成

路由规则

用户意图 执行流程 子技能
"生图"、"批量图片" 生图 image-generator
"图片成片"、"图片轮播" 已有图片 → 组装 capcut
"图文成片"、"生图+成片" 生图 → TTS+字幕+组装 image-generatorcapcut
"图生视频"、"图片转视频" 生图 → AI视频 → 组装 image-generator → Grok/VEO/Kling → capcut
"首尾帧"、"帧动画"、"关键帧" 生图(成对) → 视频过渡 → 组装 image-generator(帧对) → VEO/Kling → capcut
"文案转视频"、"配音视频" 生图 → TTS+字幕+组装 image-generatorcapcut
只说"做视频" 询问:图文成片 / 图生视频(单图/首尾帧)

"图生视频"的后续追问:用户说"图生视频"时,追问视频模式:

  • 单图模式:一张图 → 一段视频Grok / VEO / Kling
  • 首尾帧模式:起始帧+结束帧 → 一段过渡视频VEO / Kling

Pipeline 执行流程

Agent 创建 manifest.json 后,用 pipeline.js 分阶段执行。不要一口气跑完,必须在阶段之间审查结果。

分工

角色 职责
Agent(你) 读取 account.json + style.md → 分镜规划 → 从分镜生成 imagePrompt/videoPrompt → 写出 manifest.json → 审查每阶段结果
Pipeline 机械执行:生图 → 上传 → 生视频 → TTS → 成片。每完成一个 item 写盘,支持断点续跑

执行步骤

Step -1: 意图确认(进入任何步骤前必须完成,逐项确认,缺一不可)

  1. 内容意图:用户要做什么?
     - 生图 / 图生视频 / 图片成片 / 配音视频 / 首尾帧
     - 模糊时追问到明确,不要自己猜

  2. 素材来源:
     - 有现成文案/图片?还是需要 AI 生成文案?
     - 有参考图/风格参考?

  3. 视频模式(涉及视频时必问):
     - 单图模式1 张图 → 1 段视频Grok / VEO / Kling
     - 首尾帧模式2 张图 → 过渡视频VEO / Kling

  4. 账号确认:
     - 扫描 accounts/*/account.json 获取最新账号列表
     - 展示ID、名称、风格、画幅
     - 未指定 → 让用户选
     - 指定了但不匹配 → 告知可用账号,问是否新建
     - 确认后记住 account ID

  5. 参数确认:
     - 画幅9:16 / 16:9、生图模型Gemini / MJ、视频模型VEO / Grok / Kling
     - 有账号时从 account.json 继承默认值,只问是否覆盖

  → 以上 5 项全部确认后agent 写出完整执行计划,让用户最终确认:

  执行计划示例(根据实际任务调整):
  1. 读取 {account} 账号配置 + 风格文件style.md
  2. 根据用户文案生成分镜表N shot
  3. 分镜 + 风格 → 生成英文 promptsimagePrompt + videoPrompt
  4. pipeline.js init → 创建 manifest.json + 输出目录
  5. pipeline.js run --phase images → 生图 → 人工审查
  6. pipeline.js run --phase upload,videos → 上传 + 生成视频
  7. pipeline.js run --phase tts,assemble → TTS + 成片

  用户确认 "开始" → 进入 Step 0
  用户修改 → 调整计划后重新输出
  → 禁止在用户未确认执行计划的情况下进入 Step 0

Step 0: 前置检查(账号+风格校验)
  - 读取 accounts/{account}/account.json检查 styles 字段是否配置了风格文件
  - 如果账号不存在或没有风格:
    → 暂停流程,通过 CLI 创建:`pipeline.js create-account --id <id> --name <名称> --references ./ref.png`
    → 然后编辑 `styles/*.md` 完善提示词策略
  - 校验账号完整性:`pipeline.js validate-account --account <id>`
  - 有风格则继续 Step 1

Step 1: 分镜规划(纯叙事,不读风格)
  - 输入:用户文案
  - 分析文案语义和节奏,拆成 N 个 shot
  - 为每个 shot 规划:景别、镜头运动、画面内容(中文)、与下一 shot 的转场
  - 输出分镜表(见「分镜规划规则」章节)
  - 分镜与风格无关,同一分镜可换不同风格复用

Step 2: Prompt 生成 + Manifest 初始化(分镜 + 风格 → 英文 prompts → pipeline.js init
  - 输入:分镜表 + style.md + account.json
  - 子 Agent 将每个 shot 的中文画面描述结合风格文件,生成:
    · imagePrompt英文画面描述给 Gemini/MJ
    · videoPrompt英文运动描述给 Grok/VEO/Kling
    · keyword, keywordColor
  - **禁止 AI 手写 manifest.json**,必须通过脚本初始化:
    ```bash
    node pipeline.js init --account <id> --mode <single|framePair> \
      --items '[{"text":"文案","imagePrompt":"...","videoPrompt":"...","keyword":"关键词","keywordColor":"#FF6B35"}]'
    ```
  - 脚本自动从 account.json 继承imageModel、videoModel、format、references
  - 脚本自动创建目录、校验必填字段、设置 status=pending
  - AI 只负责创意内容text、imagePrompt、videoPrompt、keyword不碰结构字段
  - 首尾帧模式额外要求:每个 item 必须有 `lastFramePrompt``imagePrompt` 作为第一帧,不需要单独的 `firstFramePrompt`
  - init 返回 manifest 路径,后续命令使用该路径

Step 3: 生图 → 人工审查
  跑 images 阶段。完成后审查分辨率≥1024、风格一致性、构图、无水印。
  不合格则删除/调 prompt 重跑,不进入下一步。

Step 4: 上传 + 生视频(可选,图文成片跳过此步)
  跑 upload + videos 阶段。首尾帧模式检查过渡连贯性。

Step 5: TTS + 成片
  跑 tts + assemble 阶段。检查字幕准确、BGM 不盖配音。

命令语法见下方「CLI 参考」,不在此处重复。

CLI 参考

# 创建账号Step 0首次使用时
node pipeline.js create-account --id <id> --name <名称> \
  --desc <描述> --video-model veo3-fast --references ./ref1.png,./ref2.png

# 校验账号完整性
node pipeline.js validate-account --account <id>

# 初始化 manifestStep 2 使用AI 只提供创意内容)
node pipeline.js init --account <id> --mode <single|framePair> \
  --items '[{"text":"...","imagePrompt":"...","videoPrompt":"...","keyword":"...","keywordColor":"..."}]'
# 也可从文件读取 items适合大量数据
node pipeline.js init --account <id> --mode single --items-file ./items.json

# 校验 manifest 完整性
node pipeline.js validate --manifest <path>

# 跑指定阶段
node pipeline.js run --manifest <path> --phase images
node pipeline.js run --manifest <path> --phase upload,videos

# 断点续跑(跳过已完成阶段和 item
node pipeline.js run --manifest <path> --resume

# 查看进度
node pipeline.js status --manifest <path>

阶段: imagesuploadvideosttsassemble

Manifest item 状态: pendinggeneratingdone / failed。无 status 字段视为 pending。


视频模式对比

单图模式

digraph single_image {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  img [label="一张图", shape=oval]
  prompt [label="videoPrompt"]
  grok [label="Grok\n6s 视频", fillcolor="#fff3e0"]
  veo [label="VEO\n6-8s 视频", fillcolor="#e8f5e9"]
  kling [label="Kling\n6s 视频", fillcolor="#e1f5fe"]
  result [label="视频输出", shape=oval, fillcolor="#e3f2fd"]

  img -> prompt
  prompt -> grok
  prompt -> veo
  prompt -> kling
  grok -> result
  veo -> result
  kling -> result
}
  • 每条文案生成 1 张图 + 1 个 videoPrompt
  • Grok、VEO 和 Kling 都支持
  • 提示词描述运动:"slow zoom in on subject"

首尾帧模式

digraph frame_pair {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  first [label="起始帧"]
  last [label="结束帧"]
  prompt [label="videoPrompt"]
  veo [label="VEO\n6-8s 过渡视频", fillcolor="#e8f5e9"]
  kling [label="Kling\n6s 过渡视频", fillcolor="#e1f5fe"]
  result [label="视频输出", shape=oval, fillcolor="#e3f2fd"]

  first -> veo
  last -> veo
  prompt -> veo
  first -> kling
  last -> kling
  prompt -> kling
  veo -> result
  kling -> result
}
  • 每条文案生成 2 张图firstFrame + lastFrame+ 1 个 videoPrompt
  • VEO 和 Kling 支持images 数组传两张图)
  • 起始帧和结束帧必须是同一场景的不同状态
  • 提示词描述过渡:"transition from idle machines to active production"
对比 单图模式 首尾帧模式
图片数量 N 张 2N 张
生图耗时 标准 ~2 倍(可并行)
视频连贯性 仅运动 场景变化(更强)
可用模型 Grok + VEO + Kling VEO + Kling
适用场景 风景、人物展示 状态变化、叙事过渡

多阶段执行策略

用 Agent 工具串行或并行执行子技能,阶段间必须通过质量卡点

生图+成片(串行+人工卡点)

digraph image_then_assemble {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  agent1 [label="Agent 1\nimage-generator\n生成图片到 output/"]
  gate1 [label="人工卡点\n用户挑选图片\n删除不合格的", shape=diamond, fillcolor="#fff9c4"]
  agent2 [label="Agent 2\ncapcut\n读取精选素材 → 组装"]

  agent1 -> gate1 -> agent2
}

配音+生图(并行+自动校验)

digraph parallel_image_tts {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  agent1 [label="Agent 1\nimage-generator\n生图", fillcolor="#e8f5e9"]
  agent2 [label="Agent 2\ncapcut\nTTS 配音", fillcolor="#e8f5e9"]
  validate [label="自动校验\n分辨率>=1024\n画幅匹配\n音频时长匹配", shape=diamond, fillcolor="#fff9c4"]
  agent3 [label="Agent 3\ncapcut\n组装全部素材 → 成片"]

  agent1 -> validate
  agent2 -> validate
  validate -> agent3
}

图生视频 - 单图模式

digraph single_image_video {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  agent1 [label="Agent 1\nimage-generator\n生图 + videoPrompt"]
  gate1 [label="人工卡点\n用户挑选图片", shape=diamond, fillcolor="#fff9c4"]
  agent2 [label="Agent 2\nGrok / VEO / Kling\n单图输入并行生成视频"]
  agent3 [label="Agent 3\ncapcut\n视频片段 + 字幕 → 成片"]

  agent1 -> gate1 -> agent2 -> agent3
}

图生视频 - 首尾帧模式

digraph frame_pair_video {
  rankdir=LR
  node [shape=box, style=filled, fillcolor="#f5f5f5", fontsize=11]

  agent1 [label="Agent 1\nimage-generator\n成对生图\n(firstFrame + lastFrame)\n可并行"]
  gate1 [label="人工卡点\n检查首尾帧连贯性\n同一场景/相似视角", shape=diamond, fillcolor="#fff9c4"]
  agent2 [label="Agent 2\nVEO / Kling\n双图输入\nimages:[first, last]"]
  agent3 [label="Agent 3\ncapcut\n视频片段 + 字幕 → 成片"]

  agent1 -> gate1 -> agent2 -> agent3
}

视频模型选择

模型 时长 画幅 单图 首尾帧 特点 API
Grok 6s 任意 快、稳定 yunwu.ai
Veo3-fast ~8s 16:9, 9:16 超分、中文增强 jimmyai.cn
Veo3-fast-frames ~8s 16:9, 9:16 多帧、质量最高 jimmyai.cn
Kling 6s 任意 快、首尾帧支持 yunwu.ai

图生视频注意事项:

  • 并行执行:先同时提交所有任务(并发 3再并行轮询结果
  • 单个视频生成耗时 60-300 秒
  • 脚本内置 3 次重试,每次自动简化提示词
  • videoPrompt 在生图阶段一并生成
  • VEO 独有:enhance_prompt=true 中文增强,enable_upsample=true 超分
  • 配置在 config.json

视频大小一致性

  • 同批次同模型,不混合 Grok720P/6s、VEO超分/8s和 Kling6s
  • 画幅统一跟随 manifest 顶层 format(默认 9:16
  • 个别 item 降级到备用模型时,在 manifest 中标记 "videoModel" 以便追踪

视频生成失败降级

降级链: Grok ↔ VEO ↔ Kling

触发: 同一 item 重试 5 次仍失败 → 用备用模型单独补生成

# Grok 失败 → VEO/Kling 补
node veo-video-generator.js --image <url> --prompt <prompt> -o ./videos
node kling-video-generator.js --image <url> --prompt <prompt> -o ./videos

# VEO 失败 → Grok/Kling 补
node grok-video-generator.js --image <url> --prompt <prompt> -o ./videos
node kling-video-generator.js --image <url> --prompt <prompt> -o ./videos

规则: 逐 item 降级,不卡整批次。补完后上传 OSS回写 videoUrl,继续 tts → assemble


目录规范

所有批次的输出遵循统一目录结构。完整规范见 batch-mode.md 的"目录规范"章节。

核心规则

output/{account}_{YYYYMMDD}_{NNN}/
├── manifest.json                # 主清单(贯穿全流程)
├── prompts.txt                  # 原始提示词存档
├── images/                      # scene_{NN}_{keyword}.jpeg首尾帧加 _last 后缀)
├── videos/                      # scene_{NN}_{keyword}.mp4与图片对应
└── urls.json                    # OSS 公网 URL 映射

命名对应关系:图片 scene_01_觉醒.jpeg → 视频 scene_01_觉醒.mp4;首尾帧尾帧 scene_01_觉醒_last.jpegMJ 候选 scene_01_觉醒_cand1.jpeg


manifest.json 格式

完整字段规范见 manifest-schema.md(字段权重 P0/P1/P2、读写方、流转关系

核心规则

  • 脚本检测 lastFrameUrl → 首尾帧模式(传 images:[url, lastFrameUrl]);否则 → 单图模式(传 images:[url]
  • 顶层 format 自动传给 VEO/Grok/Kling 作为画幅比例
  • account 字段驱动 capcut_assemble 读取对应 account.json 的字幕风格配置

分镜规划规则

分镜是 Agent 的纯叙事思考,与视觉风格无关。 拿到文案后、读风格文件之前,先完成分镜。

短视频的画面节奏和文案节奏是脱钩的TTS 配音连续流淌,画面在配音下面切换。分镜规划的是视觉节拍,不是文字断句。

核心原则

  1. 按视觉节拍切 shot:每个 shot = 6-8 秒视频片段。不是按文字断句,而是按画面能承载的信息量切
  2. 前 3 秒 hookshot 1 必须有强视觉冲击,决定完播率
  3. 景别快速交替:相邻 shot 景别必须有落差wide → close-upclose-up → medium不要连续同一景别
  4. 镜头服务情绪:每个 cameraMove 对应文案的情绪节拍,不要无意义运动
  5. 时长匹配先算总时长shot 数 × 6-8s再和配音时长对齐

时长规划

分镜前先算数:

  • 短视频目标时长20-60 秒
  • 每个 shot 时长6-8 秒(由视频模型决定)
  • shot 数量 = 目标时长 ÷ 6~8取整一般 4-8 个 shot
  • 配音字数 ≈ shot 数 × 12-15 字(按正常语速)

分镜表字段

字段 类型 说明
text string 该 shot 覆盖的配音文案(可能不到一句,也可能跨句)
shotType enum wide / medium / close-up / extreme-close-up
cameraMove enum static / zoom-in / zoom-out / pan-left / pan-right / dolly-in / tracking
visualDesc string 画面描述(中文),只写三件事:主体是什么、什么状态/动作、视觉焦点在哪。氛围和构图交给风格层
hook boolean 仅 shot 1 为 true标记是否为开场钩子

景别节奏

shot 1 (hook):    close-up 或 extreme-close-up强主体抓眼球
shot 2:           wide 或 medium展开场景给上下文
shot 3-N交替: close-up→ wide→ close-up→ ...
最后一个 shot:    medium 或 wide收束不过度设计

不要用 extreme-close-up 收尾(太紧),不要用 tracking 滥用(信息密度低)。

镜头运动选择

cameraMove 情绪 典型场景
static 稳定、庄严 建筑、静物、仪式感
zoom-in 聚焦、压迫 悬疑、揭秘、强调细节
zoom-out 揭示、震撼 从局部拉出全景,揭示真相
pan-left/right 环顾、流动 展示空间、物品陈列
dolly-in 沉浸、紧张 人物面部、关键物件
tracking 跟随、活力 运动场景、行走少用AI 生成的 tracking 质量不稳定)

短视频默认转场是硬切不需要单独字段。特殊转场fade/dissolve仅在 Agent 判断需要情绪转换时标注在 visualDesc 里。


提示词生成规则

提示词由子 Agent 生成:主 Agent 将分镜表 + 风格文件style.md交给子 Agent子 Agent 负责将中文画面描述转化为英文 imagePrompt / videoPrompt。主 Agent 审核提示词质量,不合格则退回重做。

前置条件:账号必须有风格文件。无风格 → 提醒用户创建,不跳过。

单图模式提示词

每条文案生成:

  • imagePrompt:画面描述(英文,给 Gemini/MJ
  • videoPrompt:运动描述(英文,给 Grok/VEO/Kling

videoPrompt 规则:

  • 描述运动而非内容("zoom in" 而非 "a cat"
  • 与 imagePrompt 画面内容对应
  • 简洁1-2 句,不超过 50 词)
  • 收敛原则:基于图片已有内容,仅描述镜头运动和微动效果
  • 禁止:大幅度环境切换、场景变化、人物位置跳变
  • 推荐写法镜头运动slow zoom/pan/dolly+ 星座/光效微动 + 保持静止氛围
  • 画幅继承manifest.json 顶层 format 字段(如 "9:16")会自动传给 VEO/Kling无需命令行 -a

首尾帧模式提示词

每条文案生成:

  • imagePrompt:起始帧画面(英文,与 single 模式复用同一字段)
  • lastFramePrompt:结束帧画面(英文)
  • videoPrompt:过渡描述(英文,给 VEO/Kling

首尾帧提示词设计原则

原则 说明 示例
同一场景 首尾帧是同一地点/主体的不同状态 都是工厂,不是两个地方
视角一致 相机角度/高度/距离相同 都是 wide shot
状态对比 imagePrompt"静止/之前"lastFramePrompt"运动/之后" 空车间 → 生产线运转
过渡自然 videoPrompt 描述从首到尾的变化 "machines start up rhythmically"
光照连贯 光源方向一致,可以有渐变 冷光 → 暖光可以,不能反转光源

videoPrompt 规则(首尾帧):

  • 描述过渡过程而非单帧状态
  • "from X to Y" 或 "X begins, Y happens" 格式
  • 必须同时呼应 imagePrompt起始帧和 lastFramePrompt结束帧中的元素
  • 简洁1-2 句,不超过 50 词)

质量卡点(跨阶段)

多阶段任务中,每个阶段完成后必须校验再进入下一阶段:

生图 → 成片 卡点

检查项 标准 不通过处理
图片分辨率 短边 >= 1024px 重新生成
画幅比例 与目标视频一致 (9:16/16:9) 重新生成
图片内容 无水印、无文字、主体清晰 删除,人工补选
风格一致性 同批次风格统一 替换偏差大的图
数量 至少 3 张(< 3 张无法成片) 补充生成

首尾帧额外检查

检查项 标准 不通过处理
场景一致性 首尾帧是同一场景 重新生成 lastFrame
视角匹配 构图、角度、距离一致 重新生成不匹配的帧
状态过渡合理 结束帧是起始帧的自然延续 调整提示词重新生成

自动校验脚本(在 Agent 间插入):

node .claude/skills/video-from-script/scripts/validate_assets.js \
  --dir ./output/batch_xxx \
  --min-resolution 1024 \
  --expected-ratio 9:16

配音 → 成片 卡点

检查项 标准 不通过处理
音频时长 与素材总时长相近±20% 调整语速或素材时长
音频质量 无静音段、无爆音 重新生成
音频数量 与素材数量匹配 补充或裁剪

AI视频 → 成片 卡点

检查项 标准 不通过处理
视频时长 每段 6-8 秒 正常,模型固定输出
视频画质 无明显伪影、无黑帧 重新生成
过渡连贯(首尾帧) 视频从首帧平滑过渡到尾帧 优化提示词重试
视频数量 与素材数量匹配 补充生成失败的视频

成片输出 卡点

检查项 标准
字幕准确 与原始文案一一对应
关键词高亮 颜色醒目、位置正确
图片动画 Ken Burns 流畅无卡顿
BGM 音量 不盖过配音(配音为主)
转场 无黑帧、无跳帧

任何卡点不通过,必须修复后再进入下一阶段,不可跳过。


共享资源

所有子技能共享以下资源(位于本目录):

  • scripts/ — 共享脚本gemini-image-generator.js, mj-image-generator.js, grok-video-generator.js, veo-video-generator.js, capcut_assemble.js, sync-to-jianying.js, oss-upload.js
  • accounts/ — 账号配置(详见 account-system.md
  • references/account-system.md — 账号系统说明

配置统一在 skills/config.jsonAPI密钥、路径


子技能

技能 触发词 职责
image-generator 生图、批量出图、MJ、Gemini 图片生成(双模型、单图/帧对)
capcut 成片、组装、剪映、图片轮播 CapCut 成片组装