将 SubRip(.srt)转换为 WebVTT
让 .srt 文件对 HTML5 <track> 元素和现代视频播放器有效。自动添加 WEBVTT 标头,重新格式化时间码,整个过程无需上传任何内容。
你的文件绝不会接触任何服务器。 本页面的每一次转换都使用 JavaScript 的 FileReader API 在你的浏览器本地完成。不会上传、记录或存储任何内容。可安全用于机密的 Zoom/Teams 录制内容、未发布的视频、以及法律访谈记录。
SRT 转 VTT 的转换原理
如果你曾经尝试把 .srt 文件直接放进 HTML5 的 <track kind="captions" src="captions.srt"> 标签里,你很可能已经发现浏览器直接忽略了它。<track> 元素(以及每个现代浏览器围绕它构建的原生字幕菜单)只认得 WebVTT。SubRip 尽管是桌面播放器和编辑软件中支持最广泛的格式,却完全不属于 HTML5 规范的一部分。
解决方法是机械式的,却十分严格:WebVTT 要求文件开头有一行字面意义上的 WEBVTT,并且每个时间码的毫秒分隔符必须是句号,而不是 SRT 使用的逗号(00:00:09,400 → 00:00:09.400)。只要其中一个细节出错,浏览器就会在没有任何错误提示的情况下悄然无法渲染字幕。SubToolDesk 的转换器会在本地解析你的 SRT 文件,用有效的标头和修正后的时间码重新构建它,并将字幕块干净地重新编号,这一切都在你的浏览器标签页内完成。
分步说明
- 将你的
.srt文件拖到上方的转换器中,或将其内容粘贴到左侧面板。 - 确认格式徽章检测到的是 SRT。
- 点击下载以保存一个有效的
.vtt文件,文件名会与你的原始文件保持一致。 - 在
<track>元素中引用它:<track kind="captions" src="/captions.vtt" srclang="en" label="English">。
为什么要把 SRT 转换为 WebVTT
.srt 文件在桌面编辑软件中可以正常同步播放,但在浏览器里却完全不起作用。转换为 WebVTT 几乎总是出于以下原因之一:
- 场景:你正在为自建的
<video>元素添加字幕,需要一种 HTML5<track>标签真正能够识别的格式。 - 场景:你需要满足无障碍访问要求(例如 WCAG 2.1 的字幕标准),需要符合标准的字幕,而不是浏览器会悄悄忽略的格式。
- 场景:你的视频平台、CMS 或文档站点的屏幕录制嵌入功能只接受
.vtt文件上传。 - 场景:你从编辑、自由职业者或字幕服务商那里收到了
.srt文件,需要交给开发者一份可以直接使用的文件。 - 场景:你正在将视频库从导出 SRT 的平台迁移到围绕浏览器原生字幕功能构建的自定义播放器。
- 场景:你想要无需安装 ffmpeg 或为单个文件编写一次性转换脚本就解决这个问题。
转换前后对比:一个真实示例
一个简短的三条字幕 SRT 文件,包含逗号时间码和连续编号,在去除说话人标签和去除格式标签都关闭(本页面的默认状态,因为生成有效的 WebVTT 不需要去除任何内容)的情况下进行转换:
1 00:00:01,200 --> 00:00:04,000 欢迎回来,今天我们来聊聊第三季度的数据。 2 00:00:04,300 --> 00:00:07,900 谢谢邀请我。我们直接开始吧。 3 00:00:08,100 --> 00:00:11,500 营收同比增长了百分之八。
WEBVTT 1 00:00:01.200 --> 00:00:04.000 欢迎回来,今天我们来聊聊第三季度的数据。 2 00:00:04.300 --> 00:00:07.900 谢谢邀请我。我们直接开始吧。 3 00:00:08.100 --> 00:00:11.500 营收同比增长了百分之八。
字幕文本、时间信息,甚至字幕编号都原样保留。只添加了 WEBVTT 标头,并且每个毫秒前的逗号都变成了句号——这正是浏览器接受该文件所需的两处改动。
转换前后对比
SRT 输入: 1 00:00:09,400 --> 00:00:12,900 营收增长了百分之八。 VTT 输出: WEBVTT 1 00:00:09.400 --> 00:00:12.900 营收增长了百分之八。
为什么这对网页开发者很重要
对大多数面向公众的网站来说,可访问的、带字幕的视频既是可用性要求,也是合规要求(WCAG 2.1 成功标准 1.2.2 要求为预先录制的媒体提供字幕),而 <track> 元素是无需借助第三方视频平台就能提供字幕的标准方式。如果你的编辑流程(或某位自由职业者)只给你 .srt 文件,在这里转换几秒钟就能得到一个可以直接使用的 WebVTT 资源,无需安装 ffmpeg 或编写转换脚本。
在你本地处理,而不是在我们的服务器上
因为这只是纯文本的重新格式化,所以没有任何媒体文件会被接触或上传,只有字幕文本,并且仅在你自己的浏览器标签页内完成。这对于一段内部产品演示视频,和一个公开的营销页面同样重要。
在 <track> 元素中使用转换结果
下载转换后的文件后,用一个 <track> 子元素把它添加到你的 <video> 标记中:
<video controls>
<source src="demo.mp4" type="video/mp4">
<track
kind="captions"
src="/captions.vtt"
srclang="en"
label="English"
default>
</video>default 属性会告诉浏览器自动启用这条字幕轨道;如果你提供了多种语言的字幕轨道,并希望让观众自行选择,可以省略它。浏览器会严格校验 WEBVTT 标头:标头缺失或拼写错误,是字幕明明文件其余部分格式良好却依然悄然无法显示的最常见原因。
这个转换器是为谁而设计的
为自建视频播放器添加字幕的前端和全栈开发者是主要使用人群,但向开发者交付素材的视频制作团队也会用它来交付一份保证能用的文件,而不是把格式转换当作留给别人的待办事项。它同样适用于嵌入屏幕录制的开源文档站点、为满足无障碍合规要求而给培训视频添加字幕的内部工具团队,以及任何正在把视频库从导出 SRT 的平台迁移到期望浏览器原生字幕的自定义播放器的人。
这个转换器会保留什么、改变什么
会保留:
- 每一个对话文本的词语,完全按原样保留,包括源文件中的任何拼写错误。
- 每条字幕精确到毫秒的时间信息,原样保留。
- 每条字幕对应一个区块,保持原有顺序,字幕编号从 1 开始重新按顺序编号。
- 字幕文本中的任何说话人前缀或内联标签,除非你打开去除说话人标签或去除格式标签。
会改变或移除:
- 每个时间码中毫秒前的逗号都会变成句号,因为 WebVTT 要求
00:00:04.000,而不是 SRT 的00:00:04,000。 - 文件开头会添加一行
WEBVTT标头,因为 WebVTT 需要它,而 SRT 没有。 - 像
说话人 1:这样的纯文本说话人前缀,但只有在打开去除说话人标签时才会处理;默认情况下会保留原样。 - 诸如
<i>或<b>之类的格式标签,但只有在打开去除格式标签时才会处理;默认情况下会保留原样。
常见问题及解决方法
- 转换后浏览器仍然不显示字幕:检查转换器上方的格式徽章在转换前确实显示为 SRT;一段被严重截断的粘贴内容会破坏字幕块检测,并产生空白或格式错误的输出。
<i>或<b>标签仍然以字面文本的形式出现在字幕中:这是正常现象,本页面默认关闭去除格式标签,因为 WebVTT 原生支持这些标签;只有在你想要纯文本时才需要打开它。- 像
说话人 1:这样的说话人名称被原样带入了 VTT 输出:如果你不想让它们出现,请打开去除说话人标签;默认情况下会保留,因为这个转换器假定你想要的是忠实的结构性重新格式化,而不是内容编辑。 - 输出中毫秒前仍然显示逗号而不是句号:请仔细检查你下载的是实际的
.vtt输出文件,而不是原始.srt文件的副本;转换器上方的格式徽章和输出标签会确认你看到的是哪一个。 - 文件看起来正确,但字幕依然不显示:在文本编辑器中打开
.vtt文件,确认第一行精确地是WEBVTT,前面没有任何内容,连字节顺序标记或空行都不能有;如果这一行不是第一行,浏览器会悄然拒绝该文件。 - 带声调符号的字母或非英文文本在转换后的文件中变成乱码,例如
é:说明源.srt文件没有以 UTF-8 编码保存;请在转换前重新导出或以 UTF-8 重新保存,因为 WebVTT 和 SRT 一样,默认文本为 UTF-8 编码。
转换过程中不会改变的内容
对话文本和精确到毫秒的时间信息会完全按原样保留。这是一次结构性的重新格式化,而不是重新转录。如果你原始的 SRT 文件中有拼写错误,这些错误也会出现在 VTT 输出中;这个工具修正的是格式合规性,而不是内容准确性。如果你想在转换的同时顺便清理说话人标签或内联样式标签,上方的去除说话人标签和去除格式标签开关会在字幕文本被重写为 WebVTT 语法之前先对其生效,这样你就可以在一次操作中同时完成格式转换和内容清理,而不必分别运行两个工具。
常见问题
为什么我的浏览器会拒绝在 <track> 元素中使用 .srt 文件?
HTML5 的 <track> 元素专门要求使用 WebVTT。浏览器不会原生解析 SRT 用于视频字幕。要使用原生字幕 API,必须先转换为 .vtt。
转换器具体添加了什么,才使其成为有效的 WebVTT?
它会在开头添加必需的 WEBVTT 标头行,把每个时间码的毫秒分隔符从逗号改为句号,并重新编号字幕标识符:这正是 SRT 文件要让浏览器接受所缺少的三件事。
转换后我可以添加字幕定位或样式吗?
可以,这个工具会生成干净、符合标准的 WebVTT 文本输出,之后你可以手动编辑,添加字幕设置(比如 align 或 position)或 <v> 语音标签,因为基础结构已经是有效的了。
转换后字幕还能正确同步吗?
能,时间信息会精确保留到毫秒,只有分隔符和标头会改变,实际的时间戳数值永远不会变。
这个工具能处理从 Premiere 或 DaVinci Resolve 导出的字幕吗?
可以。两者都导出标准 SRT,无论是哪种软件生成的,这个解析器都能原生读取。
尽管不符合规范,有没有浏览器实际上直接支持 .srt?
Chrome 和 Firefox 通过 TextTrack API 添加了非标准的 SRT 支持,但这种支持并不一致,也无法保证在所有浏览器或版本中都可用。HTML5 规范只要求 WebVTT,因此转换为 .vtt 是保证字幕在任何地方都能渲染的唯一方法。