Communitygithub.com

/fabrica-videos-corte — 自动剪辑

自动剪辑口播录音:去除静音、错误、口吃和重复片段,只保留每个句子的最佳版本,并生成剪辑报告。

fabrica-videos-corte — 自动剪辑 是什么?

该技能用于自动剪辑口播类视频,通过音频分析识别静音、错误、口吃和重复镜头,仅保留每个句子的最佳版本,并提供详细的剪辑报告。支持 Node.js 环境,需在项目根目录下运行命令行工具。工作流程包括:将原始视频转换为标准格式(1080x1920, 30fps)、使用 Whisper 转录音频、分析生成剪切标记(含说话时间、暂停及是否重复的提示)、手动决策删除哪些片段、应用剪切生成干净视频、以及最终验证(转录检查、暂停时长和起止帧确认)。此外,用户还可通过 `config` 调整 `pausaMin`(最小静音时长)等参数以控制剪辑的激进程度。最后是将清理后的视频和总结报告发送给客户确认。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduardogalbiati/fabrica-de-video-skills/tree/HEAD/.claude/skills/fabrica-videos-corte

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

fabrica-videos-corte — 自动剪辑 是做什么的?

Fábrica de Vídeos Agêntica 技能。清理口播录音:去除静音、错误、口吃和重复镜头,只保留每个句子的最佳版本。原始文件不会被修改。

您扮演视频剪辑师。所有命令在项目根目录的终端中执行。TRABALHO 指的是 trabalho 文件夹。

何时使用

  • 客户发来录音并说“清理一下”、“剪掉停顿”、“去掉错误”。
  • 在 fabrica-videos-rapido 和 fabrica-videos-reels 技能内部,在同步动画之前使用。

工作原理

停顿由脚本自动根据音频识别并去除。错误或重复镜头则由您(阅读脚本的人)决定。客户通过查看报告和试听最终结果来确认。

操作步骤

  1. 确保录音为工作室格式。 如果来自手机:将原始文件复制到 TRABALHO\originais\,然后运行 npm run converter -- "<原始文件>" <slug>(生成 TRABALHO\public\gravacao-<slug>.mp4)。非 4K HDR 的录音也同样适用:转换器会将视频旋转为竖屏,裁剪为 1080×1920,并转换到 30 fps。从转换后的文件以及原始文件中各提取一帧(ffmpeg -ss 20 -i <文件> -frames:v 1 ...)进行对比:旋转方向和颜色必须一致。
  2. 转录: npm run legendar -- "trabalho\public\gravacao-<slug>.mp4"(后台运行;2 分钟录音大约需要 1 分钟)。
  3. 分析: npm run cortar -- analisar "trabalho\public\gravacao-<slug>.mp4" → 生成 cortes\gravacao-<slug>.cortes.json 和 cortes\gravacao-<slug>.falas.md(以说话表格形式呈现录音,包含时间、停顿和“似乎在第 N 段重复”的提示)。
  4. 决定删除哪些内容。 阅读完整的说话表格,然后在 .cortes.json 中填充 remover 列表:
    • 重复镜头:保留最后一个完整的镜头(当对方犯错并重新开始时);之前的镜头都删除:{ "falas": [2, 3], "motivo": "犯错并重新开始" };
    • 同一句话完整说了两遍,中间有较长停顿(实际录音中可能是最后的 CTA):对方因为对第一遍不满意而重复。保留最后一遍,并在消息中告诉他删除了哪一遍,以便他能替换;
    • 开始前的热身(“来吧”、“好的”、闲聊)和 CTA 之后的所有内容:删除;
    • 一句话中间的口吃或单个单词:npm run cortar -- palavras cortes\gravacao-<slug>.cortes.json <序号> 可逐词显示时间戳;使用 { "de": 12.30, "ate": 13.10, "motivo": "口吃" };
    • 脚本外的评论(“不,等等”、“再来一遍”、“停”):删除;
    • 有意为之的停顿(说数字前的悬念):放入 manter,例如:{ "de": 20.1, "ate": 21.4 };
    • 如果有脚本(roteiros\<slug>.md),请进行对比:保留的镜头应该是说出了脚本文字的镜头,如果对方改变了说法,则保留最完整的那一版。 如果对两个说法不同但都好的镜头拿不定主意,不要剪掉:去问他。
  5. 应用剪切: npm run cortar -- aplicar cortes\gravacao-<slug>.cortes.json → 生成 TRABALHO\public\gravacao-<slug>-limpa.mp4 和 cortes\gravacao-<slug>.relatorio.md(删除了什么、时长、原因以及被删部分的文本)。
  6. 不试听即可验证: 转录清理后的视频(npm run legendar -- "<...-limpa.mp4>"),然后阅读 npm run falas -- legendas\gravacao-<slug>-limpa.json。检查三件事:
    • 文本必须是他想说的内容,没有单词在中间被截断,也没有残留的错误(第一次实际处理时,热身阶段的“好的。”残留了下来:缺陷就是这样暴露的);
    • “之后停顿”列不应超过约 0.8 秒:清理后的视频中较长的停顿意味着两个剪切之间残留了片段;
    • 开头和结尾:从清理后的视频中取一张帧拼图(ffmpeg -i <清理后视频> -vf "fps=1/2.5,scale=180:-1,tile=7x2" -frames:v 1 <拼图文件.jpg>),检查从头到尾他是否都在画面中并且正在说话。 如果有残留,调整 remover 并重新应用剪切;如果缺陷来自脚本,请修复 cortar.mjs 并在此处记录。
  7. 呈现给客户: 发送清理后的视频以及报告摘要:剪辑前后时长、剪切次数、您根据自己的判断删除了哪些说话(非自动删除的停顿),以及清理后视频中每个拼接点的时间(将 resultado.fica 中的 .cortes.json 的片段时长相加)。由客户亲自听音确认。

调整(在 .cortes.json 的 config 中修改,然后重新应用剪切)

字段默认值作用
pausaMin0.5 秒大于此阈值的静音将被剪掉。值越大,效果越自然,但剪得越少。
folga0.12 秒每个剪切前后保留的呼吸停顿。如果说话片段粘连过紧,可增加至 0.18。
folgaFinal0.35 秒视频末尾保留的静音。
ruidoDb自动被视为静音的音量阈值。嘈杂的房间:在命令末尾使用更高的值(例如 -32)重新运行 analisar。

脚本如何拼接剪切(根据第一次实际录音修订)

  • 停顿: 通过音频中测得的静音来识别。由时间戳间隔不超过 0.1 秒的咔嗒声分隔的同一段停顿会合并为一段停顿。
  • 开头和结尾: 删除第一个单词之前和最后一个单词之后的所有内容(对方调整位置、走出画面),开头保留 0.12 秒,结尾保留 folgaFinal。
  • 标记为 remover 的说话片段: 剪切范围从保留的最后一句单词后的第一个停顿开始,到保留的下一句单词前的最后一个停顿结束。由音频静音决定,而非 Whisper 的时间戳。

已知限制

  • Whisper 的时间戳:在实际录音中,较长停顿后的一句话开头可能延迟最多 0.4 秒,而单词结尾的误差在正负 0.25 秒以内。对整个说话片段的剪切会触及静音,不会受此影响。但是,一句话中间的剪切(口吃,两侧都没有静音)只能依赖 Whisper 的时间戳:请更仔细地检查这些点,并要求客户试听。在实际录音中尚未遇到此情况。
  • 小于 pausaMin 的停顿会被保留(这是句子之间的自然呼吸)。
  • 图像上的生硬剪切:在分屏上这是正常的。如果跳跃明显,请告知客户,而不是自行添加过渡效果。
  • 一次处理超过 150 个片段时脚本会拒绝执行:请增大 pausaMin。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能