SRT和VTT字幕格式有什么区别?平台支持与互转方法
SRT与VTT字幕格式对比:时间码写法、WEBVTT文件头、样式与位置设置、各平台支持哪种格式,以及如何把srt字幕转成vtt、vtt转srt。

其他语言版本: English, Русский, Українська, Dansk, Deutsch, Español, Français, Italiano, Magyar, Nederlands, Norsk bokmål, Polski, Português (Brasil), Suomi, Svenska, Türkçe, Ελληνικά, עברית, العربية, 한국어, 日本語, 中文(台灣), Indonesia, Tiếng Việt
SRT 和 VTT 都是纯文本字幕格式,每条字幕都记录开始时间、结束时间和要显示的文字;做简单字幕时,两者几乎可以互换。区别不多,但很严格:VTT(WebVTT)文件必须以 WEBVTT 一行开头,毫秒前用句点,而 SRT 没有文件头,毫秒前用逗号;此外,VTT 还支持位置、样式和注释。简单来说:自己网站上的 HTML5 视频用 VTT,Facebook 和 LinkedIn 用 SRT,YouTube 和 Vimeo 两种都可以。
本文用示例展示两种格式,列出各平台分别接受哪种格式,并说明如何在不打乱时间轴的前提下把 srt 字幕转成 vtt,或反过来转换。
SRT 和 VTT 一览对比
| SRT(SubRip) | VTT(WebVTT) | |
|---|---|---|
| 文件扩展名 | .srt | .vtt |
| 文件头 | 无 | 必需:第一行是 WEBVTT |
| 时间码格式 | 00:01:02,500(逗号) | 00:01:02.500(句点);小时可省略 |
| 字幕序号 | 必需,按顺序编号 | 可选的标识符(数字或名称) |
| 位置设置 | 未定义 | 字幕设置:line、position、size、align、vertical |
| 样式 | 非官方的 <i>、<b>、<u>,有时还有 <font> | <b>、<i>、<u>、类名、说话人标签、带 CSS 的 STYLE 块 |
| 注释 | 不支持 | NOTE 块 |
| 正式规范 | 无(事实标准) | 有,W3C 规范 |
| 常见用途 | 社交平台、视频剪辑软件、桌面播放器 | HTML5 视频、网页播放器、流媒体 |
SRT 文件是什么?
SRT 文件是 SubRip 字幕文件:一份带编号的纯文本字幕列表。每条字幕由三部分组成:序号、时间行,以及一行或多行文字,之后空一行再开始下一条。
1
00:00:01,000 --> 00:00:04,200
欢迎收看本季度业务回顾。
2
00:00:04,600 --> 00:00:08,000
<i>今天我们会谈到销售、
招聘和产品路线图。</i>
时间格式是 时:分:秒,毫秒,小时始终为两位数,并且使用逗号。SRT 从未被正式标准化,所以各软件对格式标签的支持不一。许多桌面播放器能显示 <i> 和 <b>,但 YouTube 帮助页面说明它只支持不含样式标记、以纯 UTF-8 保存的基本 SRT 文件。正因为简单,几乎所有视频剪辑软件和社交平台都能读取 SRT,用任何文本编辑器也都能修改它。
VTT(WebVTT)文件是什么?
WebVTT(Web Video Text Tracks)是专为网页设计的字幕格式。MDN 的 WebVTT 参考文档总结了它的规则:文件必须以 WEBVTT 开头,必须是 UTF-8 编码,时间码中毫秒前用句点。小时可以省略,所以 01:02.500 也是合法的。
WEBVTT
NOTE 季度业务回顾,中文字幕
intro
00:01.000 --> 00:04.200
欢迎收看本季度业务回顾。
00:04.600 --> 00:08.000 line:85% align:center
<v Maria>今天我们会谈到销售、
招聘和产品路线图。</v>
这里有三样东西是 SRT 里没有的:
- **字幕设置(cue settings)**写在时间行后面,用来控制文字出现的位置:
line(垂直位置)、position和size(水平位置和宽度)、align(start、center、end)以及vertical(用于竖排文字)。 - 说话人和类名标签,例如
<v Maria>或<c.highlight>,用来标明谁在说话或套用某种样式。 - NOTE 块是观众永远看不到的注释。字幕标识符(如上例中的
intro)是可选的。
你还可以在第一条字幕之前用 STYLE 块嵌入 CSS:
WEBVTT
STYLE
::cue {
color: #ffffff;
background-color: rgba(0, 0, 0, 0.7);
}
::cue(v[voice="Maria"]) {
color: #ffd166;
}
在浏览器以外,样式支持参差不齐。例如 YouTube 接受 WebVTT 的位置设置,但样式只限粗体、斜体和下划线。请把样式当作锦上添花,而不是每个播放器都会遵守的东西。
哪些平台支持 SRT 或 VTT?
观众大多看不到字幕文件的格式,但上传表单很挑剔。下面是我们在各平台帮助页面和近期指南中查到的情况(2026 年 10 月核对;界面会变化,请以当前帮助中心为准)。
| 平台 | SRT | VTT | 说明 |
|---|---|---|---|
| YouTube | 支持 | 支持 | SRT 列为基本格式(无样式标记);WebVTT 列为高级格式(支持位置,样式有限)。需纯 UTF-8。 |
| Vimeo | 支持 | 支持 | Vimeo 帮助中心建议尽量使用 WebVTT;文件必须为 UTF-8。 |
| 支持 | 未见文档说明 | 各类指南都只提到 SRT,文件名需带语言区域后缀,如 video.en_US.srt。 | |
| 支持 | 未见文档说明 | LinkedIn 帮助页面介绍了在电脑端发布前附加 SRT 文件的方法。 | |
| TikTok | 未找到直接上传方式 | 未找到直接上传方式 | 我们没有找到官方附加字幕文件的方法;可以用 TikTok 自带的字幕功能,或把字幕烧录进视频。 |
HTML5 <video> | 原生不支持 | 支持 | <track> 元素就是为 WebVTT 设计的。 |
B 站、抖音、微信视频号等中文平台我们没有逐一核实,它们的字幕上传规则请以各自的帮助中心为准;如果平台不支持外挂字幕文件,同样可以把字幕烧录进视频。
YouTube 用的是 SRT 还是 VTT?
两种都用。YouTube 的支持的字幕文件格式页面把 SubRip(.srt)列在基本格式中,把 WebVTT(.vtt)列在高级格式中。如果你只需要文字和时间,SRT 出问题的可能性最小;如果需要让字幕避开画面上的文字、换个位置显示,就用 VTT。
自己网站上的 HTML5 视频
对于自建播放器,VTT 是唯一现实的选择:
<video controls src="update.mp4">
<track kind="subtitles" src="update.en.vtt" srclang="en" label="English" default>
</video>
中文字幕可以把 srclang 设为 zh-CN、label 设为“简体中文”。如果手头只有 SRT 文件,请先转换。关于烧录字幕和短视频平台,请看我们的如何给视频添加字幕指南。
如何把 SRT 转成 VTT(以及 VTT 转 SRT)
由于两种格式非常接近,转换基本是机械操作。短文件可以手动改,长一点的最好用转换器。
手动 SRT 转 VTT
- 在第一行加上
WEBVTT,后面空一行。 - 只在时间行里,把毫秒前的逗号换成句点:
00:00:04,600变成00:00:04.600。 - 保留字幕序号;WebVTT 会把它们当作标识符。
- 以 UTF-8 编码、
.vtt扩展名保存。
使用查找替换时要小心:如果替换所有逗号,台词里的半角逗号(英文内容或中英混排时很常见)也会被改掉。
手动 VTT 转 SRT
- 删除
WEBVTT文件头以及所有STYLE、NOTE和REGION块。 - 删除时间行末尾的字幕设置。
- 补上缺失的小时(
01:02.500变成00:01:02.500),并把句点改成逗号。 - 按 1、2、3 的顺序给字幕编号,并删除
<v Maria>这类 VTT 专用标签。
在浏览器中转换
Audiotexta 免费的 SRT 转 VTT 转换器和 VTT 转 SRT 转换器会替你完成这些步骤。你只需粘贴字幕或选择文件,转换在浏览器中进行,不会上传任何内容。时间精确到毫秒,开头的“姓名:”说话人前缀也会保留。需要坦白说明的一点是:转换器会去掉文字中的 HTML 和 VTT 样式标签,所以如果你用到了斜体或自定义样式,转换后需要重新添加,或者手动编辑文件。
SRT 和 VTT 常见错误及解决方法
- 缺少
WEBVTT文件头。 没有它,浏览器会忽略 VTT 文件。把它加在文件的第一行。 - VTT 时间码用了逗号,或 SRT 用了句点。 这通常是直接改名而没有转换造成的。只修改时间行即可。
- 编码错误。 中文显示成乱码或问号,通常说明文件不是 UTF-8 编码(例如保存成了 GBK)。在文本编辑器里重新以 UTF-8 保存。
- 保存成了 .srt.txt。 有些编辑器会悄悄加上
.txt。打开“显示文件扩展名”后重新命名。 - 缺少空行。 每条字幕之间必须有一个空行;否则字幕会粘在一起,或者文件解析中断。
- 结束时间早于开始时间,或字幕重叠。 播放器可能会跳过这条字幕。请检查修改过的字幕的时间。
- Facebook 字幕不显示。 各类指南都指向文件名:它应该以
.en_US.srt这样的语言区域代码结尾(简体中文通常是.zh_CN.srt)。 - VTT 在本地能用,放到服务器上就不行。 服务器需以
text/vtt内容类型返回该文件。如果文件在另一个域名下,video 元素需要加上crossorigin属性,服务器也必须发送 CORS 头。 - 字幕默认不显示。 如果希望字幕自动显示,请在
<track>元素上加default属性。
应该导出哪种格式?
如果你是从零开始制作字幕,通常不需要事先决定。Audiotexta 的字幕生成器会把音频转写成文字,并同时导出 SRT 和 VTT,免费方案也可以(无需账户,适用于 30 分钟以内的文件);导出前还可以编辑转写稿,确保时间和措辞都准确。我们的 SRT 和 VTT 字幕生成指南介绍了从转写到每行长度、阅读速度的完整流程。
经验法则:目标是社交平台或视频剪辑软件时导出 SRT,用于网站和网页播放器时导出 VTT,如果要在多个地方发布,就两种都保留。文字和时间完全一样,变的只是外面那层“包装”。
如何把 SRT 字幕转换成 VTT
- 打开 SRT 转 VTT 转换器. 在浏览器中打开 Audiotexta 的 SRT 转 VTT 工具。转换在本地完成,字幕文件不会被上传。
- 粘贴字幕或选择文件. 把 .srt 文件的内容粘贴到输入框,或从电脑中选择该文件,并检查识别出的字幕条数是否正确。
- 下载 VTT 文件. 下载转换结果。转换器会加上 WEBVTT 文件头,并把毫秒前的逗号改成句点,所有时间点保持不变。
- 在播放器中测试. 把 .vtt 文件挂到视频上,例如通过 HTML5 的 track 元素或平台的字幕上传功能,播放几条字幕,确认时间和文字(包括中文字符)显示正常。
常见问题
SRT 和 VTT 最主要的区别是什么?
两者都是用纯文本保存带时间轴的字幕。VTT 文件必须以 WEBVTT 一行开头,毫秒前用句点;SRT 没有文件头,毫秒前用逗号。VTT 还支持字幕位置、CSS 样式和注释,而 SRT 没有正式定义这些功能。
YouTube 用的是 SRT 还是 VTT?
两种都支持。YouTube 帮助页面把 SubRip(.srt)列为不含样式标记的基本格式,把 WebVTT(.vtt)列为支持位置设置的高级格式,样式仅限粗体、斜体和下划线。文件应为纯 UTF-8 编码。
能直接把 .srt 文件改名成 .vtt 吗?
不行。改名不会加上必需的 WEBVTT 文件头,也不会把时间码里的逗号改成句点,浏览器等严格的播放器会拒绝该文件或什么都不显示。请使用转换器,或手动修改文件头和时间行。
把 VTT 转成 SRT 会丢失什么吗?
通常只会丢失 VTT 特有的内容:位置、对齐等字幕设置,STYLE 样式块,NOTE 注释,以及说话人或类名标签。文字和时间保持不变,而大多数平台本来也只用这两样。
自己网站上的 HTML5 视频应该用哪种格式?
用 VTT。HTML 的 track 元素就是为 WebVTT 设计的,浏览器要求有 WEBVTT 文件头并用句点分隔毫秒。服务器返回该文件时请使用 text/vtt 内容类型。
免费试用 Audiotexta
上传文件或粘贴链接,几分钟即可获得转写稿。