剪切静音(管线智能体 1)
自动化编辑的第一步。接收原始录制视频 + 其单词级时间戳转录,并移除仅静音部分:第一个单词前和最后一个单词后的死区,以及超过阈值的单词间停顿(修剪至自然的呼吸长度,绝不硬切割为零间隙)。说话者的单词内容保持不变——假开始、重录和口吃是剪切错误智能体(智能体 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则可保留更多自然的呼吸空间。 - 如果觉得剪辑在句子边界过于激进,可以提高句末呼吸长度,或提高
--gap。
传递给下一个智能体
将 <文件名>.silence-transcript.json(以及已渲染的 silenced.mp4(如果有))传递给剪切错误智能体。由于时间戳已经位于编辑后的时间线上,下游的节拍定时和 scripts/validate-beat-sync.mjs 无需进一步调整即可正常工作。