用途:cut-silences 是视频编辑流水线的第 1 个智能体,负责从口播录像中去除静音与空白,包括首词前和末词后的死气,以及超过阈值(默认 --gap 0.55 秒)的词间停顿。它只处理静音,不改动说话者的词句;口误、重录与结巴由第 2 个智能体 cut-mistakes 处理。该步骤是确定性的、由转写驱动,输出可直接喂给后续智能体和节拍同步校验器。
主要能力:\n1. 基于词级转写 JSON 计算保留/删除区间,合并删除区间后取补集作为保留区间。\n2. 对超过阈值的停顿保留“自然呼吸”:长停顿(≥2 秒)保留 0.24 秒,句末标点(. ! ?)后保留 0.20 秒,其他情况保留 0.14 秒,且保留的呼吸略偏向上一短语末尾。\n3. 首部死气裁至 --head-pad(默认 0.22 秒),尾部死气裁至 --tail-pad(默认 0.34 秒)。\n4. 生成编辑决策清单、重定时转写、人类可读摘要,以及可选的 ffmpeg 滤镜脚本。\n5. 使用本地 ffmpeg 的 trim/atrim + concat 滤镜图渲染,音视频保持同步。\n\n使用方式:\n前置条件:需要词级转写 JSON,支持 ElevenLabs Scribe 结构({ words: [{ text, start, end, type }], audio_duration_secs })或通用结构({ words: [{ text, start, end }] })。可用工作区转写器生成:\nnode scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json\n\n用法示例:\n# 1) 仅规划——计算剪辑,写出 EDL 与重定时转写(不触碰视频)\nnode .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \\n --out-dir video-projects/<slug>/assets\n\n# 2) 带视频——同时写出 ffmpeg 命令(仍未渲染)\nnode .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \\n --video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets\n\n# 3) 渲染剪辑后的视频(本地 ffmpeg,重编码,音视频同步)\n# 加 --apply 才会真正运行 ffmpeg\nnode .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \\n --video video-projects/<slug>/assets/raw.mp4 --apply \\n --output video-projects/<slug>/assets/edited-silenced.mp4\n\n参数:--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 渲染。\n\n输出文件(写入 --out-dir):<stem>.silence-edl.json(保留/删除区间、时长、参数);<stem>.silence-transcript.json(重定时到编辑后时间线的词,供第 2 个智能体与节拍使用);<stem>.silence-decisions.md(人类可读摘要与最大停顿裁剪情况);<stem>.silence-filter.txt(ffmpeg 滤镜图,仅带 --video 时生成);<video-stem>.silenced.mp4(剪辑后视频,仅 --apply 时生成)。stdout 打印的 JSON 摘要包含 removed、removedPct、区间数量与输出路径,便于主工作流记录与串联。\n\n适用场景:口播 YouTube 默认 --gap 0.55 大约可去除典型原始素材 15-20% 的纯静音;希望更紧凑更快可降低 --gap,想保留更多自然呼吸可提高 --gap;若句边界处裁得太激进,可提高句末呼吸保留或提高 --gap。完成后将 <stem>.silence-transcript.json(以及已渲染的 silenced.mp4)交给 cut-mistakes 智能体;由于时间戳已在编辑后时间线上,下游节拍定时与 scripts/validate-beat-sync.mjs 无需额外调整。\n\n限制:需要词级转写 JSON;不处理口误、重录、结巴等非静音内容;未提供阈值以外的自动语义判断;渲染依赖本地 ffmpeg;除上述参数外,其他高级定制暂未提供。