把 SRT 转成 WebVTT 时,字幕序号可以保留为 VTT 的标识符。即使准备移除序号,也不能用“删掉所有纯数字行”代替结构解析:字幕正文里的年份、号码和数字台词同样可能独占一行。
下面用一份有明确预期结果的测试字幕说明这个问题。输入与输出于 2026 年 9 月 18 日在本地逐字核对;验证范围是这份普通文本用例,不代表所有字幕格式或播放器都经过验证。
这份 SRT 的第一条字幕有三行正文,其中 2026 和 2 都是需要显示的文字:
1
00:00:01,000 --> 00:00:03,500
2026
2
请保留上面两行数字。
2
00:00:04,250 --> 00:00:06,750
Hello, world.
订单金额:1,200 元。如果一个转换脚本先把文本按行拆开,再删除所有满足 /^\d+$/ 的行,第一条字幕的 2026 和 2 就会一起消失。它们不是序号:真正的序号位于一个字幕块开头,下一行是时间轴;这里的数字已经位于时间轴之后,属于正文。
另一个独立问题是全文替换英文逗号。时间戳需要把毫秒分隔符由逗号改成点,但正文里的 Hello, world. 和 1,200 不应被改写。字符看起来相同,不代表在文件里承担同一种作用。
这份输入转为 WebVTT 后,预期输出如下;本地转换结果与其逐字一致:
WEBVTT
1
00:00:01.000 --> 00:00:03.500
2026
2
请保留上面两行数字。
2
00:00:04.250 --> 00:00:06.750
Hello, world.
订单金额:1,200 元。输出增加了 WEBVTT 文件头和空行,时间戳改用了点号;两条字幕原有的数字序号保留为 VTT 标识符。第一条仍在 1.000 秒开始、3.500 秒结束,第二条仍在 4.250 秒开始、6.750 秒结束。
数字正文、多行文字、金额与英文标点都保留。对这份普通文本示例,再转回 SRT,可以恢复相同的时间和正文。这不表示带有 VTT 样式、定位或逐字高亮的文件都能无损往返。
针对这里的常规 SRT 结构,可以把处理过程拆成四步:
WEBVTT 文件头,并在字幕块之间保留空行。这里描述的是处理思路,不是一份适用于全部字幕变体的解析器。两条字幕之间缺少空行时,不应继续猜测正文边界;本次被测实现会对检测到的正文内第二条时间轴报错,提示补齐条目间空行。
对上面的反例,检查以下四项即可发现这两类误改:
检查项 | 预期结果 |
|---|---|
字幕条数 | 仍是 2 条 |
数字正文 | 第一条的 |
标点与时间 |
|
时间与换行 | 两条起止时刻、正文顺序和正文换行不变 |
下载后,还应在实际目标播放器中查看显示和同步。文件生成成功,只能证明得到了一份转换结果;它不能代替播放器端验收,也不会自动修正原字幕与视频之间的时间偏差。
本次本地检查覆盖输入输出逐字一致、数字正文和标点保留、普通文本往返、CRLF 换行、缺少字幕块分隔空行时的报错,以及全局删除数字行造成正文丢失的失败对照。后者是为说明风险主动构造的反例,不是对某个外部工具的故障指认。
本文记录的是我维护的字幕轻转 v1.1.0 转换器的一份回归用例,不是独立第三方测评。文章使用 AI 辅助整理,样例与转换结果已按上述范围复核;本次没有追加公网、下载落盘或目标播放器测试。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。