跳到主要内容
SubtitleMatrix

VTT 字幕格式

格式转换WebVTT(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
&nbsp; 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
    &nbsp; 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) 转成其他格式

每一个都完全在你的浏览器里运行。标签标明了那个方向要付出什么代价,打开之前就能看到。

转换为此格式

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 转换会上传文件吗?

不会。所有转换都在浏览器里完成,没有一个字节发往服务器;页面加载过之后断网还能继续用。这一点对保密素材、患者资料与未解禁的播出内容尤其要紧。