Install any skill in seconds. Free to start, no credit card required.
Get Started Free →把长视频按 Agent 选择的原片区间剪成短片。作为两阶段创作流程中的剪辑环节,读取 clip_plan.json 与源视频, 输出 edited_source.mp4;随后 Agent 按输出时间线写 narration.json。单独调用且未传 --no-narration-map 时, 仍支持旧版单阶段路径,把原片时间的 narration.json 映射为 narration_mapped.json。 触发词:视频剪辑、剪辑式解说、video cut、clip plan、拼剪。
.claude/skills/worldwonderer-video-cut/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -51% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 613% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -48% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -20% | 0% |
本技能只执行 Agent 已经做出的剪辑决定:
clip_plan.json,写出带 clip_id、原片/输出时间与时长的 clip_plan_validated.json。edited_source.mp4。narration.json。narration_mapped.json。相同输入会得到相同输出。缓存仅表示:当 edited_source.mp4 新于 clip_plan.json 时复用成片。
work_dir/clip_plan.json 可以是数组,也可以是 {"clips": [...]}:
json{"start": 12.0, "end": 28.5, "reason": "b02 | turn | power: A→B | POV=女主 | 保留反应 | 入点=问题落下 | 出点=沉默结束"}
start / end 是原片秒数;也接受 source_start / source_end 或 in / out。target_duration,例如 "10m"。source_id。speech_boundary_anchors.json 与 ASR 时间段由理解阶段提供;Agent 先写大致区间,工具会尝试吸附并把仍在讲话区间内的入/出点作为 blocker 返回。work_dir/narration.json 只在旧版单阶段路径中可选读取;该路径要求旁白使用原片时间。若允许重复或重叠片段,旁白可带 source_clip_id 消歧。
工具不会替 Agent 做创作选择。写片段前先完成本节的剪辑意图检查,并让每个区间映射到 recap_story_plan.json 的一个 beat。
使用现有自由文本 reason 保存简洁决定:
textbeat_id | function | change | POV | preferred moment | 入点 reason | 出点 reason
不要因为“事件重要”就保留整段;要保留最能让 change 成立的具体表演、反应、动作或揭示。理解与情绪允许时晚进早出,同时保证台词、动作和技术边界完整。
下面的 scripts/... 均相对于本技能目录。若执行器从仓库根目录启动,请给脚本路径加上本技能的绝对目录。脚本不从其他技能目录读取文件;外部输入仅限命令显式传入的视频、参数与 work_dir 产物。
bashpython3 scripts/cut.py <video> --work-dir <work_dir> \ [--target-duration 10m] [--clip-padding 0] [--allow-overlap]
clip_plan_validated.json:标准化片段,包含 clip_id、source_start/end、output_start/end 与 duration。edited_source.mp4:按计划拼接后的短视频。narration_mapped.json:仅旧版单阶段路径生成;编排流程使用 --no-narration-map,不会生成该文件。编排流程下游把 edited_source.mp4 当作视频,把 Agent 按输出时间写的 narration.json 当作旁白。
clip_plan.json 与 narration.json 都使用原片时间;本工具负责原片 → 输出映射。narration.json 直接使用剪后输出时间,不再映射。--allow-overlap 开启后,旁白应填写 source_clip_id。unsafe_clip_sentence_boundary 并阻断。SCENE_CUT_SNAP 默认开启:先按画面把 source start 向后、source end 向前吸附到附近硬切,随后句末吸附再做最终修正,避免视觉修正重新制造半句原声。默认范围为 SCENE_CUT_SNAP_MARGIN=0.5 秒,检测阈值为 SCENE_CUT_DETECT_THRESHOLD=0.4。clamped_beats 永久阻断,--allow-sparse-cut 也不能绕过旁白句子完整性。clip_plan.json。| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 21,918 | 4,391 | -80% | 1 | 1 | 0% | 4,145 | 2,027 | -51% | 0 | 0 | — |
case-02 | fail→pass | 5,612 | 7,222 | +29% | 1 | 1 | 0% | 269 | 1,917 | +613% | 0 | 0 | — |
case-03 | fail→pass | 20,546 | 6,652 | -68% | 1 | 1 | 0% | 3,739 | 1,951 | -48% | 0 | 0 | — |
case-04 | pass→pass | 9,432 | 5,019 | -47% | 1 | 1 | 0% | 1,542 | 2,047 | +33% | 0 | 0 | — |
case-05 | fail→pass | 13,059 | 5,524 | -58% | 1 | 1 | 0% | 2,034 | 2,188 | +8% | 0 | 0 | — |
case-06 | fail→pass | 15,208 | 5,703 | -63% | 1 | 1 | 0% | 2,816 | 2,255 | -20% | 0 | 0 | — |
case-07 | pass→pass | 10,071 | 5,015 | -50% | 1 | 1 | 0% | 1,574 | 2,066 | +31% | 0 | 0 | — |
case-08 | fail→pass | 9,260 | 2,384 | -74% | 1 | 1 | 0% | 1,447 | 1,660 | +15% | 0 | 0 | — |
case-09 | fail→pass | 11,211 | 2,012 | -82% | 1 | 1 | 0% | 1,617 | 1,622 | +0% | 0 | 0 | — |
case-10 | fail→pass | 10,883 | 2,842 | -74% | 1 | 1 | 0% | 1,696 | 1,736 | +2% | 0 | 0 | — |
case-11 | pass→pass | 8,050 | 2,248 | -72% | 1 | 1 | 0% | 1,216 | 1,643 | +35% | 0 | 0 | — |
case-12 | fail→pass | 15,947 | 3,672 | -77% | 1 | 1 | 0% | 2,512 | 1,843 | -27% | 0 | 0 | — |
case-13 | fail→pass | 21,729 | 3,691 | -83% | 1 | 1 | 0% | 1,430 | 1,869 | +31% | 0 | 0 | — |
case-14 | pass→pass | 12,519 | 2,994 | -76% | 1 | 1 | 0% | 1,878 | 1,748 | -7% | 0 | 0 | — |
case-15 | fail→pass | 8,721 | 2,254 | -74% | 1 | 1 | 0% | 1,353 | 1,629 | +20% | 0 | 0 | — |
case-16 | fail→pass | 9,887 | 3,725 | -62% | 1 | 1 | 0% | 1,587 | 1,879 | +18% | 0 | 0 | — |
case-17 | fail→pass | 7,251 | 2,139 | -71% | 1 | 1 | 0% | 1,198 | 1,596 | +33% | 0 | 0 | — |
case-18 | fail→pass | 16,329 | 1,978 | -88% | 1 | 1 | 0% | 2,542 | 1,542 | -39% | 0 | 0 | — |
case-19 | fail→pass | 8,798 | 1,965 | -78% | 1 | 1 | 0% | 1,304 | 1,581 | +21% | 0 | 0 | — |
case-20 | fail→pass | 13,592 | 6,116 | -55% | 1 | 1 | 0% | 1,968 | 2,279 | +16% | 0 | 0 | — |
case-21 | fail→pass | 5,523 | 1,491 | -73% | 1 | 1 | 0% | 818 | 1,479 | +81% | 0 | 0 | — |
case-22 | fail→pass | 13,178 | 1,982 | -85% | 1 | 1 | 0% | 1,982 | 1,545 | -22% | 0 | 0 | — |
case-23 | pass→pass | 11,328 | 2,211 | -80% | 1 | 1 | 0% | 1,815 | 1,586 | -13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +78 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.