ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI 短剧字幕怎么验收:时间轴、术语与事实改写边界

AI 短剧字幕怎么验收:时间轴、术语与事实改写边界

做 AI 短剧字幕时,画面生成、语音转写和字幕润色要分别验收。某个视频接口能生成音轨,并不意味着转写能自动听对人名,更不意味着润色模型可以改剧情事实。

本文不生成视频,也没有运行 ASR。能本地验证的是一组构造字幕的时间区间与重复 ID,不能冒充真实音频测评。

接口生命周期先查清

Google 官方 Gemini API 弃用表列出了三项 Veo 3.1 预览模型:veo-3.1-lite-generate-preview、veo-3.1-generate-preview和veo-3.1-fast-generate-preview,三行的 Shutdown date 均为 2026-10-22。页面标注更新于 2026-10-22,;该页同时说明,表中日期是最早可能停用日期,确切停用时间会提前通知用户。本文没有实测三个端点的当前可用性,也不能据此写成“所有 Veo 3.1 或其他渠道都已停服”。迁移目标、账号权限和实际能力需按目标平台再核实,本文不填写未验证价格与参数。

faster-whisper 项目提供 Whisper 转写实现及时间戳选项。README 中的测试带有旧版本和硬件条件,不是十月新测评,也不是本机结果。使用它时仍要对照原音,不把自动文本当唯一证据。

时间轴采用半开区间

我们把一条字幕定义为[start_ms,end_ms),单位为整数毫秒。A 在 1000 结束、B 在 1000 开始时,不算重叠。若是单条主字幕轨,非预期重叠应提示人工检查;双说话人、多语轨可能允许重叠,需分轨而不是全局一刀切。

def validate(cues, duration_ms): ids = set() for c in cues: if c["id"] in ids: raise ValueError("duplicate cue id") ids.add(c["id"]) start, end = c["start"], c["end"] if type(start) is not int or type(end) is not int: raise ValueError("integer milliseconds required") if not 0 <= start < end <= duration_ms: raise ValueError("invalid interval") if not c["text"].strip(): raise ValueError("empty text") ordered = sorted(cues, key=lambda c:(c["start"], c["end"], c["id"])) overlap = [] for i, a in enumerate(ordered): for b in ordered[i+1:]: if b["start"] >= a["end"]: break overlap.append((a["id"], b["id"])) return overlap A = {"id":"A", "start":0, "end":1000, "text":"构造台词甲"} B = {"id":"B", "start":1000, "end":1800, "text":"构造台词乙"} C = {"id":"C", "start":900, "end":1200, "text":"构造台词丙"} assert validate([A, B], 2000) == [] assert validate([A, C], 2000) == [("A", "C")] for cues in [[A, dict(A)], [dict(A, end=0)], [dict(A, end=2100)]]: try: validate(cues, 2000) except ValueError: pass else: raise AssertionError("invalid cue accepted") print("touching boundaries, overlaps, IDs and duration checked")

Python 3.9.6 隔离运行通过。重叠检测最坏 O(n²),这里更重视易读和完整配对,长片可改用扫描线。它不会检查语速、断句、说话人或声画同步,也不能发现某个否定词被听反。

字词纠错与剧情改写分开验收

一条字幕至少应能追到片段 ID、原始时间范围和原音。专有名词、数字、单位、否定词是优先回听项;“不接受”与“接受”只差一个字,剧情含义却相反。术语表可以列出允许的姓名和产品写法,但遇到歧义要留待确认,不能强行替换成最常见词。

若让大模型润色,应要求保留人物、数量、时序和肯否,只调整标点与可读分行。每次改写保存原句、改后句、变更理由和证据位置。无声片段里出现完整台词、音轨中不存在的因果关系,都不能靠“语句更流畅”通过验收。

最后还要在真实播放器里看字幕是否遮住信息、是否跨切镜不自然,以及导出编码、帧率和时间单位是否一致。本篇没有这类媒体输入,因此不声称完成播放器验收。

采用前需复核接口停用、迁移范围及转写依赖。时间轴代码仅针对构造数据,音频质量和模型效果仍待授权素材的实测。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进