fabrica-videos-corte — 自动剪辑 是做什么的?
Fábrica de Vídeos Agêntica 技能。清理口播录音:去除静音、错误、口吃和重复镜头,只保留每个句子的最佳版本。原始文件不会被修改。
您扮演视频剪辑师。所有命令在项目根目录的终端中执行。TRABALHO 指的是 trabalho 文件夹。
何时使用
- 客户发来录音并说“清理一下”、“剪掉停顿”、“去掉错误”。
- 在
fabrica-videos-rapido和fabrica-videos-reels技能内部,在同步动画之前使用。
工作原理
停顿由脚本自动根据音频识别并去除。错误或重复镜头则由您(阅读脚本的人)决定。客户通过查看报告和试听最终结果来确认。
操作步骤
- 确保录音为工作室格式。 如果来自手机:将原始文件复制到
TRABALHO\originais\,然后运行npm run converter -- "<原始文件>" <slug>(生成TRABALHO\public\gravacao-<slug>.mp4)。非 4K HDR 的录音也同样适用:转换器会将视频旋转为竖屏,裁剪为 1080×1920,并转换到 30 fps。从转换后的文件以及原始文件中各提取一帧(ffmpeg -ss 20 -i <文件> -frames:v 1 ...)进行对比:旋转方向和颜色必须一致。 - 转录:
npm run legendar -- "trabalho\public\gravacao-<slug>.mp4"(后台运行;2 分钟录音大约需要 1 分钟)。 - 分析:
npm run cortar -- analisar "trabalho\public\gravacao-<slug>.mp4"→ 生成cortes\gravacao-<slug>.cortes.json和cortes\gravacao-<slug>.falas.md(以说话表格形式呈现录音,包含时间、停顿和“似乎在第 N 段重复”的提示)。 - 决定删除哪些内容。 阅读完整的说话表格,然后在
.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),请进行对比:保留的镜头应该是说出了脚本文字的镜头,如果对方改变了说法,则保留最完整的那一版。 如果对两个说法不同但都好的镜头拿不定主意,不要剪掉:去问他。
- 重复镜头:保留最后一个完整的镜头(当对方犯错并重新开始时);之前的镜头都删除:
- 应用剪切:
npm run cortar -- aplicar cortes\gravacao-<slug>.cortes.json→ 生成TRABALHO\public\gravacao-<slug>-limpa.mp4和cortes\gravacao-<slug>.relatorio.md(删除了什么、时长、原因以及被删部分的文本)。 - 不试听即可验证: 转录清理后的视频(
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并在此处记录。
- 呈现给客户: 发送清理后的视频以及报告摘要:剪辑前后时长、剪切次数、您根据自己的判断删除了哪些说话(非自动删除的停顿),以及清理后视频中每个拼接点的时间(将
resultado.fica中的.cortes.json的片段时长相加)。由客户亲自听音确认。
调整(在 .cortes.json 的 config 中修改,然后重新应用剪切)
| 字段 | 默认值 | 作用 |
|---|---|---|
pausaMin | 0.5 秒 | 大于此阈值的静音将被剪掉。值越大,效果越自然,但剪得越少。 |
folga | 0.12 秒 | 每个剪切前后保留的呼吸停顿。如果说话片段粘连过紧,可增加至 0.18。 |
folgaFinal | 0.35 秒 | 视频末尾保留的静音。 |
ruidoDb | 自动 | 被视为静音的音量阈值。嘈杂的房间:在命令末尾使用更高的值(例如 -32)重新运行 analisar。 |
脚本如何拼接剪切(根据第一次实际录音修订)
- 停顿: 通过音频中测得的静音来识别。由时间戳间隔不超过 0.1 秒的咔嗒声分隔的同一段停顿会合并为一段停顿。
- 开头和结尾: 删除第一个单词之前和最后一个单词之后的所有内容(对方调整位置、走出画面),开头保留 0.12 秒,结尾保留
folgaFinal。 - 标记为
remover的说话片段: 剪切范围从保留的最后一句单词后的第一个停顿开始,到保留的下一句单词前的最后一个停顿结束。由音频静音决定,而非 Whisper 的时间戳。
已知限制
- Whisper 的时间戳:在实际录音中,较长停顿后的一句话开头可能延迟最多 0.4 秒,而单词结尾的误差在正负 0.25 秒以内。对整个说话片段的剪切会触及静音,不会受此影响。但是,一句话中间的剪切(口吃,两侧都没有静音)只能依赖 Whisper 的时间戳:请更仔细地检查这些点,并要求客户试听。在实际录音中尚未遇到此情况。
- 小于
pausaMin的停顿会被保留(这是句子之间的自然呼吸)。 - 图像上的生硬剪切:在分屏上这是正常的。如果跳跃明显,请告知客户,而不是自行添加过渡效果。
- 一次处理超过 150 个片段时脚本会拒绝执行:请增大
pausaMin。