| name | ai-video-sannong |
| description | 端到端制作竖屏 AI 妙招短视频(默认 3 镜 × 5 秒 = 15 秒,9:16)。题材通用:三农园艺、阳台种菜、美食、家居清洁收纳、宠物、育儿等都行,开场先问用户选题方向,不预设。工作流:方向确认 → 热门检索/对标视频拆解 → 双锚定(视觉一致 + 叙事承接)→ 全中文分镜 prompt → 一致性生图(火山 Seedream)→ 图生视频 + 原生 AI 配音(火山 Seedance 1.5 pro)→ ffmpeg 自动拼接成片。单网关单 key(火山 ARK,ark- 开头)。支持标准/快速/托管三档确认模式,生成物 agent 先做多模态自检再交付。当用户说"做 AI 视频""做一条妙招短视频""三农/阳台种菜/园艺短视频""美食/清洁/收纳妙招视频""复刻这种短视频""按这个对标拍一条",或上传带"内容由 AI 生成"标识的妙招类短视频做对标时,触发这个 skill。不要跟 script-washing(洗稿)、prompt-polish(单条提示词打磨)混用——这个是从选题到成片的端到端视频生产。 |
AI 妙招短视频 · 端到端生产线(通用题材)
把一个妙招类选题从 0 制作成可直接发布的竖屏 AI 短视频。最终交付:1 个带 AI 配音的成片
final.mp4 + 分镜静图 + 分段视频 + storyboard.xlsx 分镜表 + 口播稿。
- 题材不固定:三农园艺、美食、清洁收纳、宠物、育儿……开场先问用户方向(Stage 1.0),
按
profiles/ 加载题材包,没有就现场生成一个。
- 结构默认 3 镜 × 5s = 15s、9:16 竖屏、人物不出镜——这些是默认值不是铁律,用户明确要求时可调
(见"硬约束 vs 默认值")。
- 单网关架构:生图 + 生视频全走火山 ARK,只需一个
ark- 开头的 key。
确认模式(开场判定,贯穿全程)
| 模式 | 触发 | 卡点 |
|---|
| 标准(默认) | 首次使用 / 新方向 / 用户没说 | 选题、双锚定、分镜、成本、基准图,逐步确认 |
| 快速 | "快速来一条""老规矩""不用每步问" | Stage 1-3 合并成一份完整方案一次确认(推荐选题 + 双锚定 + 分镜表),再卡成本,生成阶段只自检不打扰 |
| 托管 | "直接做完给我""全自动""做好叫我" | 只卡成本确认。方案自己定,生成自检自修,交付时汇报所有决策 |
判定顺序:用户显式说法 > 偏好里的 mode > 标准。首次使用某个新方向时,即使偏好是
快速,也建议(不强制)走一次标准模式把口味对齐。
成本卡点(Stage 4)任何模式都不跳过,唯一例外:偏好里设了
auto_approve_under_cny 且本次预估低于该值,则只播报成本不等确认。
硬约束 vs 默认值
硬约束(任何题材、任何模式都不可破):
- 双锚定:视觉锚定(空间一致)+ 叙事锚定(时间承接),缺一不可
- 所有 prompt 全中文(生图 / motion / 口播。Seedream 和 Seedance 是字节自研模型,中文
语义理解显著优于英文;唯一例外是 Seedance CLI 参数关键字
--resolution --ratio 等,
那是模型协议保留字。禁止中英混用)
- 第 K 镜结束状态 = 第 K+1 镜开始状态(物理状态承接;时间跳跃必须用字幕明示)
- 生成物先自检后交付(见 Stage 5/6/7 的自检流程)
默认值(用户明确要求时可改,改时提示后果):
| 默认 | 可改成 | 改动提示 |
|---|
| 3 镜 | 2-5 镜 | 镜头越多,一致性风险越大,成本线性增加 |
| 单镜 5s | 3-15s(常用 5/10) | 台词长度要随 duration 重新校(8-15 字/5s) |
| 9:16 竖屏(生图 1080x1920) | 16:9(生图 1920x1080)等 | 横屏适配 B 站/西瓜,不适配抖音信息流 |
| 人物不出镜(手部最多画外伸入) | 末镜人物出镜 | 跨镜身份一致性易翻车,建议只放最后一镜做"露脸+CTA",可能需多次重试 |
| 音色 = 题材包推荐 preset | 6 个 preset / 方言 / 自定义 | 见 references/voice-presets.md |
工作流总览(9 阶段)
| 阶段 | 动作 | 标准 | 快速 | 托管 |
|---|
| 0. 配置 + 预检 | 检查 key/偏好;新 key 立即双渠道预检 | 仅首次卡 | 同左 | 同左 |
| 1. 方向 + 选题 | 先问方向 → 对标拆解/热门检索 → 提案 | 卡点 | 并入方案卡点 | 不卡 |
| 2. 双锚定 | 叙事锚定 + 视觉锚定;init-project 建项目目录 | 卡点 | ↑(同一次) | 不卡 |
| 3. 分镜脚本 | 口播 + 字幕 + 生图/生视频 prompt + 自检 | 卡点 | ↑(同一次) | 不卡 |
| 3.5 渠道预检 | 预检记录没过才跑(幂等兜底) | 仅失败时卡 | 同左 | 同左 |
| 4. 成本确认 | estimate-cost(带实际模型) | 卡点 | 卡点 | 卡点(授权额度内例外) |
| 5. 基准图 | 生成 + agent 视觉自检 | 给用户看 | 自检过即走 | 自检过即走 |
| 6. 变体图 | 图生图 + 承接自检 | 给用户看 | 自检过即走 | 自检过即走 |
| 7. 视频生成 | gen-video-batch 并发 + 抽帧自检 | 自动 | 自动 | 自动 |
| 8. 拼接 + 交付 | ffmpeg 成片 + 素材包 + 收尾动作 | 自动 | 自动 | 自动 |
Stage 0: 配置 + 预检
python scripts/api_client.py check-config
返回 key 状态 + preferences(用户偏好)+ preflight(渠道预检记录)。
ready:不提配置,直接进 Stage 1。把 preferences 记在心里,后面推断用。
missing / invalid:走配置流程:
"用这个 skill 之前,需要配置一个火山引擎 ARK API key(图片和视频共用一个)。
请粘贴你的火山 ARK key(以 ark- 开头)。
如果还没有:
- 注册火山引擎 https://www.volcengine.com/ 并实名认证
- 进方舟控制台 https://console.volcengine.com/ark
- 「模型管理」里开通两个模型(免费,要手动点):Doubao-Seedream-5.0-Lite(图)和
Doubao-Seedance-1.5-Pro(视频,带原生 AI 配音)
- 「API Key 管理」新建 key,复制 ark-xxx"
收到 key 后:
python scripts/api_client.py save-key "ark-xxx"
python scripts/api_client.py check-video-channel
python scripts/api_client.py check-image-channel
- 两个预检都
available → 告诉用户"配置完成 ✅",进 Stage 1。
- 任一
unavailable → 按返回的 remediation 指引用户去控制台开通/充值,
用户说弄好了就重跑对应预检。好处:用户去开通的等待期可以和 Stage 1-3 的创意阶段并行,
Stage 3.5 会兜底再查一次。
Stage 1: 方向与选题
1.0 先问方向(不预设题材)
按优先级判定,能推断就不问:
- 用户开场已说明方向("做一条阳台种菜的")→ 直接用,不问。
- 用户上传了对标视频/截图 → 从对标推断方向,跟用户确认一句。
- 偏好里有
direction → "上次做的是 [方向],这次还是这个方向吗?"
- 都没有 → 问:"这次打算做哪个方向的选题?" 给参考选项(三农园艺 / 美食妙招 /
家居清洁收纳 / 宠物 / 育儿 / 其他自己说)。环境支持结构化提问工具(如 AskUserQuestion)
时用选项卡问,否则文本列表。
方向确定后加载题材包:
profiles/ 下有对应文件(目前内置 sannong.md 三农园艺、home-hacks.md 家居清洁收纳)→ 读取使用。
- 没有 → 按
profiles/_template.md 现场生成一个迷你题材包(选题公式 / 人群 / 检索词 /
提案约束 / 安全红线 / CTA / 音色推荐),用 30 秒跟用户过一遍确认。用户愿意的话保存为
profiles/<拼音slug>.md,下次复用。
1.1 推断优先,不要问卷
题材包里的"目标人群 / 变现方向"等字段:能从用户开场白、对标素材、偏好里推断的直接写进
方案并标注"(假设)"让用户纠正,推断不出来的才问,一次最多问 3 个问题。
用户有现成选题想法的,跳过提案直接进 Stage 2。
1.2 对标拆解(用户给了对标视频时,优先于盲搜)
python scripts/api_client.py extract-frames --video <对标视频> --output-dir <项目>/frames --mode fps --fps 1
逐帧用视觉能力分析,输出对标拆解报告:镜头结构(几镜/每镜时长/景别)、视觉锚定要素
(场景/容器/视角/光线/色调)、文案公式、可借鉴 vs 必须避开(物料组合不照抄、视觉模板不复制)。
目标产出形态参考 examples/case_gemini_analysis.md。拆解结论直接喂给选题提案和 Stage 2 锚定草案。
1.3 热门检索(没有对标或需要补充时)
不要从记忆里凭空想选题。 先用 web_search 检索近 1-3 个月的平台热门(关键词模板在题材包里),
从检索结果抽取新选题/新角度。同时主动提示:"你最近刷到过想做的同类爆款,可以直接贴给我,
比我搜的更准"(搜索引擎对小红书/抖音的覆盖很有限)。
环境没联网能力时必须明确声明,提案基于训练数据。
1.4 选题提案(标准模式 5 个,快速模式 3 个,互不重复)
按题材包的选题公式输出提案,每个包含:
选题 N:[简短标题]
- 配方/动作:[一句话讲清楚做什么]
- 核心反差点:[为什么会"涨知识"/想收藏,一句话]
- 数据线索:[来自检索/对标的标注来源,如"小红书近期 5w+ 点赞";没有就写"无"]
- 适配变现:[题材包变现方向里的类别]
- 痛点匹配:[解决什么具体痛点]
- 完播率预期:高/中/低 + 一句话理由
提案约束(叠加题材包的"提案硬约束"和"安全红线"):
- 每个选题的核心物料互不重复
- 必须能用 N 个 5 秒特写镜头展示完
- 每个都预想:这个画面 AI 能不能稳定生成?(主体复杂/需要人物表演的不提案)
- 题材包"避让清单"里的老选题 ≤1 个出现(用则标注"经典选题,换角度")
1.5 卡点(按模式)
- 标准:输出提案后停下,"选一个我们继续,或者换一个我没提到的方向。"
- 快速:选 1 个推荐选题(说明为什么)+ 2 个备选,直接继续做完整方案,Stage 3 末尾一次性确认。
- 托管:自选最稳的一个(优先检索/对标有数据支撑的),记录理由,继续。
Stage 2: 双锚定方案(决定质量上限的关键步骤)
选题确认后,先建项目目录(避免多条视频互相覆盖):
python scripts/api_client.py init-project --slug <拼音或英文短名> --title "<选题>" \
--mode <standard|fast|auto> --direction "<方向>" --profile "profiles/<题材包>.md" --topic "<选题一句话>"
后续所有文件写进返回的 project_dir;每个阶段完成时用文件编辑工具更新其中的
project.json(stage / anchors / deliverables 字段)。
必须同时设计两套锚定。做不好任何一边,后面所有镜头都会"飘":缺视觉锚定 → 画面跳变;
缺叙事锚定 → 三张孤立的图,观众看不出是同一件事的不同阶段。
2.1 先建立"小故事"——叙事锚定(顺序很重要,故事先于画面)
把这条视频的"流程故事"完整跑一遍(配方、教程、改造、前后对比……都适用):
问自己 3 个问题:
1. 【开始状态】是什么?(原料/对象什么样、容器空还是满、处于什么阶段)
2. 【完成状态】是什么?(成品什么样、效果的可视化标志是什么)
3. 从开始到完成,必须经过的中间转变是什么?(混合、浸泡、擦拭、组装……)
拆成 N 个连贯节点 = N 个镜头的叙事骨架:开始 → 关键转变(N-2 个)→ 完成/CTA
输出格式:
【叙事锚定:流程小故事】
📖 故事弧线:[一句话,如"3 天前柳枝插水 → 水变黄褐 → 倒出当生根水用"]
镜头 K 状态:[节点名]
- 开始状态:[开机时画面里有什么;K>1 时必须等于上一镜的结束状态]
- 镜头内动作:[5 秒内发生什么]
- 结束状态:[结束时画面留下什么]
设计要点:每镜结束状态用一句话写死,下一镜开始状态用同一句话承接;跨时间(浸泡几天)用
字幕一行明示("3 天后"),但画面物理状态仍然承接(同容器同主体,只是某个属性推进);
禁止上一镜没有的新元素凭空出现、禁止跳步。
2.2 再建立"视觉锚定"
反推一套支撑这个故事的固定要素(N 个镜头全部一样):
【视觉锚定方案】
1. 场景背景:[一句话]
2. 主体容器/操作面:[必须能在叙事的所有状态里都合理出现]
3. 拍摄视角:[45 度俯视近景 / 平视特写 / 正俯视,选一]
4. 光线:[正午散射 / 窗边漫射 / 室内白光,选一]
5. 色调氛围:[与题材调性一致,题材包里有倾向参考]
2.3 硬约束清单(输出方案后逐条自查)
视觉:景别只能近景/特写;画幅与设定一致(默认 9:16);视角/主体/背景/光线 N 镜完全一致;
默认无人物(手部最多画外伸入)。
叙事:状态承接(K 结束 = K+1 开始);组合起来是完整流程;每镜动作有功能性意义(不是摆拍);
形态变化过程可解释;时间跳跃字幕明示。
2.4 卡点(按模式)
- 标准:停下来等用户确认叙事流和视觉锚定,改任何一项都接受(违反 2.3 硬约束的改法要
明确反馈"这会让镜头 K/K+1 衔接断掉,建议改成 XX"),改完重新整理完整方案。
- 快速/托管:自查通过即继续。
Stage 3: 分镜脚本
3.1 分镜表(N 行,"前镜承接状态"列是落实叙事锚定的关键)
| 镜头 | 时长 | 前镜承接状态 | 口播文案 | 屏幕字幕 | 视觉描述(中文) | 生图 Prompt(中文) | 生视频 Motion Prompt(中文) |
|---|
各列要求:
- 前镜承接状态:1-2 句精确描述上一镜结束时画面里有什么。答不清"我从上一镜接到了什么"
就是叙事链断了,回 Stage 2。
- 口播文案:每镜 8-15 字,信息密度高;末镜是 CTA(题材包 CTA 风格库里选)。
⭐ 这段台词会直接变成 Seedance 的 AI 配音,写成能读出来的口语,不要写视觉描述。
音色用题材包推荐的 preset,用户提了偏好才调整(规则见
references/voice-presets.md)。
- 屏幕字幕:≈口播但更精简;时间跳跃必须在这里明示("3 天后"开头)。
- 生图 / Motion Prompt:规范见 3.2/3.3。
3.2 生图 Prompt 规范(全中文)
第 1 镜(基准图)必须完整、自包含、详尽(它定义所有锚定要素 + 故事起点):
[景别和视角,如"特写镜头,45 度俯视,9:16 竖屏构图"]。
[背景]。[主体处于起点状态,含位置和画面占比]。[光线]。[色调氛围]。
[本镜可变元素——此刻发生的动作]。
高画质,真实摄影风格,无文字,无水印,自然光。
第 2+ 镜用"改 / 承 / 锁"三段式(通过 image 字段基于基准图编辑):
把[原可变元素]改成[新可变元素]。 ← 改
关键:状态必须从上一镜自然承接:[保留并自然推进的状态]。 ← 承
以下要素严格保持完全一致,不要改动:[背景/容器/视角/光线/色调逐条列出]。
只改这一处:[唯一要变的元素]。 ← 锁
缺"承"段是状态跳跃的最常见原因。完整范例见 templates/sample_visual_anchor.md。
3.3 Motion Prompt 规范(全中文,只写画面运动)
每镜一段,描述 5 秒内的运动:具体动作(谁在做什么怎么做)+ 物理细节(粉末扬起/液体涟漪/
泡沫)+ 结束状态(= 下一镜开始状态)+ 结尾强调"画面锁定,不推不拉不摇不移。自然光不变,
背景不变。"
不要写:--duration 等 CLI 参数(脚本自动追加)、"配音/旁白"字样(音频指令由
--voiceover-text + preset 自动拼接,见 references/voice-presets.md)。
3.4 自检清单(交给用户前 agent 先过一遍)
任何一条不过,回 Stage 2 调整,不要硬出脚本。
3.5 确认与落盘
- 标准:输出分镜表,提示重点确认"叙事流顺不顺 / 口播是不是想要的表达 / 每镜动作符合预期",
改到用户明确确认。
- 快速:这里是那一次合并确认——完整输出"选题 + 双锚定 + 分镜表",一次等确认。
- 托管:自检过即继续。
确认后落盘到项目目录:prompts/scene-NN.txt(生图)、prompts/scene-NN-motion.txt(运动)、
shots.json(分镜数据,字段:duration_sec / prev_state / voiceover / subtitle / visual_description_cn / image_prompt / motion_prompt / image_file / video_file),
并更新 project.json。
Stage 3.5: 渠道预检(幂等兜底)
Stage 0 的预检记录(check-config 的 preflight 字段)里,本次实际要用的视频模型已是
available → 跳过,不打扰用户。否则:
python scripts/api_client.py check-video-channel --model <实际要用的模型>
不可用时告知用户原始错误 + remediation 指引(控制台开通/重配 key/充值),等用户处理,
或者降级:跳过视频阶段只交付静图 + 分镜表。详见 references/troubleshooting.md。
Stage 4: 成本确认(全模式卡点)
python scripts/api_client.py estimate-cost --shots <N> --duration <D> \
--image-model <实际图片模型> --video-model <实际视频模型>
向用户报告:预估调用次数和金额(脚本会按实际模型单价算,1.0 系列会提示无音频)、预计
耗时(并发后约 1-4 分钟)、自检不合格时可能 +0-2 次重试调用、口播文案将变成配音,要改
现在说。
- 标准/快速:等用户明确说"确认/开始/go"。
- 托管:预估 ≤ 偏好
auto_approve_under_cny → 播报后直接继续;否则同样等确认。
Stage 5: 基准图 + 视觉自检
python scripts/api_client.py gen-base-image \
--prompt-file <项目>/prompts/scene-01.txt \
--output <项目>/images/scene-01.png
默认 size 1080x1920(真 9:16;不要用 1024x1536,那是 2:3),模型不支持该尺寸时
脚本自动回退比例式 9:16(stderr 有提示)。
自检(必须,任何模式):生成后先自己用 Read 看图,逐项检查:
不合格 → 自动重试 1 次(必要时收紧 prompt 的对应描述);连续 2 次不合格 → 带着图和
具体问题找用户对齐(可能是锚定方案问题)。
- 标准:自检通过后给用户看图(展示文件 + 说明路径),等认可再继续——基准图歪了后面全歪。
- 快速/托管:自检通过即继续,交付时一并展示。
Stage 6: 变体图 + 承接自检
python scripts/api_client.py gen-variant-image \
--base-image <项目>/images/scene-01.png \
--edit-prompt-file <项目>/prompts/scene-02.txt \
--output <项目>/images/scene-02.png
为什么基于基准图编辑而不是重新文生图:同样的 prompt 每次文生图都会有偏差(背景色/纹理/
光线),把基准图传 image 字段让模型只改要变的元素,是 N 镜一致性的唯一可靠方法。
自检:每张变体图生成后,把它和基准图(及前一镜)并排看:
不合格只重做那一张(重试规则同 Stage 5)。标准模式自检通过后把 N 张图一起给用户过目。
Stage 7: 视频生成(默认并发)
把分镜数据写成 jobs.json(数组,每镜一项):
[
{"image": "images/scene-01.png", "motion_prompt_file": "prompts/scene-01-motion.txt",
"output": "clips/scene-01.mp4", "voiceover_text": "<该镜口播台词>", "label": "scene-01"}
]
python scripts/api_client.py gen-video-batch --jobs-json <项目>/jobs.json \
--max-workers 3 --voice-preset <题材包推荐的preset>
- batch 级参数(
--duration --voice-preset --model 等)是所有镜的默认值,
个别镜要特殊处理就写进该 job 的字段里覆盖。
- 前台运行,stderr 逐镜打印
[scene-01] status=... 进度,全部完成输出汇总 JSON。
⚠️ 严禁放后台跑完不看输出——API 报错会被静默吞掉,你会等一个根本没启动的任务。
- 个别镜失败不影响其他镜,看汇总里的 error,单独用
gen-video-clip 重做那一镜
(参数同名,见 --help)。
- 音色细节、方言、男声、逃生舱:
references/voice-presets.md。
- 失败诊断:
references/troubleshooting.md。
视频自检(交付前):
- 汇总 JSON 确认每镜
ok: true、时长符合。
- 对每镜跑
extract-frames --mode firstlast,用视觉检查:
- 镜 K 的首帧 ≈ 该镜静图(没跑偏)?
- 镜 K 的尾帧 ≈ 镜 K+1 的首帧(承接成立,拼起来不会跳)?
- 发现问题 → 重生成该镜(标准/快速模式先告知用户;托管模式每镜最多自动重试 1 次,再多
就留到交付时说明)。
Stage 8: 拼接 + 交付
python scripts/api_client.py concat-clips \
--clips <项目>/clips/scene-01.mp4 <项目>/clips/scene-02.mp4 <项目>/clips/scene-03.mp4 \
--output <项目>/final.mp4
python scripts/api_client.py build-storyboard \
--shots-json <项目>/shots.json --output <项目>/storyboard.xlsx
- ffmpeg 没装 → 不阻断:用户照样拿到分段 mp4(各自带配音),给安装指引或让用户剪映手动拼。
- 基于
references/post-editing-guide.md 模板生成一份后期指引 README.md 放进项目目录
(替换占位符:总时长、BGM 标签按题材氛围、字幕提示)。
交付话术要点:final.mp4 可直接发布(配音已嵌入);分段 mp4 供剪映精修;哪一镜不满意只重做
那一镜 + 重拼,不用全部重来。
交付后收尾(智能化的关键一步):
- 把本次选题追加进该题材包的"避让清单"(防下次复用)。
- 更新
project.json 的 stage: "done" 和 deliverables。
- 本次出现了新偏好(方向/人群/音色/模式/画幅)→
save-prefs 存起来,下次开场直接
"沿用上次偏好 X,有变化吗?" 一句话带过。
项目状态与断点续传
- 每条视频独立目录
output/<日期-slug>/,由 init-project 创建,绝不复用上一条的目录。
project.json 是状态档案:stage(当前阶段)/ mode / direction / topic /
anchors(确认过的双锚定)/ shots_file / deliverables。agent 在每个阶段转换时更新它。
- 断点续传:用户说"继续上次的"→ 找最新的
output/*/project.json,读 stage 接着走,
已确认的方案不再重新对齐(比如卡在模型未开通,回来直接从 Stage 3.5 重验)。
- 单镜重做:重生成该镜图(如需)→
gen-video-clip 该镜 → 重跑 concat-clips,
其他镜不动。
与其他 skill 的边界
| 场景 | 归属 |
|---|
| 端到端做 AI 妙招短视频(任意题材) | ✅ 这个 skill |
| 只要分镜脚本不生成图/视频 | 用 Stage 1-3,不进 Stage 5+ |
| 把别人的逐字稿洗成自己的稿 | script-washing |
| 单条图/视频提示词打磨 | prompt-polish |
| 屏幕操作/展示类视频脚本 | screen-tutorial-script / screen-showcase-script |
| 文章转播客口播稿 | frank-podcast-script |
参考文件索引(按需读取,不要默认全读)
profiles/_template.md — 新题材包生成模板;profiles/sannong.md、profiles/home-hacks.md — 内置题材包
references/voice-presets.md — 配音音色详解(Stage 7)
references/troubleshooting.md — 故障排查(出错时)
references/post-editing-guide.md — 后期指引模板(Stage 8)
templates/sample_visual_anchor.md — 双锚定 + prompt 完整范例(Stage 2/3)
examples/case_gemini_analysis.md — 对标拆解报告范例(Stage 1.2)
沙盒 ↔ claude.ai 同步提醒
在沙盒里修改了这个 skill 的话,改动不会自动同步到 claude.ai 已上传的版本:重新 zip 打包成
.skill → Settings → Skills 删旧传新 → 其他端(Claude Code / Kimi)重新加载。