剪切静音(流水线智能体 1)
自动化编辑的第一步。获取原始录音 + 其单词级转录稿,并移除仅限静音:第一个词前和最后一个词后的死寂段落,以及超过阈值的词间停顿(修剪至自然的呼吸长度,绝不会硬切为零间隙)。它保留说话者的词语原样——假开头、重录和口吃是 cut-mistakes 智能体(智能体 2)的工作。
此智能体是确定性且由转录驱动的,因此其输出(*.silence-transcript.json)能干净地传递给下一个智能体和节拍同步验证器。
何时使用
- "剪切静音"、"修剪停顿"、"移除死寂"、"收紧节奏"
- 作为主编辑工作流的第一阶段,紧接在转录之后。
先决条件
一个单词级转录 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) 仅规划 — 计算剪切,写入 EDL + 重新调整时间的转录稿(不触碰视频)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--out-dir video-projects/<slug>/assets
# 2) 带视频 — 同时写入 ffmpeg 命令(仍未渲染)
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) 渲染剪切后的视频(本地 ffmpeg,重新编码,音视频保持同步)
# 添加 --apply 来实际运行 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> | <视频文件名>.silenced.mp4 | 剪切后的视频路径 |
--gap <s> | 0.55 | 被视为可修剪静音的最小停顿 |
--head-pad <s> | 0.22 | 第一个词前保留的静音 |
--tail-pad <s> | 0.34 | 最后一个词后保留的静音 |
--apply | 关闭 | 实际运行 ffmpeg 渲染剪切 |
决策逻辑(静音规则)
- 低于
--gap(0.55秒) 的停顿保持不变——自然的言语节奏。 - 对于被修剪的停顿,保留一个自然的呼吸,长度根据上下文缩放:长停顿(≥2秒)保留
0.24秒,句子结束符(. ! ?)后保留0.20秒,其他情况保留0.14秒。保留的呼吸会稍微偏向前一个短语的末尾。 - 头部/尾部死寂被修剪到
--head-pad/--tail-pad。 - 删除范围被合并;保留范围是其补集。剪切通过 ffmpeg 的
trim/atrim+concat滤镜图(写入*.silence-filter.txt脚本并通过-filter_complex传入)实现,确保视频和音频保持同步。
输出(写入 --out-dir)
| 文件 | 用途 |
|---|---|
<文件名>.silence-edl.json | 保留/删除范围、持续时间、参数——编辑决策列表 |
<文件名>.silence-transcript.json | 在编辑后的时间线上重新调整时间的词语(输入智能体 2 + 节拍) |
<文件名>.silence-decisions.md | 人类可读摘要 + 被修剪的最大停顿 |
<文件名>.silence-filter.txt | ffmpeg 滤镜图(仅当使用 --video 时) |
<视频文件名>.silenced.mp4 | 剪切后的视频(仅当使用 --apply 时) |
打印到标准输出的 JSON 摘要包括 removed、removedPct、范围计数和输出路径——用于主工作流记录和链接。
调优说明
- 头部演讲 YouTube 默认值 (
--gap 0.55) 通常从典型的原始片段中移除约 15-20% 的纯静音。降低--gap以获得更紧凑、更快的剪切;提高它以保留更多自然的呼吸空间。 - 如果觉得句子边界处的剪切过于激进,请提高句子断句处的呼吸长度,或提高
--gap。
传递给下一个智能体
将 <文件名>.silence-transcript.json(以及渲染后的 silenced.mp4,如果已渲染)传递给 cut-mistakes 智能体。由于时间戳已经在编辑后的时间线上,下游的节拍定时代码和 scripts/validate-beat-sync.mjs 无需进一步调整即可正常工作。