mcpbeat Sign in

Short Drama Edit Agent Skill

把已经生产出来的逐镜素材按分镜装配成短剧成片:定每镜入出点、镜序、台词完整性、字幕、响度与交付规格,写成 `剧集/<EP>/剪辑单.md` 并渲染出成片。用户说“把这些镜头剪成片”“做成片/装配/套剪”“定入出点”“加字幕”“统一响度”“成片太长/太碎”“导出可继续精修的工程”时使用;不生成新素材,不改剧本、分镜或视频提示词的语义。

28k tokens
context cost
the whole folder, loaded on every use
19
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
336
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/zenstory-ai/oh-story-dsh --skill short-drama-edit

What comes with it

102 603 bytes besides the instruction
agents/openai.yaml
assets/remotion/README.md
assets/remotion/package.json
assets/remotion/remotion.config.ts
assets/remotion/src/Root.tsx
assets/remotion/src/Subtitles.tsx
assets/remotion/src/font.ts
assets/remotion/src/index.ts
assets/remotion/src/schema.ts
assets/remotion/tsconfig.json
assets/剪辑单.md
references/cut-craft.md
references/delivery-verify.md
references/generated-footage.md
references/sound-and-subtitles.md
references/stage-contract.md
scripts/edit_tool.py
scripts/selftest.py

The instruction itself

1 sections, as written by the author

短剧剪辑与成片

剧集/<EP>/制作成果/ 里的逐镜素材装配成一条成片,取舍写进 剧集/<EP>/剪辑单.md

每段使用二级标题 ## CUT-...,各自绑定一个 MOTION-... 和一个真实媒体文件。

本阶段是套件里唯一同时看得见成片创作意图的位置。上游每一份文档描述的都是「这一镜

应该是什么」;只有到这里,才第一次能回答「生成出来的这一段,哪一部分真的能用」。这两件事经常

不一致,而处理这个不一致正是剪辑的工作,不是缺陷。

Quick Start

用 $short-drama-edit 把 EP001 已生产的镜头剪成成片

入口

进入条件是素材已经存在且可读剧集/<EP>/制作成果/ 里有本次要用的视频文件。

提示词写完、job 确认过、adapter 返回成功,都不等于素材可用;本阶段只认当前能打开的文件字节。

素材不全时不要等齐。已有素材能构成一段连续可看的内容就可以先剪,把缺口写进「未采用镜头」并

说明它缺的是文件还是质量。剪一版看得见的东西,比拿着完整清单空等更能暴露上游问题。

剧集/<EP>/分镜.md视频提示词.md 是镜序和职责的来源。剪辑可以取舍它们,不能改写

它们:删一镜、缩一镜、换顺序都属于本阶段;改台词、改镜头职责、改起终状态要回上游发修订请求。

渲染与测量需要 ffmpeg / ffprobe 在 PATH 上。没有时 edit_tool.py 直接失败并说明,

不用别的手段近似,也不把「没测」写成「通过」。

工作流

  • 逐段看完整素材,先标可用带,再谈剪辑。 每个文件从头到尾看一遍,写下它实际能用的时间

区间,以及区间之外发生了什么(起势静止、结尾漂移、发白、动作回弹、多余的重复表演)。

这一步的产出是事实,不是决定。做法见 生成素材的可用带。

  • 有台词的镜先按发声定边界。 台词完整性优先于画面取舍:先确定这句话从哪一帧开始出声、

哪一帧收尾,再在这个约束内选画面入出点。切在字中间是结构缺陷,不是节奏选择。

  • 在可用带内选叙事入出点。 入点取动作已经在进行中的那一帧,出点取信息完成之后、缺陷

开始之前。逐段写清入点理由和出点理由。做法见 入出点与镜序。

  • 排镜序并检查相邻关系。 相邻两段不同时具备同景别、同机位、同运动方向;重复承担同一

信息的段落删掉一段,而不是两段各留一半。

  • 对一遍相邻段的画面。 逐镜生成的素材会漂移:同一个人、同一张桌子的两条,

回来可能差一档曝光、半步白平衡。差得看得出来时,在那一段写一行 画面

做法见 接镜与色彩一致性。

  • 处理声音接缝与响度。 逐镜生成的素材各自带着自己的环境声或音乐,直接拼接会在每个剪辑

点留下音床硬切。做法见 声音、字幕与音乐。

  • 写字幕。 字幕的每一个字都取自 剧本.md 的台词原文,不取自转写结果;标点可按字幕惯例调整,

字不能改。转写只用来定位时间。

  • 写出 剪辑单.md,再渲染。 先有文档后有成片:文档是可审查、可修订、可复现的那一份,

成片是它的产物。

  • 按可测项验收成片,再交付。 见 交付与验收。

剪辑单要求

  • 正文开头写交付规格:成片目标时长画幅与帧率交付响度字幕。目标时长是意图,

实际时长可以不等于它;差多少、为什么,写在末尾报告里,不靠删内容硬凑。

  • 每段一个 ## CUT-<EP>-<序号> · <中文名称>,块内逐行写:
  • - 来源:<MOTION-...> · <项目相对路径>——MOTION-... 必须是 视频提示词.md 里真实存在

的条目,路径必须是当前可读的文件。

  • - 入点:<秒> / - 出点:<秒> / - 时长:<秒>——三者必须自洽,出点 - 入点 == 时长

全部用秒,保留两位小数,不写时间码,不写帧号。

  • - 取舍:入点=<理由>;出点=<理由>——理由写画面上发生了什么,不写「节奏需要」。

这一行是本阶段唯一的创作记录;它解释的是为什么丢掉了没被选中的那些帧。

  • - 声音:<本段声音怎么处理>——保留原声、压低、静音、交叉淡入、接住音乐落点,逐段说清。
  • - 画面:<接镜校正>- 画面:无——只在这一段与相邻段明显对不上时写,

格式是「亮度 <数>」「饱和 <数>」「色温 <数>」三项的任意组合,用 分隔。

详见 接镜与色彩一致性。

  • - 字幕:<逐字台词原文>- 字幕:无。本段有多句台词时改用编号写法,

每句自带时间:- 字幕 1:0.20-1.50 就是什么- 字幕 2:2.30-4.30 就是少了点东西……

编号从 1 连续,时间不得重叠。一镜不等于一句——一次三个来回的对话是一个过肩镜头,

只写一条字幕会让另外两句在成片上无声地消失。

  • 素材里没有被采用的镜头,在正文开头写一行 - 未采用镜头:<MOTION-...>(理由:……)

多项用 连接。理由区分两类:文件缺失(还没生产 / 生产失败)和质量不可用

(生成结果不能用)。两者在文档里长得一样,但一个要回生产、一个要回上游改提示词。

  • 同一个 MOTION-... 可以拆成多个 CUT-...(同一段素材的两处分别使用),也可以整段不用。

不能凭空出现没有素材来源的 CUT-...

  • 一段素材被用两次时,两个 CUT-... 的区间不得重叠:同一批帧在成片里出现两次是重复镜头,

不是复用。确需重复出现(闪回、强调)时写明它是有意重复,并说明第二次为什么仍然成立。

边界

  • 不生成新素材。 需要补拍、重出、换参考图,回 $short-drama-produce;需要改提示词,

$short-drama-video-prompts$short-drama-image-prompts

  • 不改上游语义。 剪辑单可以让某句台词不出现在成片里(整镜未采用),不能改这句台词是什么。

发现剧本层面的问题就点名报告,交回 $short-drama-write

  • 不做解说旁白。 短剧成片靠人物对白和画面推进,不加第三人称叙述音轨。需要解说式成片是

另一种产品形态,不在本套件的目标里。

  • 不把技术成功写成质量结论。 渲染完成、时长对上、文件存在,都不是「这条片子能看」。

成片质量的判断交给 $short-drama-review,或交给创作者本人。

  • 不替创作者决定要不要再剪一版。 报告当前成片的可测事实和仍然存在的取舍选项,让创作者选。

命令

命令由 edit_tool.py 提供:

python3 <本技能目录>/scripts/edit_tool.py check <剧集/EP001> --project-root <project>
python3 <本技能目录>/scripts/edit_tool.py render <剧集/EP001> --project-root <project> [--no-subtitles] [--subtitles ffmpeg|remotion] [--remotion-concurrency N]
python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-root <project>

check 只核对不渲染:素材是否比剪辑单新(重出之后字幕时间必须重测)、区间自洽、MOTION-... 解析、文件存在、区间不越过素材时长、

同源区间不重叠、字幕文字能在 剧本.md 里找到。其中「区间不越过素材时长」需要 ffprobe

没有时这一项报「未测」并说明原因,不静默跳过。render 按剪辑单切段、拼接、烧字幕、统一响度,

输出 剧集/<EP>/制作成果/成片/verify 只测量已经渲染出来的成片并回报数字,不改文件、

不给质量结论。

字幕默认由 ffmpeg 烧录,零依赖,长片也是秒级。--subtitles remotion 换成一条排版可调的

路线,代价是装一次 Node 依赖,而且叠层要逐帧过无头浏览器渲整部成片——慢且吃内存,

并发默认压在 2(--remotion-concurrency 可调,调高前先量本机)。取舍见

声音、字幕与音乐,装法见

Remotion 字幕叠层。

render 会保留每段切好的中间文件。它们是下一轮微调的输入,也是「这一刀到底切在哪」的证据;

不要在报告里用「重新渲染一次就好」代替给出这些文件。

按需知识

默认只读本 SKILL、当前分镜和要用的素材。遇到对应问题时只打开一份:

  • 阶段边界与规则分级:阶段契约
  • 可用带、生成缺陷与逐镜取舍:生成素材的可用带
  • 入出点、镜序与节奏:入出点与镜序
  • 声音接缝、字幕与音乐落点:声音、字幕与音乐
  • 成片可测项与验收:交付与验收
  • 剪辑单成稿样例:剪辑单样例
  • 可选的 Remotion 字幕排版:Remotion 字幕叠层

修订

保留未受影响的 CUT-... ID。改一段的入出点不触碰其它段;删一段时说明它承担的信息由哪一段

接住,或明确说明这条信息在成片里不再出现。重新渲染前先更新剪辑单,不要让成片领先于文档。

完成

每个 CUT-... 都绑定真实素材与自洽区间,台词在成片里完整可听,字幕逐字等于剧本原文,

剪辑点没有可听的音床硬切,成片响度落在交付目标上,未采用镜头都写明理由并区分了缺文件与缺质量,

即完成。目标时长与实际时长的差、以及仍然值得再剪一版的地方,写在末尾报告里交给创作者判断。

安装维护

只有安装、升级或排障时运行 python3 scripts/selftest.py

How to use it

Copy the folder

Take zenstory-ai/short-drama-edit from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.