WebVTT
网页的字幕格式,也就是浏览器通过 HTML 的 <track> 显示的内容。它沿用 SubRip 的文字块,加上文件头,并提供了位置、样式和说话人的设置方式。
概览
| 扩展名 | .vtt |
|---|---|
| 媒体类型 | text/vtt |
| 规范 | W3C,WebVTT: The Web Video Text Tracks Format,处于候选推荐阶段 |
| 时间精度 | 毫秒 |
| 文本编码 | 始终为 UTF-8,规范要求如此。Subtitld 也能读取其他编码。 |
| 样式 | 斜体、粗体和下划线标签;颜色通过类名和 CSS(::cue)设置。没有删除线。 |
| 位置 | Cue 设置(line、position、align、size、vertical)以及区域(regions) |
| 说话人 | 语音标签:<v Thom> |
| 在容器中 | Matroska 中为 S_TEXT/WEBVTT;MP4 中为 wvtt(ISO/IEC 14496-30);以及 HLS 和 DASH 流 |
Cue 的结构
文件由文件头和若干 cue 组成。每个 cue 与 SubRip 的文字块相似,但有两个可选部分。
WEBVTT intro 00:00:23.000 --> 00:00:24.500 line:0 <v Celia>You're a jerk, <i>Thom</i>.
- 1 · 文件头
WEBVTT,可单独一行,也可后接一个空格和标题,然后空一行。缺少它,浏览器会拒绝整个文件。 - 2 · 标识符
可选。给 cue 起的名称,单独占一行:可以是像 SubRip 那样的数字,也可以是一个词。
- 3 · 时间
开始时间、箭头
-->、结束时间。毫秒前使用句点。 - 4 · 设置
可选。指定 cue 显示在屏幕的哪个位置,放在结束时间之后。
- 5 · 文本
文字行,可使用样式和语音标签。空行会结束 cue,因此 cue 内部不能有空行。
时间码
可以省略小时。 00:27.000 表示同一时间,很多不足一小时的文件就是这样写的。毫秒前用逗号是 SubRip 的习惯,而不是 WebVTT 的;Subtitld 仍然可以读取。
除 cue 以外的块
| 块 | 内容 |
|---|---|
NOTE |
注释,供人阅读。播放器会跳过它。 |
STYLE |
作用于 cue 的 CSS,通过 ::cue 实现。位于第一个 cue 之前。 |
REGION |
屏幕上的一块命名区域,cue 可以在其中滚动显示。 |
Cue 中的文字
| 标签 | 效果 |
|---|---|
<i>…</i>、<b>…</b>、<u>…</u> |
斜体、粗体、下划线 |
<c.yellow>…</c> |
类名,可由 CSS(或 WebVTT 自带的颜色类)上色 |
<v Thom>… |
语音:谁在说话。结束标签可以省略。 |
<lang pt>…</lang> |
一段文字的语言 |
<ruby>漢<rt>kan</rt></ruby> |
文字上方的注音,用于日语和中文 |
<00:00:28.500> |
cue 内部的时间戳,用于卡拉 OK 式逐字显示 |
& < > |
&、<、> 以及不换行空格,否则它们会被当作标记 |
颜色
有八种颜色无需任何 CSS 即可使用:white、lime、cyan、red、yellow、magenta、blue 和 black,另外还有对应的 bg_ 版本用于背景。其他颜色需要你自己定义一个类,并写入 STYLE 块:
STYLE
::cue(.gold) { color: #ffd700; }
00:00:30.800 --> 00:00:34.000
<c.gold>Why don't you just admit that</c>
并非所有播放器都会读取 STYLE 块;WebVTT 自带的颜色类更稳妥。只要颜色属于这八种之一,Subtitld 就会使用它们。
Cue 设置
| 设置 | 作用 |
|---|---|
line:0 |
在屏幕上的行:数字从顶部开始计数(负数从底部开始),百分比从顶边算起 |
position:10% |
cue 的文字框在屏幕上水平方向的位置 |
align:start |
文字框内的对齐方式:start、center、end、left、right |
size:50% |
文字框的宽度 |
vertical:rl |
竖排文字,从右到左或从左到右 |
region:fred |
在 REGION 中显示该 cue |
Subtitld 把 line、position 和 align 读取为字幕在屏幕上的位置,与 SubRip 的 {\an1} 到 {\an9} 相同的九个位置,并以同样的方式写回:顶部为 line:0,中间为 line:50%,center,两侧分别为 position:10% align:start 和 position:90% align:end。
Subtitld 中的 WebVTT
- 每条字幕的文字和换行
- 斜体、粗体、下划线和颜色
- 字幕在屏幕上的位置
- 说话人,以语音标签的形式保存
- 开始和结束时间,精确到毫秒,并按顺序排列
- 删除线:WebVTT 没有对应的标签
- 说话人的脸和颜色
- 与原文并列的译文(可以替代原文,或放在原文下方)
- 配音和元数据
保存 .usfx 项目即可保留这些内容。
打开 WebVTT 文件
Subtitld 通过时间行找到每个 cue,并会:
- 把文件头、
NOTE、STYLE和REGION块识别为其本身,而不是字幕;cue 标识符则作为名称处理; - 识别带或不带小时、句点或逗号的时间;
- 把语音作为字幕的说话人,便于配音;
- 识别 WebVTT 的颜色类,以及
STYLE块为其他类定义的颜色; - 把
line、position和align作为字幕在屏幕上的位置; - 支持任意编码,尽管 WebVTT 要求使用 UTF-8。
它无法表示的内容会被省略,包括区域、cue 的宽度、竖排文字、注音和卡拉 OK 式时间戳。文字本身会保留。
导出 WebVTT
依次点击 导出,再选择 字幕 和 VTT,可以设置以下选项:
- 文本原文、译文,或两者都要,译文放在下方。
- 说话人名字不写出;放在文字前(Thom:…);或作为语音标签(
<v Thom>),这是 WebVTT 自己的方式。 - 格式保留,或删除。
- 偏移时间把所有字幕整体提前或推后相同的时长。
文件始终为 UTF-8,符合 WebVTT 的要求:先是 WEBVTT,然后是按开始时间排序的 cue,每个时间都带小时。会被当作标记的字符会写成实体形式,空字幕会被省略。
在网页上使用
<video controls src="tears-of-steel.mp4">
<track kind="subtitles" src="tears-of-steel.en.vtt"
srclang="en" label="English" default>
</video>
以 text/vtt 类型提供文件。如果视频来自其他域名,视频需要设置 crossorigin,服务器需要返回 Access-Control-Allow-Origin 头,否则浏览器不会加载这条字幕轨道。
WebVTT 还是 SubRip?
播放器、编辑器和上传场景用 SubRip;网页视频用 WebVTT。SubRip 页面把两者放在一起做了对比。
趣闻
它最初叫 WebSRT,在 WHATWG 为 HTML5 新的 <track> 元素起草,以 SubRip 为基础,之后才改名为 WebVTT。
每个文件开头的六个字母。浏览器如果找不到它,就会拒绝整条字幕轨道。
无需 CSS 就能显示的颜色:白、青绿、青色、红、黄、洋红、蓝和黑,既可用于文字,也可用于背景。
相关格式
在 Subtitld 中打开它,连同视频一起,在波形上重新打轴。