SSubToolDesk
zh
VTT → SRT

将 WebVTT 转换为 SubRip(.srt)

把 Zoom、Teams 或 Whisper 生成的 .vtt 文件转换成通用兼容的 .srt 字幕轨道,时间信息精确到毫秒保留,全部在你的设备上处理完成。

已检测到: …
拖放文件、粘贴文本,或直接编辑
……
本地处理

你的文件绝不会接触任何服务器。 本页面的每一次转换都使用 JavaScript 的 FileReader API 在你的浏览器本地完成。不会上传、记录或存储任何内容。可安全用于机密的 Zoom/Teams 录制内容、未发布的视频、以及法律访谈记录。

VTT 转 SRT 的转换原理

WebVTT 和 SubRip 编码的是同一个基本概念(一份带有时间信息的字幕文本列表),但它们的语法在三个具体方面有所不同。首先,WebVTT 的标头行(WEBVTT)以及任何 NOTE/STYLE/REGION 区块在 SRT 中都没有对应形式,必须被去除。其次,WebVTT 用句号分隔毫秒(00:00:06.120),而 SRT 要求使用逗号(00:00:06,120)——这一个字符的差异,如果不转换,就会让严格的 SRT 解析器拒绝该文件。第三,WebVTT 的字幕标识符是可选的,可以是任意字符串,而 SRT 要求必须是从 1 开始、严格连续、没有间隔的整数。

SubToolDesk 的转换器会自动处理这三件事:它使用 FileReader API 在本地解析 VTT 文件,重新生成干净、连续的编号,替换毫秒分隔符,并丢弃所有 SRT 没有对应语法的内容。

如何将 VTT 转换为 SRT(分步说明)

  • 将你的 .vtt 文件拖到上方的转换器中,或将其内容粘贴到左侧面板。
  • 确认格式徽章检测到的是 VTT。
  • 保持去除格式标签开启,这样语音标签和定位元数据就不会以字面文本的形式出现在你的 SRT 中。
  • 点击下载以保存一个格式正确的 .srt 文件,或点击复制将其粘贴到其他地方。

为什么要把 WebVTT 转换为 SRT

.vtt 文件在浏览器中播放没有问题,但许多工具和工作流程仍然需要 .srt。转换几乎总是出于以下原因之一:

  • 场景:你的视频编辑软件(Premiere、DaVinci Resolve、Final Cut)的字幕导入功能是围绕 SRT 构建的,对 WebVTT 要么拒绝、要么处理得不可靠。
  • 场景:本地化服务商或字幕制作服务要求将 SRT 作为其标准输入格式,无论你手上是什么格式。
  • 场景:你要上传到的视频平台、流媒体服务或广告服务器是在 WebVTT 普及之前建成的,只接受 .srt。
  • 场景:你从 Zoom、Teams 或 Whisper 转录中收到了 WebVTT 格式的 AI 生成字幕,需要交给使用较旧的桌面工具的人。
  • 场景:你想在格式转换的同时,顺便去除 SRT 没有对应形式的语音标签和字幕设置元数据。
  • 场景:你想把字幕存档为兼容性更通用的格式,确保若干年后,无论你用的是什么软件,这个文件依然能打开。

转换前后对比:一个真实示例

一个简短的 WebVTT 字幕,带有语音标签和字幕设置属性,正是 Zoom 或 Teams 导出的那种类型,在本页面默认开启去除格式标签、关闭去除说话人标签的情况下进行转换:

Before
WEBVTT

1
00:00:06.120 --> 00:00:09.400 align:start position:10%
<v Jordan>很高兴来到这里,谢谢邀请我。

2
00:00:09.600 --> 00:00:12.800 align:start position:10%
<v Priya>我们开始讨论议程吧。
After
1
00:00:06,120 --> 00:00:09,400
很高兴来到这里,谢谢邀请我。

2
00:00:09,600 --> 00:00:12,800
我们开始讨论议程吧。

WEBVTT 标头、两个 align:start position:10% 字幕设置(SRT 没有对应的定位语法),以及 <v Jordan> 和 <v Priya> 这两个语音标签都已消失,因为去除格式标签默认是开启的。每个毫秒前的句号都变成了逗号,字幕编号也被重新按顺序编号。如果说话人原本是以纯文本标注的(例如 Jordan:),由于去除说话人标签默认是关闭的,这段文本会被原样保留。

并排对比:同一条字幕,两种格式

WebVTT:
00:00:06.120 --> 00:00:09.400 align:start
<v Jordan>很高兴来到这里。

SRT:
1
00:00:06,120 --> 00:00:09,400
很高兴来到这里。
SRT 字幕块结构说明
1← 序号00:00:03,500 --> 00:00:06,120← 起止时间码Thanks for joining the call today.← 对话文本
VTT 字幕块结构说明
WEBVTT← 必需的标头00:00:03.500 --> 00:00:06.120← 起止时间码Thanks for joining the call today.← 对话文本

为什么这在 2026 年依然重要

浏览器原生字幕功能和 AI 转录工具(YouTube、Zoom、OpenAI Whisper 导出)默认使用 WebVTT,因为它是 HTML5 <track> 的标准格式。但相当一部分桌面视频编辑软件、旧版媒体播放器,以及流媒体平台的字幕上传表单,仍然期望——甚至只接受——.srt。转换能让你的字幕在这两种环境之间保持可移植性,不必重新输入任何内容,也不必手动重新同步时间。

没有任何内容离开你的浏览器

因为这次转换是纯文本转换(没有视频处理,没有 OCR,没有外部 API),它能即时完成,并且完全在客户端运行。这也意味着它适用于那些你不愿意仅为了重新格式化一个字幕文件就交给第三方服务器处理的机密录音(证词、内部全员大会视频、未发布的预告片)。

谁会把 VTT 转换为 SRT,以及原因

接收 AI 生成字幕(Whisper、Otter.ai、Zoom、Teams)的视频编辑人员往往特别需要 SRT,因为他们的编辑套件(Premiere、DaVinci Resolve、Final Cut)的字幕导入功能是围绕更旧、兼容性更通用的格式构建的。本地化服务商经常要求将 SRT 作为标准输入格式,无论来源是什么。而任何想把字幕上传到早于 WebVTT 普及之前就已存在的视频平台或广告服务器的人,在尝试直接上传 .vtt 文件时都会碰壁。在本地一次性完成转换,就能避免从原始字幕工具重新导出,或手动重新输入时间码。

哪些内容会被重新编号,以及为什么这是必须的

WebVTT 的字幕标识符是可选的,如果存在,可以是任意字符串:一个 UUID、一个时间戳,或者什么都没有。SRT 的规范更严格:每条字幕都必须带有从 1 开始的连续整数索引,不能有间隔,也不能重复,否则许多播放器会在遇到第一个错误索引后拒绝继续解析该文件。SubToolDesk 会丢弃源 VTT 中原有的任何标识符(如果有的话),并在导出时生成一个干净、无间隔的序列,因此无论原始编号多么不规则,结果都会是有效的 SRT。

这个转换器会保留什么、去除什么

会保留:

  • 每一个对话文本的词语,保持原有顺序。
  • 每条字幕精确到毫秒的时间信息。
  • 每条字幕对应一个区块,保持原有顺序,从 1 开始重新按顺序编号(SRT 要求如此;WebVTT 则不需要)。
  • 像 Jordan: 这样的纯文本说话人前缀,因为去除说话人标签默认是关闭的。

会去除或改变:

  • WEBVTT 标头行,以及任何 NOTE、STYLE 或 REGION 区块,因为它们在 SRT 中没有对应形式。
  • 毫秒前的句号,在每个时间码中都会被替换为逗号。
  • 时间戳行上的字幕设置,比如 align:start position:10%,SRT 没有对应的语法,因此无论开关状态如何,这些设置总会被去除。
  • 诸如 <v 说话人姓名> 这样的语音标签,当去除格式标签开启时(本页面默认就是开启的)。

常见问题及解决方法

  • <v 说话人姓名> 标签仍然以字面文本的形式出现在 SRT 输出中:打开去除格式标签,只有在你自己改动过的情况下它才会处于关闭状态;本页面默认开启它,正是因为 SRT 没有可以保留语音标签的语法。
  • 像 Jordan: 这样的纯文本名称仍然作为每行的前缀:这是一个独立的开关——去除说话人标签,本页面默认关闭,因为 SRT 完全可以正常表示纯文本前缀;如果你也想去除它们,打开这个开关即可。
  • 输出中毫秒前仍然显示句号而不是逗号:请确认你看到的是实际的 .srt 输出,而不是原始 .vtt 的粘贴副本;转换器上方的格式徽章会确认当前激活的是哪一个。
  • 字幕定位或对齐信息好像消失了:这是正常现象,不是故障;SRT 没有 align 或 position 设置的对应语法,因此无论开关状态如何,转换过程中都会丢弃它们。
  • 播放器拒绝转换后的文件,或在第一条字幕之后就停止了:检查转换前格式徽章是否显示为 VTT;一段被严重截断的粘贴内容会破坏字幕检测,产生索引缺失或格式错误的字幕。
  • 带声调符号的字母或非英文文本显示为乱码,例如 é:说明源 .vtt 文件没有以 UTF-8 编码保存;请重新导出或以 UTF-8 重新保存后再重新上传。

关于字幕设置和样式的说明

WebVTT 的定位元数据(align:start position:10%、行偏移以及类似设置)在 SRT 中没有对应形式。SubRip 字幕总是渲染在播放器的默认位置,没有逐条字幕的位置控制。这类元数据会在转换过程中被直接丢弃,而不是作为残留文本留在输出里——这正是去除格式标签开关所控制的内容。如果你的 WebVTT 文件出于无障碍访问或样式方面的原因依赖自定义定位,那个细节在转为 SRT 后不会保留下来,这是 SRT 格式本身的限制,而不是这个转换器的问题。

常见问题

如何把 VTT 转换为 SRT?

将你的 .vtt 文件拖到上方的转换器中,或将其内容直接粘贴到左侧面板。一旦格式徽章确认为 VTT,点击下载或复制。这个工具会把每个时间码中的句号替换为逗号,去除 WEBVTT 标头和任何字幕设置元数据,并按顺序重新编号字幕。无需安装,无需账号,无需上传。

把 VTT 转换为 SRT 实际会改变什么?

三件事:每个时间码中毫秒前的句号会被逗号替换,WEBVTT 标头和任何字幕设置元数据会被去除,字幕会从 1 开始按顺序重新编号——这是 SRT 要求而 WebVTT 不要求的。

<v 说话人> 语音标签和字幕定位信息会发生什么?

SRT 对这两者都没有对应的语法,因此这个工具在转换时默认会去除它们(如果你想在字幕正文里保留原始标签文本,可以关闭去除格式标签开关)。

为什么我一开始就需要 SRT 而不是 VTT?

SRT 是兼容性最通用的字幕格式:VLC、大多数媒体播放器、Adobe Premiere、DaVinci Resolve,以及大多数字幕轨道上传表单都接受 .srt,而一些较旧的工具完全不认识 .vtt。

转换会损失任何时间精度吗?

不会。毫秒精度会被精确保留。只有分隔符和周边的元数据会改变。

我能转换一个没有字幕标识符的 VTT 文件吗?

可以。解析器通过时间戳行(始终包含 -->)来定位每条字幕,因此缺少标识符行不会影响解析。

转换后我可以用什么打开或编辑 SRT 文件?

任何纯文本编辑器都可以,Windows 上的记事本,Mac 上的文本编辑。如果需要调整时间或更友好的界面,Aegisub 或 Subtitle Edit 这类专用字幕编辑器能原生处理 SRT,大多数媒体播放器(包括 VLC)也会把它和对应的视频文件一起加载,用于预览同步效果。