把 SRT 用于网页播放器,常见建议是“加上 WEBVTT 文件头,把逗号替换成点”。这里少了一个关键限定:需要修改的是时间戳里的毫秒分隔符,不能对整份文件做英文逗号的全局替换。
本文由字幕轻转维护者使用 AI 辅助整理,样例是自行构造的测试数据,不是客户案例或独立测评。2026 年 9 月 22 日,使用 v1.1.0 完成文件选择、转换、实际下载和桌面网页显示检查。下面同时给出反例、完整输入输出和复现入口。
1. 一个可以复现的错误
例如这类写法会改变正文:
const vtt = ('WEBVTT\n\n' + srt).replaceAll(',', '.');
实际执行后,台词 Hello, world 变成 Hello. world;金额 1,299.00 变成 1.299.00。文件可能仍能被播放器解析,但文字已经不准确。因此,“能加载”不能代替“内容正确”。
手动转换常规 SRT 时,应先按条目区分序号、时间轴和正文,只调整时间轴两端的毫秒分隔符,保留正文,再添加 WEBVTT 文件头和空行。原数字序号可作为 WebVTT 的字幕标识保留。复杂样式需要另外处理,不能仅靠替换字符完成格式兼容。
2. 两条字幕的完整输入与输出
把下面内容保存为 UTF-8 的 sample.srt:
1
00:00:01,250 --> 00:00:04,500
你好,网页字幕。
Hello, world
2
00:00:05,000 --> 00:00:08,250
金额:1,299.00 元
第二行保持换行。
在字幕轻转选择该文件,点击“SRT → VTT”和“开始转换”,显示 2 条字幕,无转换警告。下载并重新读取保存后的文件,内容如下:
WEBVTT
1
00:00:01.250 --> 00:00:04.500
你好,网页字幕。
Hello, world
2
00:00:05.000 --> 00:00:08.250
金额:1,299.00 元
第二行保持换行。
这份输出为 UTF-8、LF 换行,末尾有换行,共 158 字节。它与事先固定的预期文件逐字节一致:时间仍是 1.250–4.500 秒和 5.000–8.250 秒,正文里的英文逗号、金额及两行结构保留。该结论仅针对这份样例,不代表所有 SRT 都能无损转换。
3. 把同一份下载结果放进网页播放器
测试页面使用一段 10 秒静音纯色 MP4,和上面实际下载的 VTT。视频没有烧录字幕;字幕通过 HTML5 track 加载。两份文件放在同一站点下,接入形式如下:
<video controls src="demo.mp4">
<track kind="subtitles" src="sample.vtt"
srclang="zh" label="中文字幕样例" default>
</video>
在本次 Windows 桌面的 Chromium 内嵌浏览器中,使用页面“查看时刻”控件检查了这些位置:
| 时刻 | 实际画面 |
|---|---|
| 0.50 秒 | 无字幕 |
| 2.00 秒 | 中文第一行、Hello, world 第二行 |
| 4.75 秒 | 两条字幕之间的空档,无字幕 |
| 6.00 秒 | 金额:1,299.00 元,以及第二行保持换行。 |
| 9.00 秒 | 字幕已结束,无字幕 |
这里验证了抽查时刻的显示,不是逐帧边界测试。静音素材没有对白,不能据此宣称音画同步;也没有验证 Safari、Firefox、手机或其他播放器。
完整的 SRT、实际 VTT 输出、静音视频和可操作演示集中在本例复现页面,可以下载后换成自己的浏览器继续检查。
4. 交付前还要核对什么
先看下载文件,而不只看网页预览;再确认字幕 URL 返回实际 VTT,服务端内容类型为 text/vtt。同源文件是本例条件,跨域部署需按播放器要求设置跨域访问;直接双击本地 HTML 也不能等同于网站环境。
字幕轻转只适合已有常规 UTF-8 SRT/VTT 的单份格式转换,输入同时受 1 MiB、10,000 条限制,不提供语音识别、翻译、批量处理或自动对轴。若需要这些能力,应选择满足要求的工具。转换完成后,仍要使用自己的真实视频,在最终交付环境检查文字与同步。