Install
openclaw skills install @worldwonderer/short-drama-edit把逐镜生成的素材按分镜装配成有节奏、台词完整、可交付的短剧成片
openclaw skills install @worldwonderer/short-drama-edit把 剧集/<EP>/制作成果/ 里的逐镜素材装配成一条成片,取舍写进 剧集/<EP>/剪辑单.md。
每段使用二级标题 ## CUT-...,各自绑定一个来源 ID 和一个真实媒体文件:视频段是 MOTION-...,
静态漫剧的关键帧段是 SHOT-... 或 IMG-...。
根据实际素材选择可用片段,按剧本与分镜核对叙事。素材与意图不一致时,记录取舍和缺口。
用 $short-drama-edit 把 EP001 已生产的镜头剪成成片
进入条件是素材已经存在且可读:剧集/<EP>/制作成果/ 里有本次要用的视频文件;
静态漫剧是已接受的关键帧和配音文件。
提示词写完、job 确认过、adapter 返回成功,都不等于素材可用;本阶段只认当前能打开的文件字节。
素材不全时可以先剪已有连续段落;用户要求完整成片时,将这一版标为片段并列出缺口。 在「未采用镜头」说明缺文件、质量不可用或叙事取舍。
剧集/<EP>/分镜.md 与 视频提示词.md 是镜序和职责的来源。剪辑可以取舍它们,不能改写
它们:删一镜、缩一镜、换顺序都属于本阶段;改台词、改镜头职责、改起终状态要回上游发修订请求。
内置渲染直接拼接编码后的分段,输入素材的画幅与帧率须一致。check 在可探测媒体时核对;
不同规格先通过外部工具按交付要求统一,保留构图并记录裁切或留边,再更新剪辑单的路径与时间。
渲染与测量需要 ffmpeg / ffprobe 在 PATH 上。没有时 edit_tool.py 直接失败并说明,
不用别的手段近似,也不把「没测」写成「通过」。
画面。做法见 接镜与色彩一致性。剧本.md 的台词原文,不取自转写结果;
标点照抄剧本,字不能改。转写只用来定位时间。画面留白给后期的 [画面文字] 写成 画面文字 行,
需要落在画面文字出现时的提示音写成 音效 行。剪辑单.md,再渲染。 先有文档后有成片:文档是可审查、可修订、可复现的那一份,
成片是它的产物。正文开头写交付规格:成片目标时长、画幅与帧率、交付响度、字幕。目标时长是意图,
实际时长与目标的差写在报告里。用户明确要求固定时长时,应满足要求或报告缺少的素材。
每段一个 ## CUT-<EP>-<序号> · <中文名称>,块内逐行写:
- 来源:<MOTION-...> · <项目相对路径>——MOTION-... 必须是 视频提示词.md 里真实存在
的条目,路径必须是当前可读的文件。静帧段写 - 来源:<SHOT-...> · <图片路径>(分镜.md 的镜头)
或 <IMG-...> · <图片路径>(图片提示词.md 的条目),图片为 png / jpg / jpeg / webp;
入点写 0.00,出点等于时长,至少 0.50 秒。静帧按交付规格的画幅与帧率铺满出画,
有静帧时交付规格必须写 画幅与帧率。
- 入点:<秒> / - 出点:<秒> / - 时长:<秒>——三者必须自洽,出点 - 入点 == 时长。
全部用秒,保留两位小数,不写时间码,不写帧号。
- 取舍:入点=<理由>;出点=<理由>——理由写画面上发生了什么,不写「节奏需要」。
理由应能对应实际素材与本镜叙事需要。
- 声音:<本段声音怎么处理>——记录保留原声或外部处理。此行不驱动内置 render 的混音。
- 画面:<接镜校正>、- 画面:无 或 - 画面:不校——校正是「亮度 <数>」「饱和 <数>」「色温 <数>」
三项的任意组合,用 ; 分隔,写了就替代这一段的自动接镜;无 表示不另写校正;不校 表示连自动接镜
也不做。详见 接镜与色彩一致性。
- 字幕:<逐字台词原文> 或 - 字幕:无。本段有多句台词时改用编号写法,
每句自带时间:- 字幕 1:0.20-1.50 请进、- 字幕 2:2.30-4.30 门没有锁。
编号从 1 连续,时间相对本 CUT 入点,且不得重叠;止可以超过本段时长(跨切点见
静帧段)。句末可加 (重点:<词>|<词>),
这些词须出现在本句里,烧录时标黄。字色按 剧本.md 里这句的来源决定:对白白色,
[VO] 系统: 青色,其他 [VO] 浅青,剪辑单里不另写。
- 画面文字 N:<起>-<止> <样式> <项>|<项>…——视频模型写不对字,系统面板、倒计时、屏幕上的
粉丝数在画面里留白,由 render 叠上去。每一项都要能在 剧本.md 的 [画面文字] 行里找到。
单条可不编号;编号与时间规则同字幕。三种面板共用画面顶部,角标在右上角,同一位置不得重叠。
| 样式 | 各项的位置 |
|---|---|
卡片 | 每项一行:第一个词是名称,最后一个词是数值,中间的词是单位(主号 粉丝 2|小号 1) |
系统面板 | 第一项是状态行,逐字打出;其余是奖励行 |
任务面板 | 标题、目标(逐字打出);其后写成 <数> / <数> 的一项是进度,其余是奖励标签 |
角标 | 各项连成一行标签 |
奖励可在项末写稀有度 (传说) (史诗) (稀有),不写按稀有;稀有度不是文字,不参与核对。
任务面板 和 角标 末尾可加 (倒计时:<秒>),显示成 4天 23:59:58 并逐秒走动;
(倒计时:接续) 接着成片里上一个倒计时走。相邻两段写同一条角标且首尾相接时,
成片里是同一个角标,切镜时不重新入场。面板自带的 【系统提示】 【新任务】 进度 属于样式,不写进剪辑单。
- 音效 N:<起>-<止> <项目相对路径>(起点:<秒>;增益:<dB>)——从声音文件的起点(默认开头)
取 止 - 起 秒,混进本段该时刻的原声;括号里两项都可省、顺序不限,增益范围 -40 到 +6。单条可不编号。
- 运镜:<固定|推近 n%|推近 r%/秒|…>——只写在静帧段上,方向另有拉远、左移、右移、上移、下移;
n 为 1–30 的幅度,r 为 0.1–10 的速度(可带小数),不写按固定。两种写法怎么动、怎么接见
静帧段。
- 配音 N:<起> <项目相对路径>(起点:<秒>;增益:<dB>)——从本段 起 秒开始,把声音文件从起点
放到结尾;括号规则同音效。起 可以为负,声音可以跨过切点;跨切点、核对与后期配音的规则见
静帧段。
- 环境声:[<起>] <项目相对路径>(起点:<秒>;增益:<dB>) 或 - 环境声:[<起>] 无——从本段 起 秒
(默认 0,可为负)起循环铺一层环境声,直到下一条 环境声;无 让它停下。见
静帧段。
素材里没有被采用的镜头,在正文开头写一行 - 未采用镜头:<MOTION-...>(理由:……),
多项用 ; 连接。理由区分两类:文件缺失(还没生产 / 生产失败)和质量不可用
(生成结果不能用),也可说明叙事取舍。补素材前先判断需要重出还是修订上游。
有静帧段时也可写 SHOT-...;哪些镜头要有下落见 静帧段。
同一个 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 只核对不渲染:素材是否比剪辑单新(重出之后字幕、画面文字与音效时间必须重测)、区间自洽、
来源 ID 解析与每一镜的下落、文件存在、区间不越过素材时长、同源区间不重叠、字幕文字能在 剧本.md 里找到、
画面文字能在 [画面文字] 行里找到、「接续」之前确有倒计时、音效文件存在且落在本段内、
字幕与配音在整条片里不越过结尾、互不重叠。
其中「区间不越过素材时长」需要 ffprobe,配音的两项需要 ffmpeg;缺哪个就报哪几项「未测」并说明原因,
不静默跳过。
render 按剪辑单切段、静帧按运镜出画、同场景自动接镜、拼接、混入音效与配音、烧字幕与画面文字、统一响度,
输出 剧集/<EP>/制作成果/成片/。
verify 只测量已经渲染出来的成片并回报数字,另列出画面文字、音效与配音在成片里的起止秒、切点亮度变化和疑似坏帧,
供抽帧和回听;不改文件、不给质量结论。
字幕默认由带 libass 的 ffmpeg 烧录。--subtitles remotion 换成一条排版可调的
路线,代价是装一次 Node 依赖,而且叠层要逐帧过无头浏览器渲整部成片——慢且吃内存,
并发默认压在 2(--remotion-concurrency 可调,调高前先量本机)。画面文字只有 Remotion 一条路线:
剪辑单里有画面文字时,无论字幕走哪条路线 render 都需要它,没装就报错并给出安装命令;
走 ffmpeg 的字幕压在画面文字之上。取舍见 声音、字幕与音乐,
装法见 Remotion 叠层。
render 保留切好的中间文件。它只切段、静帧出画与运镜、硬拼接、混入 音效 与 配音 行、统一字幕样式、画面文字、
接镜校正(写明的与同场景自动的)和整片响度,不执行 声音 行中的混音方案,也不按交付规格自动缩放或改帧率。
需要混音、逐镜字幕避让、转场或画幅转换时用外部工具完成并记录,验收实际交付文件。
先读本 SKILL、当前分镜、视频提示词和素材;有字幕时读取剧本原文。按需要打开参考资料:
保留未受影响的 CUT-... ID。改一段的入出点不触碰其它段;删一段时说明它承担的信息由哪一段
接住,或明确说明这条信息在成片里不再出现。重新渲染前先更新剪辑单,不要让成片领先于文档。
每个 CUT-... 都绑定真实素材与自洽区间,台词在成片里完整可听,字幕逐字等于剧本原文,
剪辑点没有可听的音床硬切,成片响度落在交付目标上,未采用镜头都写明理由并区分了缺文件与缺质量,
即完成。目标时长与实际时长的差、以及仍然值得再剪一版的地方,写在末尾报告里交给创作者判断。
只有安装、升级或排障时运行 python3 scripts/selftest.py。