关于 cut-silences
cut-silences 是一种由转录文本驱动的视频剪辑技能,可删减空白时段,同时保留说话内容和自然换气停顿。它生成的剪辑列表和重排时间轴的转录文本可供后续编辑阶段使用。
主要功能
- 01裁剪过长停顿及首尾空白
- 02保留自然换气间隔
- 03生成剪辑列表和重排时间轴的转录文本
- 04用 ffmpeg 渲染并保持音画同步
适用场景
- 01加快原始录制的节奏
- 02为口误审核准备静音裁剪版视频
- 03为后续剪辑生成重排时间轴的转录文本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nateherkai/ herk-edit-kit --skill cut-silences安装后在 Claude Code 中输入/cut-silences确认已加载。
附带文件scripts/cut-silences.mjs
详细介绍
剪除静音(Pipeline Agent 1)
自动剪辑的第一步。输入原始录音和逐词转录,只移除静音:第一个词之前和最后一个词之后的空白,以及超过阈值的词间停顿(缩短至自然换气的长度,绝不会缩短到完全没有间隔)。说话者的词语保持不变——口误、重录和结巴由 cut-mistakes Agent(Agent 2)处理。
此 Agent 由转录驱动,结果具有确定性,因此其输出(*.silence-transcript.json)可以顺畅地传给后续 Agent 和节拍同步验证器。
适用场景
- “剪掉静音”、“缩短停顿”、“移除空白”、“加快节奏”
- 作为主剪辑工作流的第一步,在转录完成后立即使用。
前置条件
逐词转录 JSON。格式可以是 ElevenLabs Scribe 格式
({ words: [{ text, start, end, type }], audio_duration_secs }),也可以是通用格式
({ words: [{ text, start, end }] })。使用工作区转录工具生成:
node scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json
用法
# 1) Plan only — compute the cut, write EDL + re-timed transcript (no video touched)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--out-dir video-projects/<slug>/assets
# 2) With a video — also write the ffmpeg command (still does not render yet)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets
# 3) Render the cut video (local ffmpeg, re-encode, A/V kept in sync)
# add --apply to actually run ffmpeg
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --apply \
--output video-projects/<slug>/assets/edited-silenced.mp4
选项
| 标志 | 默认值 | 含义 |
|---|---|---|
--video <path> | — | 源视频;启用 ffmpeg 命令/渲染 |
--out-dir <dir> | 与转录文件同目录 | 输出文件的写入位置 |
--output <path> | <video-stem>.silenced.mp4 | 剪辑后的视频路径 |
--gap <s> | 0.55 | 视为可缩短静音的最短停顿 |
--head-pad <s> | 0.22 | 第一个词前保留的静音 |
--tail-pad <s> | 0.34 | 最后一个词后保留的静音 |
--apply | 关闭 | 实际运行 ffmpeg 渲染剪辑 |
判定方式(静音规则)
- 短于
--gap(0.55 秒)的停顿保持不变——这是自然的说话节奏。 - 对于缩短的停顿,会保留自然换气,并根据上下文调整时长:较长停顿(≥2 秒)为
0.24s,句末标点(. ! ?)之后为0.20s,其他情况为0.14s。保留的换气时间会略微偏向前一句的末尾。 - 开头/结尾的空白会缩短至
--head-pad/--tail-pad。 - 删除区间会合并;保留区间则是其补集。剪辑通过 ffmpeg
trim/atrim+concat滤镜图渲染(写入*.silence-filter.txt脚本,并通过-/filter_complex传入),确保视频和音频保持同步。
输出(写入 --out-dir)
| 文件 | 用途 |
|---|---|
<stem>.silence-edl.json | 保留/删除区间、时长和参数——剪辑列表 |
<stem>.silence-transcript.json | 重新映射到剪辑后时间线的词语(供 Agent 2 和节拍使用) |
<stem>.silence-decisions.md | 人类可读的摘要,以及被缩短的最长停顿 |
<stem>.silence-filter.txt | ffmpeg 滤镜图(仅在指定 --video 时生成) |
<video-stem>.silenced.mp4 | 剪辑后的视频(仅在指定 --apply 时生成) |
打印到 stdout 的 JSON 摘要包含 removed、removedPct、区间计数和输出路径,可供主工作流记录并串联后续步骤。
调整说明
- 对于面对镜头的 YouTube 视频,默认值(
--gap 0.55)通常会移除原始素材中约 15%–20% 的纯静音。调低--gap可让剪辑更紧凑、节奏更快;调高则能保留更多自然的换气空间。 - 如果句子边界处的剪辑显得过于激进,可增加句间换气时长,或调高
--gap。
交接给下一个 Agent
将 <stem>.silence-transcript.json(以及渲染后生成的 silenced.mp4)传给 cut-mistakes Agent。由于时间戳已经映射到剪辑后的时间线,下游节拍定时和 scripts/validate-beat-sync.mjs 无需进一步调整即可运行。