[40] WebVTT は、動画や音声に対する字幕などの注釈を記述するための形式です。 HTML と共に利用するために開発されました。
[79] WebVTT の構文、意味、構文解析の方法は WebVTT 仕様で規定されていますが、 API や媒体要素の処理モデルとの絡みは HTML 仕様で規定されています。
[65] 構文を ABNF 風に表記すると次のようになります。なお、 WebVTT の構文の要件は ABNF では表現できないので、次に示す構文は実際よりも緩い制約になっています。
wsp := U+0020 / U+0009 file-body := [BOM] 'WEBVTT' wsp *(Char - wsp) 2*line-terminator [cue *(2*line-terminator cue)] *line-terminators cue := [cue-identifier line-terminator] cue-timings 1*(wsp cue-settings) line-terminator cueue-payload cue-payload := cue-text / chapter-title-text / metadata-text line-terminator := U+000D U+000A / U+000A / U+000D cue-identifier := 1*(Char - line-terminator) - (*Char "-->" *Char) cue-timings := timestamp 1*wsp "-->" 1*wsp timestamp digit := U+0030 .. U+0039 timestamp := [2*digit ":"] 2*digit ":" 2*digit "." 3*digit cue-settings := [cue-setting *(1*wsp cue-setting)] cue-setting := vertical-text-cue-setting / line-position-cue-setting / text-position-cue-setting / size-cue-setting / alignment-cue-setting vertical-text-cue-setting := 'vertical:' ('rl' / 'rl') line-position-cue-setting := 'line:' (relative-position / line-number) relative-position := 1*digit "%" line-number := ["-"] 1*digit text-position-cue-setting := 'position:' relative-position size-cue-setting := 'size:' 1*digit "%" alignment-cue-setting := 'align:' ('start' / 'middle' / 'end') metadata-text := [meta *(line-separator meta)] meta := 1*(Char - line-separator) chapter-title-text := [text *([line-separator] text)] text := cue-text-span / cue-amp-escape / cue-lt-escape / cue-gt-escape / cue-lrm-escape / cue-rlm-escape / cue-nbsp-escape cue-text := [cue-component *([line-separator] cue-component)] cue-component := cue-class-span / cue-italics-span / cue-bold-span / cue-underline-span / cue-ruby-span / cue-voice-span / cue-timestamp / text cue-internal-text := [line-terminator] *(cue-component [line-terminator]) cue-class-span := cue-span-start-tag('c') cue-internal-text cue-span-end-tag('c') cue-italics-span := cue-span-start-tag('i') cue-internal-text cue-span-end-tag('i') cue-bold-span := cue-span-start-tag('b') cue-internal-text cue-span-end-tag('b') cue-underline-span := cue-span-start-tag('u') cue-internal-text cue-span-end-tag('u') cue-ruby-span := cue-span-start-tag('ruby') 1*(cue-internal-text cue-span-start-tag('rt') cue-internal-text [cue-span-end-tag('rt')]) [line-terminator] *(wsp [line-terminator]) cue-span-end-tag('ruby') cue-voice-span := cue-span-start-tag-annotated('v') cue-internal-text [cue-span-end-tag('v')] cue-span-start-tag(tag-name) := "<" tag-name *("." class) ">" cue-span-start-tag-annotated(tag-name) := "<" tag-name *("." class) wsp 1*(annotation) ">" class := 1*(Char - (U+0009 / U+000A / U+000D / U+0020 / "&" / "<" / ">" / ".")) annotation := cue-span-start-tag-annotation-text / cue-amp-escape / cue-lt/escape / cue-gt-escape / cue-lrm-escape / cue-rlm-escape / cue-nbsp-escape cue-span-end-tag(tag-name) := "</" tag-name ">" cue-timestamp := "<" timestamp ">" cue-text-span := 1*(Char - (U+000A / U+000D / "&" / "<")) cue-span-start-tag-annotation-text := 1*(Char - (U+000A / U+000D / "&" / ">")) cue-amp-escape := '&' cue-lt-escape := '<' cue-gt-escape := '>' cue-lrm-escape := '‎' cue-rlm-escape := '‏' cue-nbsp-escape := ' '
[75] 既存の WebVTT 文書の参照は、スクリプトからも track
要素を操作することによって行えます。
[76] また WebVTT によって記述された cue も、テキスト・トラックAPI により参照、操作できます。 cue を追加したり削除したりすることができます。
[77] テキスト・トラック自体も、 addTextTrack
メソッドによって動的に生成することができます。
[41] 当初は WHATWG により、 SRT に幾分の互換性のある WebSRT として開発されました。
[55] HTML の他の部分とは別に WebSRT だけ取り出して読みたいという要望があったため、 WebSRT の部分だけ抜き出した文書が用意されました。
[57] JavaScript での実装も登場しました。
[58] 既存の SRT のデータの収集と分析も行われ、それが WebSRT 仕様にも反映されています。
[42] しかしいくらかの修正を加えた後も、既存の (Web 以外で使われている) SRT との互換性が十分ではないため (また互換性を最大化することが目的でもないため)、 SRT を名乗ることによる混乱を招かぬよう、 WebVTT に改称されました。
[59] JavaScript の構文解析器と妥当性検証器の実装も登場しました。著者は annevk です。
[60] 2011年11月には W3C Web Media Text Tracks Community Group が組織されました。 同 CG は Ian Hickson を編集者として WebVTT の標準化を W3C において行うこととなったため、 WebVTT 仕様は WHATWG から同 CG に移管されました。
[61] 移管されたとは言え、編集者は変わらず Ian Hickson であり、単一のファイルから HTML と WebVTT の仕様書を生成するスタイルは継続しています。 W3C の CVS で管理されてはいますが、元のファイルは WHATWG の SVN にあります。 実質的に変化したのは HTML Living Standard から WebVTT の部分が削除されたことくらいです。
[64] 2012年4月後半に Ian Hickson が久々に WebVTT モードになっています。
[67] LeanBack Player | Test case implementation of WebVTT format (Web Video Text Tracks) ( ( 版)) <http://leanbackplayer.com/test/webvtt.html>
[68] LeanBack Player | WebVTT format (Web Video Text Tracks) reviewed ( ( 版)) <http://leanbackplayer.com/other/webvtt.html>
[69] Understanding WebVTT file format ( (Julien Villetorte 著, 版)) <http://www.delphiki.com/webvtt/>
[70] [proposed] WebVTT Working Group ( ( 版)) <http://www.w3.org/2011/05/google-webvtt-charter.html>
[71] rillian/webvtt · GitHub ( ( 版)) <https://github.com/rillian/webvtt>
[72] Bug 72215 – Enable WebVTT parsing layout tests ( ( 版)) <https://bugs.webkit.org/show_bug.cgi?id=72215>
[73] /trunk/LayoutTests/media/track/captions-webvtt – WebKit ( ( 版)) <http://trac.webkit.org/browser/trunk/LayoutTests/media/track/captions-webvtt>
[74] 629350 – Implement the track element ( ( 版)) <https://bugzilla.mozilla.org/show_bug.cgi?id=629350>
[80] IRC logs: freenode / #whatwg / 20120425 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20120425#l-139>
[81] WebVTT in WebM - wiki ( ( 版)) <http://wiki.webmproject.org/webm-metadata/temporal-metadata/webvtt-in-webm>
[82] Embedding RDF in WebVTT | NinSuna: Metadata-driven Media Adaptation and Delivery ( ( 版)) <http://ninsuna.elis.ugent.be/node/39>