编程 自动字幕机量错了东西:一个在完美片段上误报的比值

2026-09-07 13:13:24

自动字幕机量错了东西:一个在完美片段上误报的比值

作者给 AI 生成的短视频烧字幕:生成片段、转写、写 .ass 文件、ffmpeg 烧进去。管线不大,却坏了三次,每次修复都比上次学到更窄也更有用的东西。第三次最有趣——因为他的修复以一种看起来完全正确的方式错了。这篇 dev.to 文章把三次故障拆开讲。

故障一:手写时间轴永远对不上生成语音

第一个版本用自己脚本的时间轴——台词是作者写的,大致知道每句说多久,于是手填时间戳。结果每个视频都不同步,不是轻微,而是差一秒以上、越往后漂移越厉害。

原因事后看很明显:他在给自己朗读台词的速度计时,而生成式视频模型有自己的节奏——它想在哪停就在哪停,短句会赶。他的估计和文件里真实存在的音频毫无关系。唯一可靠的时间来源是音频本身,用 Whisper 转写拿段级时间戳:

import whisper
model = whisper.load_model("small")
res = model.transcribe(str(wav), language="en", fp16=False)
segs = [(s["start"], s["end"], s["text"].strip())
        for s in res["segments"] if s["text"].strip()]

故障二:转写文本是错的

时间对了,词又错了。Whisper 听错:"earplugs" 出来是 "Urplugs";视频模型有时还会丢掉给定台词里的一个词。于是每句话有三个版本:脚本(时间错、措辞对)、Whisper 转写(时间对、措辞错两处)、屏幕上想要的(都对)。修复:别把它们当竞争答案,从音频取时间、从脚本取文字——按段数对齐,段数不一致就按词数把脚本摊到说话跨度上。这个思路能推广:当两个来源各有一个已知好的字段和一个已知坏的字段,用好的字段做连接,胜过挑一个赢家。

故障三:冻结字幕——比值是错的量

两个片段出现一条字幕在屏幕上定格约八秒不动,而没人说话。那些片段几乎没对话:语音稀疏时,Whisper 会把段尾延伸穿过静音。作为转写文本它仍正确,只是不适合做字幕提示。

作者需要一个守卫说"这个时间轴不可信,回退到手写提示"。第一次尝试:如果任一段覆盖片段超过 40%,就不信任时间轴。它抓住了两个坏片段,也拒绝了一个完全正常的片段。

为什么比值是错的量:被误拒的片段里,6.4 秒的对话在 15 秒视频里占 43%——超过阈值。但那是一句长台词,以 1.72 词/秒说出,那只是……一个人在说话。长句花长时间不是缺陷。比值无法区分"有人说了六秒"和"有人说了一秒然后有五秒寂静",因为时长在分子里,公式里没有任何东西表示实际说了多少。没有阈值能修好它——在那套测量下两个案例确实相同,任何截断抓住一个就抓住另一个。移动数字只是选择得到哪个失败。

区分它们的是语速。正常说话约 2–3 词/秒;给段加静音是加秒不加词,语速就崩了:

MIN_WORDS_PER_SEC = 1.5
slowest = min((len(text.split()) / (e - s), s, e, text)
              for s, e, text in segs if e > s)
if slowest[0] < MIN_WORDS_PER_SEC:
    # 静音并进了语音,回退手动提示
    return None

同样的检查形状、仍然一个阈值,行为完全不同——因为分母现在按真正造成差异的东西归一化。"片段占比"是关于片段的数字,"词/秒"是关于语音的数字——而语音才是他一直想判断的东西。活下来的启发式,是单位有意义的那一个。

抓住坏修复的习惯

找到误报只因为一个规则:对写的每个守卫都做双向回归——坏输入必须被拒绝,已知好输入必须仍被接受。只测你刚看到的 bug,就会发布一个破坏相邻东西的修复。比值守卫通过了为它写的测试(完美拒绝坏片段),却悄悄损坏了一个从没坏过的片段——因为那不在他看的范围里。

这与"自己写测试夹具然后为它们全通过而高兴"是同一类失败模式:如果输入和期望输出在同一时刻出自同一个脑袋,它们的一致证明不了什么。跑真实语料,看没碰过的那些项目发生了什么变化。

四条收获

  • 永远不要手写生成语音的时间——转写它。
  • 时间和措辞可以来自不同来源,拼接它们,别挑赢家。
  • 启发式用比例时,审问分母:如果它不代表你要检测的机制,什么阈值都救不了你。
  • 在真实输入上双向回归测试,改动前后都做。

第 3 条是他反复重新学到的一条:调错的阈值很吵、容易修;调对了的阈值如果建立在错误的量上,看起来像个正常工作的系统,直到它悄悄扔掉某个好东西。

来源:Your auto-captioner is measuring the wrong thing - DEV Community

复制全文 生成海报 AI 字幕 Whisper 测试

推荐文章

程序员茄子在线接单