VTT 字幕格式
这种格式能表达什么
- 文本样式
- 粗体与斜体
- 屏幕定位
- 否
- 卡拉 OK 计时
- 否
- 字幕条内换行
- 是
- 时间轴
- 每条字幕都有开始与结束时间
- 时间精度
- 1 毫秒
- 时间以帧号存储
- 否
- 从右到左的文字
- 是
示例
一份典型的 WebVTT,以及从里面读出了什么
文件
WEBVTT
intro
00:00:01.000 --> 00:00:04.000
Hello there.
00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.
从中读出了什么
2 cues, 2 lines of text
00:00:01.000 → 00:00:04.000
Hello there.
00:00:04.500 → 00:00:08.000
Second line with italics. [italic ×1]
[settings align:start position:10%]
Outside the cues:
header "WEBVTT"右栏不是转换后的文件,而是本站从左边这份文件里读出来的内容,也是它每一次转换的起点。
一份带脏数据的 WebVTT,以及还能读出什么
文件
WEBVTT - boundary sample
NOTE a comment
spanning two lines
STYLE
::cue { color: red }
REGION
id:fred
width:40%
00:01.000 --> 00:03.000
Hours-less timecode with <b>bold</b> and <v Roger>a voice tag.
00:05.000 --> 00:04.000
End before start.
NOTE between cues
00:07.000 --> 00:09.000
entities stay literal.
00:10.000 --> oops
Unreadable end time.
NOTE trailing
从中读出了什么
3 cues, 3 lines of text
00:00:01.000 → 00:00:03.000
Hours-less timecode with bold and <v Roger>a voice tag. [bold ×1]
00:00:05.000 → 00:00:05.001
End before start.
00:00:07.000 → 00:00:09.000
entities stay literal.
Outside the cues:
header "WEBVTT - boundary sample"
blocks NOTE ×3, STYLE, REGION
Reported while reading — repaired or skipped, never silently:
1 × blocks that were neither a cue nor a NOTE/STYLE/REGION block (they were skipped)
1 × cues whose end time was not after their start time (they were given a 1ms duration)真实文件常带 BOM、Windows 换行、时间码前的杂行,或者根本读不出的时间码。这些都不会抛错:读不出来的部分会被报告出来,而不是悄悄丢掉。
把 WebVTT (VTT) 转成其他格式
每一个都完全在你的浏览器里运行。标签标明了那个方向要付出什么代价,打开之前就能看到。
转换为此格式
- SubRip (SRT) → WebVTT (VTT)
- Advanced SubStation Alpha (ASS) → WebVTT (VTT)
- SubStation Alpha (SSA) → WebVTT (VTT)
- YouTube SBV → WebVTT (VTT)
- SAMI (SMI) → WebVTT (VTT)
- LRC Lyrics → WebVTT (VTT)
- MicroDVD → WebVTT (VTT)
- TTML (Timed Text) → WebVTT (VTT)
- SubtitleMatrix JSON → WebVTT (VTT)
- Plain Text (TXT) → WebVTT (VTT)
- CSV Spreadsheet → WebVTT (VTT)
WebVTT(`VTT`)是网页用的字幕格式,HTML5 的 `<track>` 元素直接加载它,浏览器、流媒体播放器和大多数现代平台都按它工作。这一页是它的说明页:它到底能存什么、存不了什么,以及可以转去的每一种格式各有一页。
它存的东西比 SRT 多一层。除了每条 cue 的正文与到毫秒的起止时间,还能给 cue 加一个自由形式的标识符,在正文里写 `<b>`、`<i>`、`<u>`、`<font color="…">` 这类行内标签,并用 `<c>`、`<v>` 标记类与说话人。cue 之外还可以有 `WEBVTT` 头部(可带一句注释)、`NOTE` 注释、`STYLE` 块(CSS 规则)、`REGION` 区域定义,以及跟在时间码后的 setting,比如 `align:start`、`position:10%`、`line:0`。
上方那张能力表就是全部,没有藏着的功能。哪一行写“否”,就是转进 VTT 时真的会丢掉的东西;下面每个转换页都会在打开文件之前把那份清单说清楚。反过来,VTT 往外转也一样——没有任何一种格式能装下 VTT 的全部,所以每个方向都有自己的损失清单,选目标格式要按你能接受哪份清单来定,而不是按见得最多的那种格式来定。
右栏展示的不是转换结果,而是本站从左边这份文件里读出了什么:逐条 cue 的起止与正文、带出的行内样式、cue 之外的头部与块,以及读的时候修好或跳过的地方。所有转换都在浏览器里跑,文件不上传、不需要账号——对受保密协议约束的素材、患者资料或尚未解禁的播出内容,这一点是硬要求。
常见问题
VTT 文件是什么?
`.vtt` 是网页的字幕格式。HTML5 的 `<track>` 元素直接加载它,浏览器、流媒体播放器与大多数现代平台都按它工作。它装的内容比 SRT 多一层:cue 之外还有头部、注释、样式块与 cue 级 setting。
VTT 格式能存样式吗?
能存一点,而且是在文本里而不是在文本旁边:强调与颜色写成行内标签(`<b>`、`<i>`、`<u>`、`<font color="…">`)。字体大小、描边、边距都不声明,由显示页面的播放器决定;cue 上方也可以有一个放 CSS 规则的 `STYLE` 块,文件里有就会原样保留。
VTT 的每条 cue 都有开始和结束时间吗?
有。时间写成 `00:00:04.126`,精度到毫秒,这个数字是精确的,所以一条 cue 可以很短、很长,也可以和下一条重叠,文件不会额外暗示什么。
VTT 文件在 cue 之外还能存什么?
头部 `WEBVTT` 一行,可选的 `NOTE` 注释、`STYLE` 样式块、`REGION` 区域定义,以及跟在时间码后的 `align`、`position`、`line` 等 setting。转进没有这些构造的格式时,它们会被丢掉,那一页会说清楚。
VTT 应该转成哪种格式?
这一站没有任何一种格式能装下 VTT 的全部,所以没有免费的方向:每个转换页都有自己的损失清单。按你能接受哪一份清单来选目标,而不是按你最常看到的那种格式来选。
这里的 VTT 转换会上传文件吗?
不会。所有转换都在浏览器里完成,没有一个字节发往服务器;页面加载过之后断网还能继续用。这一点对保密素材、患者资料与未解禁的播出内容尤其要紧。