Skip to content
Back to skills

Short Drama

ASecurity

AI 真生成画面的竖版短剧:分镜表→定妆照→首帧→图生视频→配音→拼片配乐,改一镜只重算一镜

  • 262 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 26, 2026
ai-agentsshell

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 26, 2026

npx -y skills add CatCatUncle/openworkbuddy --skill short-drama --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Short Drama?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Short Drama
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/catcatuncle-short-drama/badge)](https://www.skillsdirectory.com/skills/catcatuncle-short-drama)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: short-drama
description: AI 真生成画面的竖版短剧:分镜表→定妆照→首帧→图生视频→配音→拼片配乐,改一镜只重算一镜
---

# AI 短剧技能(一个故事 → 一条片子)

## 适用场景
「做一条 60 秒的短剧」「把这个故事拍出来」。产出 = 一条竖版 mp4(AI 生成画面 + 配音 + 配乐 + 字幕)+ 一份分镜表 JSON。

跟 video-compose 的分工别搞混:那条走「图文成片」——卡片轮播、画面成本为零、信息密度高,适合口播和知识分享;
这条是 AI 真生成画面,每一镜都真花钱。讲道理走那条,讲故事才走这条。

## 开工前先把钱和时间说清楚
一条 12 镜的短剧 = 12 次生图 + 12 次生视频 + 12 次配音。**生视频是里面最贵的,而且按条计费,生失败的那条钱照扣。**所以:

- **分镜表先定下来给用户过目,点头了再开始花钱。**别边想边生——中途改设定,前面生的全作废。
- **超过 6 镜先让用户把额度调上去**:设置 → 智能体 → 执行上限,「最大执行步数」调到 60、「任务最大运行时间」调到 60 分钟;不想守着就把「自动续跑轮数」设成 1~2(每一轮都真计费)。撞上限断在最后一步拼装之前是最亏的断法——图和配音的钱都花完了,片子一秒都没有。
- **重跑不用怕**:参数逐字一样的生图 / 生视频 / 配音会直接复用上一次的产物,一分钱不花。所以改了第 7 镜的台词、重跑整条,真正花钱的只有第 7 镜。确实要换一版不一样的,那一次调用加 `no_cache: true`。

## 前置检查(先做,缺了早说)
1. `run_shell` 跑 `ffmpeg -version`。没装的话报错里会直接写这台机器该敲哪一句装,照着说给用户听。这一步没过就别开始生图——最后拼不起来,钱全白花。
2. 生图、生视频、配音三路渠道都得配。哪一路没配,第一次调用就会直说「去设置 → 模型 → … 填」。缺配音可以降级成「无声 + 大字幕」并说明原因;**缺生视频不能降级**——那是这条技能的全部意义,直说做不了,别拿静止图凑数当短剧交付。
3. 生视频要的是 i2v(图生视频)型号。设置里配的是纯文生型号时,给了 `first_frame` 会在发请求之前就被拦下来——这是好事,别绕开它,让用户去设置里换型号。

## 流程

### 1. 分镜表(唯一不花钱的一步,最该慢慢来)
按 `references/分镜表.schema.json` 写一份 `分镜表.json`(write_file 落盘),然后把镜头清单摊给用户看:几场几镜、每镜多长、总时长、谁说什么。用户点头再往下走。

- 总时长 ≤ 60 秒最稳;一镜 3~6 秒,12 镜上下。
- 开头 3 秒必须是钩子——第一镜的画面和第一句台词就得把人钉住。
- 每个角色的外貌写死一段 `look`,后面所有镜头照抄,一个字都不要改。每镜重新描述一遍,人就会一镜一个样。
- 全片画风写在 `style` 里,每一镜的 prompt 都带上它,否则镜与镜之间画风会飘。

> **分镜表写完就能整张摆到无限画布上。** 画布上放一个「短剧分镜」节点,选中这份表,按「展开场次与镜头」:
> 角色、场次、镜头一次全建出来,每一镜的 `cast` 里点到谁,就从那个角色节点连一条「人物身份」的线过来。
> 这条线不是装饰——**生首帧时的参考图、配音时用谁的音色,都是顺着它找过去的**,没有它这一镜就等于没有角色。
> 所以 `cast` 里写的角色 id 必须在 `characters` 里查得到;查无此人的话展开完会直接点名说是哪几个,
> 别当成小毛病放过去:那几镜会安静地少参考图少音色,要等十二镜都生完、发现同一个人一镜一个样才看得出来。
>
> 字段是这么对上的:`look` → 角色节点的「人物设定」,`ref` → 「参考图」,`voice` → 「音色」;
> 镜头这边 `frame_prompt` → 「首帧提示词」(展开时会自动把全片 `style` 接在后面),`motion_prompt` → 「运镜提示词」。
> 这两格是分开的,因为生首帧和生视频是两枪:生视频只递运镜那一格,画面内容已经在首帧里了,
> 再把首帧提示词递一遍,模型会照着它重画一遍,生出来的片子跟你刚确认过的那张首帧对不上。
>
> **在画布上生出来的东西会自己回到这份分镜表里。** 展开的时候每个节点身上都盖了「我是这份表的哪一镜/哪个角色」,
> 所以画布上按「生成首帧 / 生成视频 / 生成配音」出来的路径会当场写回 `first_frame` / `video` / `audio`,
> 角色节点的定妆照写回 `characters[].ref`。这件事不是为了两个页面看起来一致——
> 分镜表是「改一镜只重算一镜」的依据,它不更新,下次重跑就是把已经买过的十二镜再买一遍。
> 回写失败(表被改名、镜头号对不上、两场撞了同一个镜头号)会跟「已生成」摆在同一条提示里说清楚,
> 不会闷掉;看到那条提示就去把分镜表里的编号理顺,别直接点重跑。

### 2. 角色定妆照(跨镜头长得一样,全靠这一张)
每个角色一次 `generate_image`,`filename` 用 `角色_<名字>.png`,prompt = 那段 `look` + 「正面半身、中性光、纯色背景」。
**出图后给用户看一眼再往下。**定妆照错了,后面十二镜全错——那才是真烧钱。路径回写进分镜表的 `characters[].ref`。

> **在无限画布里做这部戏,这一步也不用手敲。** 角色节点上就有「生成定妆照」(场景节点上是「生成场景图」),
> 跑着的时候按钮锁住写「生成中…」,出了图变成「重生成定妆照」,旁边多一颗眼睛能直接看图。
> 只写了个名字、人物设定还空着的时候它不开枪——一句话按死:只有一个名字,生出来的脸每次都不是同一个人,
> 当参考图没用,那一次生成就是白花的钱。
> 图落盘叫 `角色_<名字>_定妆.png` / `场景_<地名>.png`,写回节点的 `reference` / `image`:
> 「制片进度」的**定妆**那一档和素材台账的「用途」认的就是这两个字段和这个名字,
> 换个字段或者换个名字,等于图生出来了、界面上还是说你没做,台账里还会把它划进「没人用」那一栏——那一栏旁边写着可以删。

### 3. 每镜首帧图
每镜一次 `generate_image`:
- `reference_images` 填这一镜出场角色的定妆照(最多 4 张)。这是角色一致性的唯一手段,光靠文字描述同一个人,跨镜头一定长得不一样。
- `prompt` = 景别 + 场景 + 姿态 + 光线 + 全片画风。角色部分只写「参考图里的女生」这种指代,**别再描述一遍五官**——那会跟参考图打架。
- `filename` 用 `镜头_<镜头号>_首帧.png`,跟分镜表里的 `first_frame` 对上。

> **在无限画布里,这一步的参考图不用手挑。** 连到这一镜上的角色节点、场景节点,
> 生首帧的时候会自动把它们的定妆照 / 场景图当参考图带上(最多 4 张,跟 `generate_image` 的上限一样)。
> 上一镜连过来做连续性的话,它交出来的是**那一镜的首帧图**,不是成片 `.mp4`——
> 服务端只收 png / jpg / webp / gif / bmp,混一个 `.mp4` 进去不是「参考图差一点」,是整枪原地退回、这一镜的首帧根本生不出来。
> 同理,图生视频找不到首帧时不会拿手边第一张图顶上:宁可停下来说「还没有首帧」,也不拿角色定妆照生一条跟这一镜无关的片子。

多镜可以放在同一轮里一起发,系统默认同时跑 2 条;**每条 filename 必须不一样**,同名就是互相覆盖。

### 4. 图生视频
每镜一次 `generate_video`,`first_frame` 给第 3 步那张图,`prompt` **只写动作和运镜**(「她缓缓抬头,镜头轻微推进」)。
画面内容已经在首帧里了,再描述一遍只会让模型改画面。转场镜头(从这张变到那张)才同时给 `last_frame`。

### 5. 配音
每句台词一次 `text_to_speech`,`filename` 用 `配音_<镜头号>.mp3`,`voice` 用分镜表里给这个角色定的音色——同一个角色全程一个音色,别让它中途换人。

> **在无限画布里,音色写在角色节点上。** 角色节点的「音色」栏填一次(`alloy` / `nova` / `Cherry` 之类,
> 具体有哪些看你在 设置 → 模型 → 语音合成 接的是哪家),这个角色的每一句台词都用它。
> 镜头那边不用重填,连一条线过去就行;一镜里连着好几个角色的时候,在镜头的「说话的角色」栏点个名
> (写角色名或分镜表里的角色 id 都认)。
>
> **连着两个音色不一样的角色、又没点名的镜头,画布不会替你挑一个。** 它停下来说清楚,并把那几镜标出来让你点过去。
> 这不是小题大做:挑错了生出来的声音还是好声音,只是不是这个人的——接口 200、文件落盘、进度条全绿,
> 要等你把成片放给人看,才听出来爷爷和小孙女是一个嗓子。那时候这几条配音已经花过钱了。
> 「一键补齐配音」也照这个来:说得清的照跑,说不清的摘出来单独告诉你,不会闷头把整批都做成一个人。

### 6. 量时长、对齐
`ffprobe -v error -show_entries format=duration -of csv=p=0 配音_S1-01.mp3` 逐条量,写回分镜表的 `duration`。
**以配音时长为准**:视频短了定格补齐,长了 `-t` 截掉,别让话说一半画面先没了。

### 7. 拼装

> **在无限画布里做这部戏,这一步不用手敲。** 画布的「制片进度」条上有「合成成片」:
> 它先把镜头顺序、每一镜的真实时长和画幅摆给你看,确认了才跑,跑的就是下面这几条命令
> (代码在 `drama-compose.js`,不是模型现编的)。缺 ffmpeg、镜头视频不在盘上、
> 本机 ffmpeg 没带 libass 烧不了字幕、没带 sidechaincompress 做不了「说话时压低配乐」——
> 这些都在**开跑前**说,不会等全拼完才报错。配乐也在那儿:画布上有「配乐」声音节点就自动
> 多一个「垫上配乐」的勾,不想要就取消勾。
> 下面这几条是给「不在画布里」的场合留的底稿。

- 单镜合成(画面 + 配音):
  `ffmpeg -y -i 镜头_S1-01.mp4 -i 配音_S1-01.mp3 -c:v copy -c:a aac -shortest 片段_S1-01.mp4`
- 合并:写 `list.txt`(每行一个 `file '片段_S1-01.mp4'`)后
  `ffmpeg -y -f concat -safe 0 -i list.txt -c copy 成片素材/拼接.mp4`
  (有配乐的话,`成片.mp4` 这个名字留给垫完配乐那一版——下游认的是它)
- 配乐:把音乐垫到整条片子底下。**一条命令混完,别分两步**:
  ```
  ffmpeg -y -i 成片素材/拼接.mp4 -stream_loop -1 -i 配乐.mp3 -filter_complex \
    "[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,asplit=2[v0][key];\
     [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5,afade=t=in:st=0:d=1.5,afade=t=out:st=<片长-2.5>:d=2.5[bg];\
     [bg][key]sidechaincompress=threshold=0.05:ratio=8:attack=20:release=400[bgd];\
     [v0]volume=2[v2];[v2][bgd]amix=inputs=2:duration=first:dropout_transition=0[mx];\
     [mx]alimiter=limit=0.95:level=0[a]" \
    -map 0:v:0 -map "[a]" -c:v copy -c:a aac -shortest 成片.mp4
  ```
  四个坑,每一个错了都**听不出是哪一步错的**:
  - `amix` 默认 `normalize=1`,两路各除以 2 —— 不先给人声 `volume=2`、给音乐把增益乘回来,
    整条片子的台词平白小一半,听感只是「有点闷」,命令、退出码、文件大小全是对的。
  - 音乐比片子短是常态(成品曲 60 秒,片子 3 分钟),短了才加 `-stream_loop -1`,
    靠 `duration=first` 在画面结束的地方收住;**音乐比片子长的时候千万别 loop**,
    也别让它把片尾拉出几秒黑屏。
  - `sidechaincompress`(说话时音乐自动压低)和 `alimiter` 不是每台 ffmpeg 都有,
    `ffmpeg -filters` 先查,没有就退回固定音量垫着,别让整条片子挂在最后一条命令上。
    有 `alimiter` 必须写 `level=0`,否则它会把整条片子拉到 0dB,连没配乐的段落一起改。
  - **「配乐」和「配音」是两回事**:画布上声音节点的「素材用途」默认是「对白/音乐」,
    那个不算配乐;写成「配乐 / 背景音 / 主题曲」才算。认错了的症状是
    「片子从头到尾有人在念第三镜的台词」。
- 字幕:按第 6 步的时长累加生成 `字幕.srt`,烧进去时不能再 `-c copy`:
  `ffmpeg -y -i 成片.mp4 -vf "subtitles=字幕.srt:force_style='FontSize=18,Alignment=2,MarginV=60'" -c:a copy 成片_带字幕.mp4`
  这条要求 ffmpeg 带 libass(`ffmpeg -filters | grep subtitles` 查得到才有)。没有就先别跑,
  `字幕.srt` 照样交付——导进剪映/达芬奇是一行菜单的事,比在这儿卡住强。

### 8. 交付
成片_带字幕.mp4 + 封面(第一镜首帧)+ 分镜表.json + 发布文案(标题 / 简介 / 标签)。
产物路径全部回写进分镜表——它是下次改一镜重跑的依据。

## 改一镜怎么办
1. 只改分镜表里那一镜的字段(prompt / 台词 / 音色),别动别的。
2. 从第 3 步重跑整条:其余镜头参数逐字未变,直接复用上次的产物,不花钱;只有改过的那一镜真的重生成。
3. 第 7 步的拼装要重来一遍(`-c copy` 很快,不花模型钱)。

## 硬约束
- **分镜表是唯一真源。**每一镜的提示词、产物文件名、时长都写在里面。临时在脑子里改个 prompt 不回写,下次就对不上、缓存也命不中,等于白花一次钱。
  画布那条路已经替你回写了:产物路径(首帧 / 视频 / 配音 / 定妆照),以及在检查面板里改的
  提示词 / 运镜 / 台词 / 说话人 / 景别 / 时长 / 角色设定 / 音色——改完离开输入框就落盘,回不去会当场红一条。
  连线也一样:在画布上给一镜多连一个角色、或者拆掉一根,分镜表里那一镜的 `cast` 当场跟着改
  (cast 决定重跑这一镜时取谁的定妆照当参考图——少一个人当场换一张脸,多一个人两张脸糊一块儿)。
  角色按展开时盖的戳认人,所以在画布上给角色改名不影响回表;把角色线全拆光也照样回(空镜是合法的)。
  只有一件事它不替你做:**在画布上改镜头号**(编号是定位用的钥匙,改了那个节点就跟分镜表脱钩、
  内容和 cast 都不再回表,会有一条提示告诉你——要改编号请直接改分镜表)。
  还有一条:画布上那段「首帧提示词」是 frame_prompt 接上全片画风拼出来的,回写时会把画风那段剥掉。
  你要是把画风那段也改了,剥不掉,整段写回去,下次展开会在后面再接一遍分镜表里的画风——
  真要换全片画风,改分镜表的 `style`。
- 中间产物(定妆照、首帧、分镜视频、配音、片段)全部留在工作空间,别删——「改一镜只重算那一镜」靠的就是它们还在。
- 一条 ffmpeg 命令只做一件事。失败要把 stderr 的关键行读出来说人话,不要吞。
- 不许拿静止图加推拉摇假装 AI 短剧交付。做不到就说清楚是哪一路渠道没配、哪个型号不对。
- 画面里不加任何 AI 水印。

Files in this skill

  • references/分镜表.schema.json5 KB
  • skill.md15.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.