OKfmt

WebVTT 字幕语法详解:时间码到样式的开发调试指南

本文讲解WebVTT核心语法规则,覆盖注释、时间码、行内标签、CSS样式、元数据等8类核心模块,帮助前端工程师调试网页字幕。

更新于 2026-08-11

基础文件结构:头与注释块

标准WebVTT文件第一行必须是WEBVTT声明,后续可接空格和文件描述文本,空行分隔不同结构块。不添加WEBVTT头的文件,多数HTML5播放器无法正常解析。

NOTE注释块用于添加开发标注或字幕说明,支持单行或多行内容,不会被播放器渲染展示。开发调试阶段可使用NOTE块标记待修改的字幕段落,不影响最终播放效果。

Cue时间码规则说明

每个字幕 cue 由时间码和显示文本组成,时间码格式支持两种毫秒分隔符写法,可使用点号分隔,也可使用逗号分隔,绝大多数现代浏览器仅支持点号写法。

时间码的小时位为可选配置,时长不满1小时的字幕可以省略小时位,省略后格式为MM:SS.sss,完整格式为HH:MM:SS.sss,起始时间与结束时间用 --> 符号分隔。

时间码示例合法性说明
00:01.234 --> 00:04.567合法,省略小时位,点号分隔毫秒
00:00:01,234 --> 00:00:04,567不兼容,Chrome等主流浏览器不识别逗号
01:12:34.456 --> 01:12:38.789合法,完整带小时位格式

行内文本样式标签

WebVTT支持六类标准行内标签,用于修改局部文本的展示样式。其中b/i/u分别对应加粗、斜体、下划线,规则与HTML对应标签一致,开发者可直接手写使用。

ruby标签用于标注拼音,lang标签用于标记不同语种文本,voice标签用于标注说话人,这类标签主要用于元数据分类,播放器可基于标签做差异化渲染。

  • <b>加粗文本</b>:浏览器默认加粗展示
  • <i>斜体文本</i>:浏览器默认斜体展示
  • <ruby>汉<rt>hàn</rt></ruby>:汉字拼音标注格式

样式与区域配置

::cue伪元素是CSS针对WebVTT字幕提供的专属伪元素,开发者可通过该伪元素修改网页中所有字幕的默认样式,支持修改颜色、字体、背景等常规CSS属性。

STYLE块用于在WebVTT文件内部定义全局或特定cue的样式,REGION块用于定义字幕的渲染区域,支持多区域同时展示不同字幕,常用于多语言字幕分栏展示场景。

HTML5集成规范

HTML5的track元素用于引入外部WebVTT字幕文件,track元素的kind属性定义字幕类型,共有subtitles、captions、descriptions、chapters、metadata五种取值。

其中subtitles对应通用翻译字幕,captions对应听力障碍用户的字幕,包含环境音标注,chapters对应章节导航,metadata存储页面元数据,不做显示。不同播放器会根据kind属性做差异化处理。

常见问题

WebVTT和SRT字幕格式有什么区别?

WebVTT支持样式、元数据和区域配置,可直接被HTML5原生解析使用;SRT仅支持基础时间码和文本,多用于本地视频播放场景。

所有浏览器都支持WebVTT的::cue伪元素吗?

Chrome 29版本及以上、Firefox 35版本及以上、Safari 6.1版本及以上支持该特性,IE全版本不支持WebVTT原生解析。

WebVTT可以嵌入HTML标签吗?

不允许嵌入自定义HTML标签,仅允许使用规范定义的六种行内标签,未定义的标签会被浏览器作为普通文本输出显示。