Skip to content

v0.7.5 — 四级字幕时间轴重建:修掉「播放本句只有 1 秒」

Choose a tag to compare

@zzz-sc-tech zzz-sc-tech released this 22 Oct 17:12
· 41 commits to main since this release

v0.7.5 — 字幕时间轴重建:修掉「播放本句只有 1 秒」

这次修什么

v0.7.4 修好了四级字幕的文本(找回 26% 丢失内容、补回标点、修好题号结构),但时间轴坏了:

  • 145 行被压成 0.5 秒(41/49 课),点「播放本句」只能听到一小段甚至静音
  • 典型:#1038 的 Question 1 只占 0.98 秒,而紧随的 Question 2 占了 27.92 秒
  • 887 行(9.5%)的时间区间落在音频静音上

原因是 whisper 对整段 20 分钟音频做分段时,段边界会横跨 15~20 秒的答题停顿;字幕行按字符比例铺在这段上,就被摊进了静音。

怎么修的

按长停顿切块重做时间轴,文本一个字没改:

  1. 能量检测找出真实语音段(-48 dBFS)
  2. 按 >3 秒的停顿切块,块内再按最大停顿切成 ≤55 秒的小块
  3. 每个小块:MiMo 转写拿准确文本,whisper 拿词级时间,两者对齐
  4. 全课词序与现有字幕文本对齐,重建每行起止
  5. 行边界吸附到真实语音段

cet4 共 49 课、1920 次 MiMo 调用、0 失败。

验证结果

指标 修前 修后
压缩行(<0.1 秒/词) 145 0
落在静音的行 887(9.5%) 76(0.8%)
完全落在静音 287 47(多为 "A." "B." 这类不朗读的选项标签)

门禁全过:

node scripts/audit/check-invariants.mjs              # 87/87 PASS
node scripts/audit/check-duration-sanity.mjs         # 0 违例
node scripts/audit/check-timeline-speech-overlap.mjs cet4   # 0.8% PASS
node scripts/audit/check-timeline-speech-overlap.mjs cet6   # 0.2% PASS

题号覆盖仍是 cet4 392 组 / cet6 266 组、零缺题;时间戳单调、无重叠、无负时长。

抽检 4 条随机样本,把新窗口切出来单独做 ASR,结果与字幕文本逐字一致:

#1002 l19  字幕 Question one: Why were many passengers stranded at the railway station?
           音频 Question 1. Why were many passengers stranded at the railway station?
#1038 l20  字幕 Question 1: What may be the reason that friends are similar...
           音频 Question 1. What may be the reason that friends are similar...

新增门禁

scripts/audit/check-timeline-speech-overlap.mjs —— 按能量检测语音段,检查每行时间是否真的落在语音上。现有门禁只查时间戳自洽(单调/不重叠/正时长),查不出这类问题。

影响范围

  • 只有 presets/cet4/seed.json 的时间戳变化(v20261021.2 → v20261022.3),文本、译文、题号、锚点结构全部不动
  • scripts/audit/data-contract.mjs 修了 saveTranscript 的写盘目标:原来硬编码 cet6,写四级会覆盖 cet6 seed
  • 六级语料本次未改(其时间轴本来就正常)