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. 1 · 文件头

    WEBVTT,可单独一行,也可后接一个空格和标题,然后空一行。缺少它,浏览器会拒绝整个文件。

  2. 2 · 标识符

    可选。给 cue 起的名称,单独占一行:可以是像 SubRip 那样的数字,也可以是一个词。

  3. 3 · 时间

    开始时间、箭头 -->、结束时间。毫秒前使用句点。

  4. 4 · 设置

    可选。指定 cue 显示在屏幕的哪个位置,放在结束时间之后。

  5. 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 式逐字显示
&amp; &lt; &gt; &nbsp; &、<、> 以及不换行空格,否则它们会被当作标记

颜色

有八种颜色无需任何 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

保存在 .vtt 中
  • 每条字幕的文字和换行
  • 斜体、粗体、下划线和颜色
  • 字幕在屏幕上的位置
  • 说话人,以语音标签的形式保存
  • 开始和结束时间,精确到毫秒,并按顺序排列
无处可存
  • 删除线:WebVTT 没有对应的标签
  • 说话人的脸和颜色
  • 与原文并列的译文(可以替代原文,或放在原文下方)
  • 配音和元数据

保存 .usfx 项目即可保留这些内容。

打开 WebVTT 文件

Subtitld 通过时间行找到每个 cue,并会:

  • 把文件头、NOTE、STYLE 和 REGION 块识别为其本身,而不是字幕;cue 标识符则作为名称处理;
  • 识别带或不带小时、句点或逗号的时间;
  • 把语音作为字幕的说话人,便于配音;
  • 识别 WebVTT 的颜色类,以及 STYLE 块为其他类定义的颜色;
  • 把 line、position 和 align 作为字幕在屏幕上的位置;
  • 支持任意编码,尽管 WebVTT 要求使用 UTF-8。

它无法表示的内容会被省略,包括区域、cue 的宽度、竖排文字、注音和卡拉 OK 式时间戳。文字本身会保留。

导出 WebVTT

Subtitld 的导出对话框,已选择 VTT,说话人以语音标签的形式写入

依次点击 导出,再选择 字幕 和 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 页面把两者放在一起做了对比。

趣闻

2010

它最初叫 WebSRT,在 WHATWG 为 HTML5 新的 <track> 元素起草,以 SubRip 为基础,之后才改名为 WebVTT。

WEBVTT

每个文件开头的六个字母。浏览器如果找不到它,就会拒绝整条字幕轨道。

8

无需 CSS 就能显示的颜色:白、青绿、青色、红、黄、洋红、蓝和黑,既可用于文字,也可用于背景。

相关格式

有 .vtt 需要修正吗?

在 Subtitld 中打开它,连同视频一起,在波形上重新打轴。

下载 Subtitld