WebVTT

WebVTT

[40] WebVTT は、動画音声に対する字幕などの注釈を記述するための形式です。 HTML と共に利用するために開発されました。

仕様書

[79] WebVTT の構文、意味、構文解析の方法は WebVTT 仕様で規定されていますが、 API媒体要素の処理モデルとの絡みは HTML 仕様で規定されています。

構文

[66] WebVTT の構文は文脈依存言語と思われます。

ABNF 風構文

[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 := '&amp;'
cue-lt-escape := '&lt;'
cue-gt-escape := '&gt;'
cue-lrm-escape := '&lrm;'
cue-rlm-escape := '&rlm;'
cue-nbsp-escape := '&nbsp;'

HTML からの参照

[43] WebVTT 文書は、HTML 文書から track 要素により参照します。

API

[75] 既存の WebVTT 文書の参照は、スクリプトからも track 要素を操作することによって行えます。

[76] また WebVTT によって記述された cue も、テキスト・トラックAPI により参照、操作できます。 cue を追加したり削除したりすることができます。

[77] テキスト・トラック自体も、 addTextTrack メソッドによって動的に生成することができます。

歴史

WebSRT

[41] 当初は WHATWG により、 SRT に幾分の互換性のある WebSRT として開発されました。

[55] HTML の他の部分とは別に WebSRT だけ取り出して読みたいという要望があったため、 WebSRT の部分だけ抜き出した文書が用意されました。

[56] 単独の仕様書ではなく、あくまで該当する部分を抜き出しただけという位置付けでした。

[57] JavaScript での実装も登場しました。

[58] 既存の SRT のデータの収集と分析も行われ、それが WebSRT 仕様にも反映されています。

  • [32] SRT research « Philip Jägenstedt ( 版) <http://blog.foolip.org/2010/08/20/srt-research/>
  • [33] IRC logs: freenode / #whatwg / 20100825 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20100825>
  • [34] Web Applications 1.0 r5688 Remove some text from W3C version as requested by a11y task force. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=5687&to=5688>
  • [35] Web Applications 1.0 r5721 WebSRT fixes: added <track default> to make it possible to enable a text track by default; dropped <track charset>; dropped the voice identifier in favour of inline <v> annotations in WebSRT; dropped compatibility with legacy SRT; added a magic signature to WebSRT; added some forward-compatibility features to WebSRT for future expansion; simplified WebSRT timestamp syntax; added WebSRT <c.foo.bar> syntax and support for classes in WebSRT; added '&gt;' escape support; tightened up WebSRT timestamp parsing; added ::cue() which takes a selector; dropped ::cue-part; added :past/:future; added some explanatory material and fixed some typos. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=5720&to=5721>

WebVTT

[42] しかしいくらかの修正を加えた後も、既存の (Web 以外で使われている) SRT との互換性が十分ではないため (また互換性を最大化することが目的でもないため)SRT を名乗ることによる混乱を招かぬよう、 WebVTT に改称されました。

[59] JavaScript構文解析器妥当性検証器の実装も登場しました。著者は annevk です。

W3C Web Media Text Tracks Community Group

[60] 2011年11月には W3C Web Media Text Tracks Community Group が組織されました。 同 CGIan Hickson編集者として WebVTT の標準化を W3C において行うこととなったため、 WebVTT 仕様は WHATWG から同 CG に移管されました。

[61] 移管されたとは言え、編集者は変わらず Ian Hickson であり、単一のファイルから HTMLWebVTT の仕様書を生成するスタイルは継続しています。 W3CCVS で管理されてはいますが、元のファイルは WHATWGSVN にあります。 実質的に変化したのは HTML Living Standard から WebVTT の部分が削除されたことくらいです。

[62] この頃まで Ian は Web Applications 1.0 / HTML Living Standard をすべての仕様の統合体としていたのに、 なぜ WebVTT を同じスタイルで、 HTML Living Standard の一部でもあり、 WebVTT Living Standard という単体の仕様でもある、としなかったのかは謎です。
[63] W3C CG はこの頃できた新しい制度で、 W3C の資源を利用しつつも自由な運営と標準化を行えます。 WebVTT Living StandardW3C のサイトにあり、 W3C のロゴも掲示されていますが、 CSS(W3C の青色のものではなく) WHATWG の緑色のものを使っています。 また、 W3C 本体の仕様に対しては認めていない「Living Standard」を名乗っています。

[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>