口播精细粗剪
把用户的口播原片变成 edit-plan.json。当前助手(WorkBuddy、豆包工作或其他支持脚本的助手)负责内容取舍;随包脚本负责真实音频取证、外部模型调用、边界候选、试听和结构校验。第一版不写入剪映工程、不生成新声音,不把技术检查或音频模型意见称为真人验收。
开始
先读 运行与配置,定位本技能目录中的 scripts/roughcut.py。所有命令使用其绝对路径;不要猜测宿主安装目录。支持 Python 3.10+,仅使用标准库;音频解码依赖 ffmpeg / ffprobe。命令在 Windows 可用 python,macOS 可用 python3。
- 确定源文件和独立工作目录。将
templates/config.example.json复制为工作目录中的config.json;按用户提供的服务地址和模型调整。密钥由本地环境变量或工作目录中的私有.env提供,绝不让用户把密钥贴进聊天、技能包或输出 JSON。 - 执行
doctor --config CONFIG --env-file ENV,根据实际缺项处理依赖。此命令不联网。服务地址与密钥必须属于匹配地域;不要擅自替换用户模型。API 接口不同不能只改模型名。 prepare --config CONFIG --source SOURCE --work WORK:准备全源音频、10ms波形和分段清单。工作目录必须空或与同一源文件、配置对应。不会改原片。- 先执行
transcribe --work WORK --env-file ENV,完成全片转写后形成下文的待确认保留稿。转写会将音频发往用户配置的外部服务并产生服务费用;用户请求本技能处理原片且已配置服务时按该范围执行。无密钥时停在配置指引,不伪造结果,不改用隐藏密钥。首次试用可加--limit 1,之后不带 limit 恢复完成。partial结果不能当全片。 - 先交保留稿,等待用户明确确认,再进入声音参考及精剪。 这道关卡来自用户明确要求。用户仅说“处理一下”“做个测试”或提供原片,不等于确认尚未看到的删改稿。用户已明确确认某一具体版本时复用确认,不重复询问。
- 确认后执行
advise --work WORK --env-file ENV,读取全片advice.json和waveform.json。声音模型必须确认接收到音频并摘录实际听到的原话;只把它的判断当线索,忽略其直接估计的绝对切点。声音参考发现可能改变已确认内容的新证据时,提交差异重新确认;不能暗自更换重录版本或增删话语。
编辑判断与计划
先形成 selection.json,格式见 输入与输出契约。每个保留段用真实词ID的 first_word / last_word 引用,写入保留原话和选择原因。选稿依据:
- 同义重录默认保留最后完整正确版本;后版错误或不完整时保留更合适版本,并说明。
- 前版包含的独有事实、因果、限定与例子不能随重录一起误删;可以拆成独立保留段。
- 删除失败起句、录制说明和确定的多余重复;保留正常口语、有意义的强调和语义停顿,不靠口头词黑名单机械删除。
- 清嗓、咳嗽、吸鼻等依据原声参考与局部波形共同判断;低振幅不等于可删,波形无法独立识别声音语义。
- 默认紧凑但不追求最短。保留字头、轻声和尾音释放;不把今天某片的阈值或固定切点当通用真理。
- 只有用户要求内容压缩时才额外删论证;粗剪默认不改观点、不按指定时长强凑内容。
保留稿确认关卡(必须先完成)
在 build、逐段剪口精修、剪后 review 和写入剪辑工程之前,先把按最终播放顺序拼好的完整保留稿展示给用户,保存成可读的 content-review.html 或宿主可展示的等价文档。稿件必须包括:
- 连续、可直接通读的原话保留稿;转写错字可按原声校正,但不能把润色后的句子冒充原片能直接剪出的声音。
- 主要删改说明:重复/失败起句删了什么、选了哪次重录、保护了哪些独有信息。
- 段落作用和原片大致范围,方便核对;这些范围尚不是最终剪口。
- 需补录、原话存在的问题或无法确定的内容单独标出,不能悄悄补写。
此处暂停,请用户确认这一具体稿件;不要同时继续精剪或交付工程。修改意见先落实到完整稿件,再提交确认。用户明确认可后,记录 content-approval.json:源文件指纹、稿件版本与文件SHA256、对应 selection.json 的词ID清单、用户确认原话。未确认写 pending,不可填造确认记录。确认只锁定内容与顺序,不把估计时长当最终时长。
确认后可自主精修气口、清嗓与边界、拆分长句,保持已确认的口播字词及顺序。若需要增删语义、换重录、压缩论证或重排,先展示相对确认稿的具体差异,再等用户确认;纯剪口调整无需重新审稿。宿主必须执行这道流程关卡:当前脚本只校验时间轴,不会自动验证用户是否确认稿件。
执行 build --work WORK --selection SELECTION 生成候选 edit-plan.json、removed-ranges.json、试听音频 preview.wav 与试听接点索引 joins.json。按段阅读 boundary 证据。脚本只建议边界,不代替你做内容判断:遇到ASR拖尾可以提出向内收紧候选,但必须标出疑点并复检。显式 source_in / source_out 可覆盖边界,只能在原片内且不得覆盖其他段。
不能只检查段间接点。逐段核对实际主要发声结束与ASR末词时间的差值,并检查每个长段内部停顿;ASR末词拖尾可能有0.3–0.9秒,完整长句中也可能有超过1秒的停顿。把测量值列入边界审计,依用户节奏偏好修订后再复检;模型笼统说“气口过紧”不能覆盖用户已经指出“气口太长”的反馈。
需要看局部波形或确定句中清嗓/停顿时,执行 inspect --work WORK --start 原片秒 --end 原片秒(每次最多30秒),查看返回的SVG波形、词锚点JSON及原声WAV。长句内部存在需删声响/长停顿时拆成多个词ID保留段,不能只修整整句首尾;不得根据词级时间戳直接机械截断声响。
接点复检与交付
执行 review --work WORK --env-file ENV:对候选完整试听按带重叠小段做声音模型复检。它会报告重说、清嗓、断字和不自然接点;报告中的大致时间仅用于找到接点,不直接执行。修正时改 selection.json、重新 build 和 review;缓存按音频及请求内容变化自动失效。
复检音频是带重叠的分块;先把模型给出的块内位置映射到完整试听,再核对 joins.json。块首或块尾恰好截在一句中间,可能只是本次送检窗口的边界;需查相邻重叠块和完整试听,不能把它当成真实剪口断字,也不能据此删除原话。
只有有依据的问题才修正,不为了追求模型一句“流畅”反复改到更差。模型无法确认的可疑段记录 needs_review: true 交用户回听;若两次修订仍有相同不确定问题,保留更完整的原声并交付疑点,停止循环。不能靠波形图声称已听过声音。
审稿前先通读拼接后的实际原话,单独检查跨段同义重复:两句措辞不同但承担同一作用,也可能是前后重录。比如连续两次宣布同一个成果,应优先保留最后完整正确的表达,同时保护前版独有内容。声音复检认为“流畅”不能替代这一轮语义去重;审稿前只删确定的重复,不顺便扩大为内容精简。交付前再核对一次与确认稿是否一致;此时发现漏删内容,只提交建议与差异,重新确认后才执行。
最后执行 validate --work WORK,交付:
edit-plan.json:原片和剪后双时间轴,秒与帧、原话、原因、字词锚点、边界依据、待复核标记、来源指纹与真实检查状态。preview.wav:16kHz单声道试听,便于检查;它不是保持原始音质的最终成片。removed-ranges.json、joins.json、review.json(若成功完成),以及必要的疑点说明。
默认保持原速,JSON保留原素材引用,方便下游从原素材剪辑。明确告知人类正常速度听审仍待用户进行。不要把缺少声音参考的降级流程标为完整方法,也不要把导入成功等同于 WorkBuddy 端到端已验证。