# Video Chapters

用户要给视频分章节、加章节或时间轴目录、按作者给的时间大纲生成章节，或调整章节的粗细时用：在自然的话题转换处分章，每章一个标题和一句话摘要，写进视频的章节。需要视频的转写。不用...

- Repository: https://github.com/JimLiu/baocut (1645 stars)
- Category: Engineering
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add JimLiu/baocut --skill video-chapters -g -a claude-code -y`
Codex: `npx skills add JimLiu/baocut --skill video-chapters -g -a codex -y`
Cursor: `npx skills add JimLiu/baocut --skill video-chapters -g -a cursor -y`
Gemini CLI: `npx skills add JimLiu/baocut --skill video-chapters -g -a gemini-cli -y`

## Description

用户要给视频分章节、加章节或时间轴目录、按作者给的时间大纲生成章节，或调整章节的粗细时用：在自然的话题转换处分章，每章一个标题和一句话摘要，写进视频的章节。需要视频的转写。不用于只想在简介里列出已有章节（用起标题与写简介），也不用于给文章分节。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 分章节

章节是给观众跳着看用的：拖进度条的人看一眼章节名，就知道要去哪一段；看过的人想回头找某个地方，也靠它。所以章节的标题要说清这一段讲什么，起点要落在话题真正开始的地方，一个章节对应一个话题。

最容易做坏的样子有两种。一种是按时间平均切：每五分钟一章，起点落在一句话的中间，标题是「第一部分」「继续讨论」，观众看了等于没看。另一种是标题太像总结：一章一句长话，章节列表反而读不动。章节名是路标，不是摘要；摘要另有一句话的位置。

## 1. 取材料

1. 用 videos_inspect 看视频：时长、已有的章节（chapters）、文档。没有转写（kind 为 speech 的文档）时先转写，告诉用户转写在进行。从链接导入的素材另有 `assets[].source`：`chapters` 是作者的章节（平台给的结构化章节，或从简介里的时间戳大纲解析出来的），没有时是 `[]`；`description` 是截断的简介。
2. 带时间码的文稿：export（kind `transcript`、format `md`、timestamps `true`；有几份文稿时按它列出的候选用 documentId 指定），jobs_inspect 等到 completed，读 outputs 里的文件。它按段落给出剪辑后时间线上的时间，章节的时间就取段落开头的这个时间码，不要自己估算。
3. 视频已经有章节时，先问用户是要替换、调整还是保留；用户只说「加章节」而已有的章节是新的，不要覆盖。

## 2. 有作者章节或用户给了大纲时

作者自己分过的章节通常比你分的更贴近他的意图，照它来，不自己分，也不手工对时间。来源素材自带章节（`assets[].source.chapters` 不为空），或用户贴来一份带时间的大纲（`0:00 开场`、`1:02:03 问答` 这类）时，用 chapters_adopt：

- 作者章节：给 `video`（素材不止一个时给 `asset`，有几份转写时给 `document`）。用户贴的大纲：给 `outline`，可以是 `[{ at, title }]`，也可以是贴来的原文。不确定时先带 `dryRun` 看回执，再正式写。
- 它把每一条吸到文稿里最近的段落或句子起点（段落优先，其次句子、字幕条、词），清洗标题后整份写进视频的章节（替换已有的；已有章节要先按第 1 步问过用户）。
- 读回执的 `sourceChapters`：`entries` 共几条；`matched` 吸到了起点；`ambiguous` 附近有几个起点、取了离作者时间最近的那个（同样近取靠后的）；`snapped` 时间挪动过；`unanchored` 对不上、保留了原来的时间。`rows` 逐条给标题、写入的时间 `at`、原来的时间 `sourceAt` 与状态；带 `offTimeline` 的条目对应的地方不在时间线上（比如剪掉了）。交付时说清对上几条，把 ambiguous、unanchored、offTimeline 的条目逐条列给用户：这些是他要自己看一眼的地方。
- 带 `untitled: true` 的章节（作者章节或回执的 `rows` 里）：平台只给了分界，`Untitled Chapter N` 是下载工具填的占位名，不是作者的标题。读这一章到下一章之间的转写给它起标题（语言照第 4 步），连同其余各章用 `outline`（`[{ at: sourceAt, title }]`）再调用。不带 `dryRun` 直接采用会返回 `UNTITLED_SOURCE_CHAPTERS`，照错误里的 `rows` 补上标题即可。
- 返回 `NO_SOURCE_CHAPTERS`：素材没有作者章节，按下面的做法自己分。返回 `ASSET_NOT_PLACED`：素材不在时间线上，先放上去。
- 用户要你自己写的章节，或想要和作者大纲不同的粗细时，才走下面的做法自己分，作者的大纲当参考：转写和它吻合的地方沿用它的分界和标题（保留作者的措辞，语言照第 4 步），只在转写明显不同的地方增、并、删章；大纲的时间只是大致的，章节的起点仍取文稿里段落的时间码。

## 3. 分几章

按粗细定一个大致的目标章数，不硬凑：

| 粗细 | 大约多长一章 |
| --- | --- |
| 粗 | 约 10 分钟 |
| 适中（默认） | 约 5 分钟 |
| 细 | 约 2.5 分钟 |

The rest: https://github.com/JimLiu/baocut/blob/HEAD/skills/baocut/built-in-skills/video-chapters/SKILL.md
