实时字幕有一些问题,靠“感觉”回答不了:字幕是不是来得太早,早到来回改写反而干扰阅读?加 500 毫秒延迟,换来的稳定值不值?被修正的词要不要提示?
要回答这些问题,得能把同一段字幕流在不同条件下反复播放给不同的人看。Echoo 的录制和回放就是为这个设计的。
导出的三个文件
视频字幕页和悬浮字幕页的会话结束后,点“导出会话”。文件由浏览器直接写出,不经过服务器:
| 文件 | 内容 |
|---|---|
echoo-<时间>.events.jsonl | 第一行是会话信息:目标语言、声音来源、当时生效的呈现设置和音频参数。之后每行是服务器发来的一次字幕更新,原样记录:atMs(相对就绪时刻的毫秒数)、segmentId、text、translation、partial、audioMs(产生这次更新时已经送出多少音频)等 |
echoo-<时间>.segments.csv | 每句一行:首次更新时间、首个原文和译文、最后一次中间结果、定稿、首字和定稿时的音频位置、延迟、更新次数、改写次数、译文延迟、定稿耗时和最终文本 |
echoo-<时间>.audio.wav | 发给模型的 16 kHz 单声道 PCM 音频(最长 30 分钟) |
呈现设置写在事件日志的第一行里,所以每个文件都自带“这是在什么条件下录的”。
回放页
回放分析页读入一个 .events.jsonl 文件,会做三件事:
- 画出每一句的时间线,看它什么时候第一次出现、改写了几次、什么时候定稿。
- 下载按句统计的 CSV。
- 按录制时的时钟重放字幕。如果同时加载了
.wav,就以音频为准对齐。
重放用的就是实时页面上的那个字幕组件。拿到同一个文件的每个参与者,看到的是完全相同的字幕流,差别只来自你改变的那个变量。
可以控制的变量
“字幕设置 → 呈现策略”里的四项,对实时字幕和回放同样生效:
| 设置 | 取值 |
|---|---|
| 显示时机 | 边识别边显示 · 只显示定稿 |
| 延迟显示 | 0–3000 毫秒,加在每次更新之前 |
| 新词出现方式 | 逐词淡入 · 直接出现 |
| 修正提示 | 被改写的词闪一下 · 静默替换 |
一个典型的实验:录一段 10 分钟的讲座,然后用同一份录音做四组回放,只改“修正提示”和“显示时机”,看理解测试的成绩和主观负荷有没有差别。
比较两个引擎
如果问题是“换一个模型会怎样”,用引擎对照页:同一路声音同时送进两个识别引擎,结果左右并排,时间轴对齐。两边的会话可以一起导出,再用上面的工具分析。