# Talking Head Cut

一两个人对着镜头说话的录音要剪成能发布的视频时用：去掉口癖、长停顿、录废重来的部分和离题的话，在几遍重录里挑一遍，收紧句间停顿，把最有力的原话挪到开头，再按需要加放大强调、B-...

- 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 talking-head-cut -g -a claude-code -y`
Codex: `npx skills add JimLiu/baocut --skill talking-head-cut -g -a codex -y`
Cursor: `npx skills add JimLiu/baocut --skill talking-head-cut -g -a cursor -y`
Gemini CLI: `npx skills add JimLiu/baocut --skill talking-head-cut -g -a gemini-cli -y`

## Description

一两个人对着镜头说话的录音要剪成能发布的视频时用：去掉口癖、长停顿、录废重来的部分和离题的话，在几遍重录里挑一遍，收紧句间停顿，把最有力的原话挪到开头，再按需要加放大强调、B-roll、竖屏取景和配乐闪避。需要视频的转写。只想从长视频里挑几段短视频时用切短视频。

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

# 剪口播

用户录了一段对着镜头说的话，里面有口癖、有停顿、有说错重来的几遍。他要的是一条能直接发的视频：话顺、不拖、开头留得住人，而且他说过的意思一句没变。观众感觉不到剪过，才算剪好了。

最容易剪坏的样子有两种。一种是边听边剪：读到一句觉得多余就删，剪到后面发现它是后文的前提，只好回头补。另一种是剪得太狠：每次换气都剪掉，停顿全压到最短，听起来像机器在说话；或者为了开头抓人把一句话从中间截出来，意思变了。

口播视频里决定剪点的是**话**，不是画面：先让话顺下来，再处理画面。顺序：

1. 转写。没有转写，下面每一步都是瞎猜。没有 kind 为 speech 的文档时先转写，告诉用户转写在进行。
2. 按论点列出留 / 删清单，一次剪完（第 2 节）。
3. 收紧句间停顿（第 3 节）。
4. 定开头（第 4 节）。
5. **剪口定下之后**才加画面：放大强调、B-roll、文字；然后是取景、竖屏短视频的摆法与节奏、声音。做法在 `references/picture-and-sound.md`，要做这些时用 `skills_read` 取；要插一段网上找来的画面或当事人原声（配旁白、压卡片），用 `skills_read` 读 `clip-montage`。
6. 验收（第 5 节）。

画面元素会跟着剪口走，但先剪话、后加画面仍然更省事：话没定下来之前，定不了放大落在哪一句、B-roll 给几秒。

## 1. 时间与剪法

这里有两个时钟，搞混了剪点就落错地方：

- 转写（documents_read 读 speech 文档）里词的 start、end 是素材自己的时钟，按 timescale 换成秒：秒 = 刻度 ÷ timescale。addCuts、proposeCuts 用的就是素材时钟上的秒。
- splitItem、moveItem、removeRange、导出的范围和 videos_frames 的 `at` 用时间线上的秒。素材上的时刻 t 在时间线上的位置 = 那个片段的 startSeconds +（t − sourceInSeconds）（videos_inspect 的片段里有这两个值；变过速的片段再除以速率）。不要凭感觉换算；拿不准就重新 videos_inspect 读片段。
- 口播的删减用剪口（addCuts）：可以恢复（restoreCut），剪口集合是视频里 kind 为 cut-set 的文档。原文件不动。

## 2. 留 / 删清单

读全文，不要边听边一句一句剪：

- **按论点列**：这段录音讲了哪几个论点，每个论点留哪几句。写成留 / 删清单（句子、留或删、理由），一次剪完；边读边剪，读到后面常发现前面删掉的一句是后文的前提。
- **该删的**：开拍前的准备、说错重来的那几遍、录完到停机之间的杂音、与主线无关的离题话。
- **口癖与长停顿**：用 edits_apply 的 proposeCuts（detect 里的 fillers 与 pauses）生成剪辑提案，用 documents_read 读提案，逐条看过，再用 acceptCutSuggestions 只接受该删的那些；要改区间的直接 addCuts 并把建议 ID 写进 ref。提案不检测重复的句子：录废重来、说了两遍的，先用 speech_retakes 列出几遍（装了语义模型时换了说法的重录也能找到，没装时只找文字相同的，`effectiveMode` 写明），按下一条挑哪遍，再按要删那一遍的 wordIds 在转写里查到素材时间用 addCuts 剪；`differ` 为 true 的几遍数字、否定词或名字不同，先弄清哪遍对，拿不准就问用户。它找不到的（隔得远、说法差得多）照常自己读转写找。
- **几遍重录挑哪遍**：看完整（意思说全了）、自然（不像背的）、节奏（不拖不赶）。后一遍通常更顺，但这不是规则；拿不准就都留着，请用户听了再定。
- **默认保持原来的顺序**。调序会改变论证；除了第 4 节的开头，其他任何挪动都先问用户。
- 按整句删：剪口的边界落在词与词之间的空隙里，取整句第一个词的开头到最后一个词的结尾，不切进词里。
- **清单定下后作为一笔修改提交**：每句要删的一个剪口，放进同一次 edits_apply。整笔是一步撤销：用户说「不要那一批」时，一次 edits_undo 就退回去。

## 3. 句间停顿

停顿的长短是视频的语气：压得太短像赶，留得太长像拖。

The rest: https://github.com/JimLiu/baocut/blob/HEAD/skills/baocut/built-in-skills/talking-head-cut/SKILL.md
