首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SRT 转 VTT 时别删除所有数字行:一个会丢字幕的反例

SRT 转 VTT 时别删除所有数字行:一个会丢字幕的反例

原创
作者头像
用户12771163
修改于 2026-09-18 11:32:05
修改于 2026-09-18 11:32:05
1040
举报

把 SRT 转成 WebVTT 时,字幕序号可以保留为 VTT 的标识符。即使准备移除序号,也不能用“删掉所有纯数字行”代替结构解析:字幕正文里的年份、号码和数字台词同样可能独占一行。

下面用一份有明确预期结果的测试字幕说明这个问题。输入与输出于 2026 年 9 月 18 日在本地逐字核对;验证范围是这份普通文本用例,不代表所有字幕格式或播放器都经过验证。

一份只有两条字幕的反例

这份 SRT 的第一条字幕有三行正文,其中 2026 和 2 都是需要显示的文字:

代码语言:txt
复制
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 后,预期输出如下;本地转换结果与其逐字一致:

代码语言:txt
复制
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 结构,可以把处理过程拆成四步:

  1. 识别字幕块之间的空行,检查每块开头的数字序号及紧随其后的时间轴。
  2. 解析时间轴的开始、结束时刻,检查结束时间晚于开始时间,再按 VTT 规则生成时间字段。
  3. 把时间轴之后的行作为该条字幕的正文保留。纯数字行也要保留,不对正文做全局标点替换。
  4. 生成 WEBVTT 文件头,并在字幕块之间保留空行。

这里描述的是处理思路,不是一份适用于全部字幕变体的解析器。两条字幕之间缺少空行时,不应继续猜测正文边界;本次被测实现会对检测到的正文内第二条时间轴报错,提示补齐条目间空行。

怎么验收转换结果

对上面的反例,检查以下四项即可发现这两类误改:

检查项

预期结果

字幕条数

仍是 2 条

数字正文

第一条的 2026 和独立一行的 2 均存在

标点与时间

Hello, world.、1,200 不变;只有时间字段改为点号

时间与换行

两条起止时刻、正文顺序和正文换行不变

下载后,还应在实际目标播放器中查看显示和同步。文件生成成功,只能证明得到了一份转换结果;它不能代替播放器端验收,也不会自动修正原字幕与视频之间的时间偏差。

验证范围与样例来源

本次本地检查覆盖输入输出逐字一致、数字正文和标点保留、普通文本往返、CRLF 换行、缺少字幕块分隔空行时的报错,以及全局删除数字行造成正文丢失的失败对照。后者是为说明风险主动构造的反例,不是对某个外部工具的故障指认。

本文记录的是我维护的字幕轻转 v1.1.0 转换器的一份回归用例,不是独立第三方测评。文章使用 AI 辅助整理,样例与转换结果已按上述范围复核;本次没有追加公网、下载落盘或目标播放器测试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一份只有两条字幕的反例
  • 正确输出应保留哪些内容
  • 脚本应该按字幕块处理
  • 怎么验收转换结果
  • 验证范围与样例来源
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档