汽车粤语书面语单行字幕
执行边界
- 语音识别与媒体处理在本地完成,不上传音视频到识别 API。准备时可下载公开模型和依赖;离线处理时不自动下载或改用云端。
- 由当前助手进行文字校准。助手使用在线模型时,转写文本会交给在线模型,不得描述为全链路离线。若用户要求文字也离线,则使用本地文本模型,缺少时说明实际限制。
- 最终交付 UTF-8
.srt,每条恰好一行文字,带对应原媒体的时间轴,不以纯文本稿代替。 - 默认无句读标点,保留数值、单位及正式名称必需符号,例如
1.8米、30%、-5℃、0—100km/h、CX-5。不能把“无标点”理解为删除所有非汉字字符。 - 输入、原始识别结果、校准记录和最终字幕分别保存,不覆盖原文件。
环境与任务反馈
- 先展示清单,再执行。 使用 references/task-progress.md 的状态约定,每步验证通过后打勾;进入步骤、完成、失败或等待用户时立即更新。长任务在有执行机会时约每60秒报告当前步骤、耗时和最近进展,不编造百分比,不承诺软件不支持的后台推送。
- 统一脚本准备与自检。 首次准备或环境故障先按 references/runtime-setup.md 执行
scripts/setup_runtime.py,不要临场拼装安装命令或随意改依赖版本。脚本先只读检查本机记录、已知环境和用户指定解释器,通过则复用,否则分步创建专用环境;安装日志和进度落盘。音频解码、模型加载、短样本推理分别验证。依赖故障的进一步处理见 references/environment-recovery.md。不修改系统Python,不硬编码开发者电脑路径。 - 国内网络先检查下载源。 确需安装依赖时,优先检查国内可信HTTPS镜像的可达性及所需版本,再为本次命令临时指定;不修改全局pip设置。提醒应显示实际包名、来源及可获得的下载进度,不能只说“PyTorch较大,请等待”,也不能把全部依赖的体积算成PyTorch大小。详见环境恢复说明。
- 先有证据,再修故障。 保留完整错误和退出码,区分网络、构建/版本、权限及已证实的安全拦截。仅凭pip失败、临时目录或删除文件字样不能判定安全拦截;不默认要求关闭防护、放行未知文件或重启。需用户操作时说明具体依据、目标操作、影响及恢复方式。
- 失败可续接。 基础工具、Whisper、Qwen分步准备并保存日志。针对同一错误,有依据修复后最多自动重试一次;仍失败则停止该步骤,报告中断点,继续不依赖它的工作。用户说“继续”时先核对记录及运行中任务,从仍有效的中断点恢复,不重复启动安装或下载。
工作流程
- 确定成片画幅。 视频用
scripts/subtitle_profile.py探测显示尺寸,考虑旋转和像素宽高比,忽略MP3封面等附图。最终剪辑尺寸优先于源视频,用户指定竖屏时不能按横屏源文件套横屏预设。音频没有画幅:使用用户已给的成片设置;未知时询问横屏或竖屏,也可在用户需要时各出一套,不把猜测称为自动识别。详见 references/subtitle-layout.md。 - 本地识别与交叉检查。 检查模型完整性,使用 Whisper large-v3 与 Qwen3-ASR-1.7B,保留原文和时间数据。Qwen默认输出文字用于交叉校准,时间定位参考Whisper及原音频;只有需要额外对齐且验证通过时才加载可选ForcedAligner,不把对齐模型作为基础运行的必需下载。相同素材、相同背景词做比较。短样本依次运行;超过180秒使用
scripts/transcribe_long.py管理重叠窗口、唯一文件名、时间偏移和已完成结果复用,不临时写shell循环。脚本只保守去除时间和文本均匹配的重复片段,其余接缝进入待审;须结合双模型和原音频完成语义去重,不直接拼接窗口正文当成终稿。运行说明见 references/local-testing.md。首次对比以无提示词结果为基线。漏段、重复、可疑额外内容须用原音频短片段复测,不能只凭一个模型认定正确。 - 先校准、后断句。 当前助手对照两模型原文、相邻语境和本地术语资料,依据 references/editorial-rules.md 修正专名及同音候选,并生成保留标点的简体书面语工作稿。保留条件、否定、数字、推测和立场。语言推断只生成候选,不等于听音或外部核验。
- 按画幅拆成单行语义单元。 不再要求一整句独占一条字幕。允许将长句改写为连续、自然的语义短句,每条能表达一个清楚的小意思。不能按固定字数硬切,不能拆开品牌车型、姓名、固定术语、数字与单位,不能产生孤立连接词或半截主谓/动宾结构。尽量落入画幅建议长度,短回答不为凑字补内容。不要为了缩短而丢条件、数字或改观点。超过长度上限时重新改写或分句,不折行、不截断。
- 多人发言分别处理。 不将不同人的问答拼成一句或同一行,不再用两行对话同屏规避短字幕。短回应使用实际语音区间,可在静音间隙适当延长显示,但不越过下一位发言。无说话人分离时不凭文本编造人物身份,轮次不清或重叠人声进入待审,不保证已经解决串人。
- 逐语义单元匹配时间。 使用对应原始词/片段的起止点,保留来源映射及媒体偏移。拆出新的短句必须重新定位声音,不把旧长句的时间按字数均分。只能用原始粤语转写做强制对齐,不能用改写后的普通话文本对齐粤语发音。对齐失败时复听/重对齐,不伪造精确时间。
- 最后清标点并导出。 断句和时间确定后,导出器清理句读、合并多余空格并转换简体,保护必要符号;清理后再验单行、宽度、速度、重叠和越界。字幕 JSON 包含
media_duration、subtitle_profile、cues,可选protected_terms,schema与调用见画幅说明。scripts/export_srt.py遇换行、超宽或明显粤语残留会拒绝导出,须修正语义/时间后重试,不绕过检查。 - 预览与验收。 配置成片字体、字号、安全区时优先测量字体宽度;只用汉字宽度估计时明确其局限。SRT不可靠携带画幅或样式,剪辑软件仍可能自动换行,必须匹配同一字幕预设并在最终画幅预览。有实际回听/播放才报告已验证同步;只有结构检查不能视为准确或声画同步合格。
交付
<素材名>_横屏.srt/<素材名>_竖屏.srt;未决专名、内容、轮次或时间疑点则用.review.srt标识待审稿。- 疑点清单独立记录时间位置、原识别、候选、依据和未决原因,不把说明塞进发布字幕正文。
- 同步记录成片预设来源:实际探测、用户指定或仅画幅选项,不能把原视频尺寸等同于最终成片尺寸。
- 测试保留各模型原始结果及综合校准记录,区分识别、改写、分句和时间轴问题。不把综合校准稿当作单一模型独立准确率,不给没有人工参考稿支持的准确率。