WebVTT
Webの字幕形式です。ブラウザはHTMLの<track>を通じてこれを表示します。SubRipのブロック構造に、ヘッダー、ミリ秒の前のピリオド、装飾・表示位置・話者を指定する仕組みを加えたものです。
概要
| 拡張子 | .vtt |
|---|---|
| メディアタイプ | text/vtt |
| 仕様 | W3C、WebVTT: The Web Video Text Tracks Format(Candidate Recommendation) |
| 時間の精度 | ミリ秒 |
| 文字エンコーディング | 常にUTF-8です。仕様でUTF-8が求められています。Subtitldはそれ以外のエンコーディングも読み取れます。 |
| 装飾 | 斜体、太字、下線のタグ。色はクラスとCSS(::cue)で指定します。取り消し線はありません。 |
| 表示位置 | キュー設定(line、position、align、size、vertical)とリージョン |
| 話者 | 音声タグ: <v Thom> |
| コンテナ内 | MatroskaではS_TEXT/WEBVTTとして、MP4ではwvtt(ISO/IEC 14496-30)として格納されます。HLSおよびDASHストリームでも使われます。 |
キューの構造
ファイルは、ヘッダーと、それに続くキューで構成されます。各キューはSubRipと似たブロックで、任意の2つの部分を持ちます。
WEBVTT intro 00:00:23.000 --> 00:00:24.500 line:0 <v Celia>You're a jerk, <i>Thom</i>.
- 1 · ヘッダー
WEBVTTを単独で、または空白と後続のタイトルとともに書き、その後に空行を入れます。これがないと、ブラウザはファイル全体を拒否します。 - 2 · 識別子
任意です。キューの名前を、単独の行で指定します。SubRipと同じ番号か、単語を使えます。
- 3 · 時間
開始時刻、矢印
-->、終了時刻です。ミリ秒の前にはピリオドを使います。 - 4 · 設定
任意です。終了時刻の後に、キューを表示する位置を指定します。
- 5 · テキスト
装飾や音声を指定するタグを含めたテキストの行です。キューは空行で終わるため、キューの中に空行を入れることはできません。
タイムコード
時間は省略できます。 00:27.000も同じ時刻を表します。1時間未満のファイルでは、この書き方が多く使われています。ミリ秒の前にカンマを使うのはSubRipの癖であり、WebVTTの書き方ではありません。Subtitldはそれでも読み取れます。
キュー以外のブロック
| ブロック | 内容 |
|---|---|
NOTE |
人間向けのコメント。再生ソフトは読み飛ばします。 |
STYLE |
キューのためのCSS。::cueを使います。最初のキューより前に置きます。 |
REGION |
キューがスクロールして表示される、画面上の名前付き領域です。 |
キューのテキスト
| タグ | 効果 |
|---|---|
<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> |
キュー内のタイムスタンプ。カラオケ表示に使います |
& < > |
アンパサンド、<、>、改行されないスペース。そのままではマークアップとして読まれてしまいます |
色
CSSを使わずに色を指定できるクラスは8つあります: white、lime、cyan、red、yellow、magenta、blue、blackです。背景色には、同じ8つに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は、色が8つのいずれかである場合には、それらのクラスを使います。
キューの設定
| 設定 | 効果 |
|---|---|
line:0 |
画面上の行。数字は上端から行を数えます(負の数は下端から)。パーセントは上端からの位置です |
position:10% |
キューの枠が画面上で横方向のどこに置かれるか |
align:start |
枠の中のテキストの配置: start、center、end、left、right |
size:50% |
枠の幅 |
vertical:rl |
縦書きのテキスト。右から左、または左から右 |
region:fred |
REGIONの中にキューを表示します |
Subtitldはline、position、alignを、字幕の画面上の位置として読み取ります。これはSubRipの{\an1}から{\an9}と同じ9つの位置です。また、書き出すときもこれらを使います。上端にはline:0、中央にはline:50%,center、左右の端にはposition:10% align:startとposition:90% align:endを使います。
WebVTTとSubtitld
- 各字幕のテキストと改行
- 斜体、太字、下線、色
- 画面上の表示位置
- 話者(音声タグとして)
- 開始時刻と終了時刻(ミリ秒単位、順序どおり)
- 取り消し線: WebVTTにはそのためのタグがありません
- 話者の顔と色
- 原文の横に並ぶ翻訳(翻訳で置き換えるか、原文の下に配置できます)
- 吹き替えとメタデータ
これらを残すには.usfxプロジェクトとして保存してください。
WebVTTファイルを開く
Subtitldは、各キューをタイミングの行で見つけ、次の内容を読み取ります。
- ヘッダー、
NOTE、STYLE、REGIONのブロックは字幕ではなく、それぞれの役割として扱います。キューの識別子は名前として扱います。 - 時間は、時間の有無、ピリオドまたはカンマにかかわらず読み取ります。
- 音声は字幕の話者として扱い、吹き替え用に準備します。
- WebVTTの色クラスと、
STYLEブロックが他のクラスに与える色を読み取ります。 line、position、alignを、画面上の位置として読み取ります。- WebVTTはUTF-8を求めていますが、任意のエンコーディングを読み取ります。
Subtitldが扱えない内容は省かれます。リージョン、キューのサイズ、縦書き、ルビの読み仮名、カラオケのタイムスタンプが該当します。テキストそのものは残ります。
WebVTTの書き出し
エクスポート、次に字幕、そしてVTTを選ぶと、次のオプションが表示されます。
- テキスト原文、翻訳、または両方(翻訳は原文の下に配置)。
- 話者名省くか、テキストの前に付けるか(Thom: …)、またはWebVTT独自の方法である音声タグ(
<v Thom>)として書き出します。 - 書式残すか、取り除きます。
- 時間をずらすすべての字幕を、同じ量だけ早めたり遅らせたりします。
ファイルは、WebVTTの要件どおり常にUTF-8です。WEBVTTの後に、開始時刻の順に並んだキューが続き、すべての時刻には時間が付きます。マークアップとして読まれてしまう文字は実体参照で書かれ、空の字幕は省かれます。
Webページでの利用
<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、Web上の動画にはWebVTTを選んでください。両者を並べて比較した内容はSubRipのページにあります。
豆知識
WHATWGでHTML5の新しい<track>要素のために検討されたWebSRTとして始まり、SubRipを土台にしていました。その後、WebVTTという名前になりました。
すべてのファイルの先頭にある6文字です。ブラウザはこれを見つけられないと、トラック全体を拒否します。
CSSなしで再生ソフトが表示できる色: white、lime、cyan、red、yellow、magenta、blue、blackです。テキストにも背景にも使えます。
関連する形式
Subtitld で動画と一緒に開き、波形上でタイミングを調整しましょう。