mcpField
C
cut-silences

cut-silences

github.com/nateherkai创意与媒体2.3k188 次安装2 周前更新
代码仓库

关于 cut-silences

cut-silences 是一种由转录文本驱动的视频剪辑技能,可删减空白时段,同时保留说话内容和自然换气停顿。它生成的剪辑列表和重排时间轴的转录文本可供后续编辑阶段使用。

主要功能

  1. 01裁剪过长停顿及首尾空白
  2. 02保留自然换气间隔
  3. 03生成剪辑列表和重排时间轴的转录文本
  4. 04用 ffmpeg 渲染并保持音画同步

适用场景

  1. 01加快原始录制的节奏
  2. 02为口误审核准备静音裁剪版视频
  3. 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.txtffmpeg 滤镜图(仅在指定 --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 无需进一步调整即可运行。

评论

支持 Markdown