把已经生产出来的逐镜素材按分镜装配成短剧成片:定每镜入出点、镜序、台词完整性、字幕、响度与交付规格,写成 `剧集/<EP>/剪辑单.md` 并渲染出成片。用户说“把这些镜头剪成片”“做成片/装配/套剪”“定入出点”“加字幕”“统一响度”“成片太长/太碎”“导出可继续精修的工程”时使用;不生成新素材,不改剧本、分镜或视频提示词的语义。
npx skills add https://github.com/zenstory-ai/oh-story-dsh --skill short-drama-edit
把 剧集/<EP>/制作成果/ 里的逐镜素材装配成一条成片,取舍写进 剧集/<EP>/剪辑单.md。
每段使用二级标题 ## CUT-...,各自绑定一个 MOTION-... 和一个真实媒体文件。
本阶段是套件里唯一同时看得见成片和创作意图的位置。上游每一份文档描述的都是「这一镜
应该是什么」;只有到这里,才第一次能回答「生成出来的这一段,哪一部分真的能用」。这两件事经常
不一致,而处理这个不一致正是剪辑的工作,不是缺陷。
用 $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、当前分镜和要用的素材。遇到对应问题时只打开一份:
保留未受影响的 CUT-... ID。改一段的入出点不触碰其它段;删一段时说明它承担的信息由哪一段
接住,或明确说明这条信息在成片里不再出现。重新渲染前先更新剪辑单,不要让成片领先于文档。
每个 CUT-... 都绑定真实素材与自洽区间,台词在成片里完整可听,字幕逐字等于剧本原文,
剪辑点没有可听的音床硬切,成片响度落在交付目标上,未采用镜头都写明理由并区分了缺文件与缺质量,
即完成。目标时长与实际时长的差、以及仍然值得再剪一版的地方,写在末尾报告里交给创作者判断。
只有安装、升级或排障时运行 python3 scripts/selftest.py。
Take zenstory-ai/short-drama-edit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
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.