はじめに
動画クリエイターやアクセシビリティ編集者、ポッドキャスターにとって、VTTファイルはただの字幕フォーマットではありません。コンテンツを検索可能にし、誰でもアクセスでき、かつ複数のプラットフォームで正確に同期させるための鍵となる存在です。WebVTT(Web Video Text Tracks)は、HTML5動画向けにW3Cが標準化したタイムテキスト形式で、字幕やキャプション、音声説明、チャプターなどをミリ秒単位で正確に表示できます。
ゼロから作る場合も、自動生成された原稿を変換する場合も、有効なVTTを作るには構文やタイムスタンプ、文字コードを正しく設定する必要があります。特にタイムスタンプの重複修正やSRTからの変換は面倒に感じやすい作業です。そこで役立つのが、話者ラベル付きの正確な文字起こしのような自動化ツール。これらを使えば、生の音声からきれいに時間合わせされた字幕までの工程を大幅に短縮できます。
このガイドでは以下を解説します:
- VTTファイルの構造(ヘッダー、キュー構造、書式ルール)
- プレーンテキスト編集でのVTTファイル作成方法
- タイムスタンプにありがちなミスとその修正方法
- 既存の原稿をインポートし音声と同期させる方法
- アップロード前に確認すべきQAチェックリスト
VTTファイルの構造を理解する
正しいVTTファイルは決まった構造から始まります。W3C WebVTT仕様によれば、すべてのファイルはWEBVTTヘッダーの後に、正確なタイムスタンプ付きのキューを並べる必要があります。
基本構造
最低限、以下のような形式になります:
```
WEBVTT
00:00:00.000 --> 00:00:04.000
これは最初の字幕です。
00:00:04.000 --> 00:00:07.500
これは2つ目の字幕です。
```
ポイントは次の通り:
- ヘッダー:ファイル冒頭は必ず
WEBVTTで始め、必要に応じてタイトルやメタデータを付け加えます。最初のキューの前には最低でも改行2行が必要です。 - キュー:
- キューID(任意):字幕のラベル。
- タイムコード:
hh:mm:ss.mmm --> hh:mm:ss.mmm形式で、-->の前後にスペースを入れます。 - 字幕テキスト:画面に表示する内容や書式。
- 空行:キューとキューを区切るための改行。
書式の注意点
- ミリ秒まで必ず記述し(例:
.000)、省略しない。 - 秒とミリ秒の区切りにはピリオド(.)を使う。SRTのようにカンマ(,)を使うとエラーになります。
- キュー間の空行は必須。ないと多くのブラウザで表示できません。
-->を字幕テキスト中に入れないこと。パーサーが誤認識します。
JW Playerのようなプラットフォームは構文が少しでも違うと字幕を読み込まない場合があります。ブラウザがtext/vttのMIMEタイプを厳格に要求する現在では、仕様通りの作成が以前にも増して重要です。
プレーンテキストエディタでVTTを作る
VTTファイルの手作業作成はそれほど難しくはありませんが、正確さと注意力が必要です。まずはNotepad++、Sublime Text、VS Codeなどのプレーンテキストエディタを開きましょう。
文字コード:UTF-8(BOMなし)
WebVTTはUTF-8にBOM付きも使えますが、互換性の面からは「UTF-8 BOMなし」が安全です。BOM付きだと一部プラットフォームで文字化けが起こることがあります。設定方法:
- エンコードをUTF-8(BOMなし)に変更
- ファイルを
.vtt拡張子で保存
これにより、日本語やその他の言語もブラウザで正しく表示できます。
自動整形をオフに
エディタによっては長い行の折り返しや不可視文字の挿入など、自動整形機能があります。これらは字幕ファイルを壊す原因になるため、オフにしましょう。
手作業での時間合わせが面倒な場合は、最初から整形済みの原稿を作成できるツールを使うと効率的です。例えば構造化字幕出力から取り込めば、タイムスタンプや区切りがすでに適切になっているため、編集の手間が減ります。
タイムスタンプのよくあるミスと修正
熟練した編集者でも、些細なタイミングミスが原因で字幕が拒否されたり同期が崩れることがあります。
時間のゼロ詰め
1時間未満の動画でも時間部分は必ず00:と二桁にします。例えば0:02:15.500は無効で、00:02:15.500が正しい形式です。
重なりの回避
各キューの終了時間は必ず次のキューの開始時間よりも前に設定します(チャプターの場合を除く)。重なると字幕が消えたり乱れたりします。
セパレーター書式
-->の前後にスペースがないとエラーになります:
- 誤り:
00:00:01.000-->00:00:04.000 - 正しい:
00:00:01.000 --> 00:00:04.000
ミリ秒精度
ミリ秒を空欄にしない。hh:mm:ss.mmm形式は必須で、たとえ.000でも記入します。
大量の字幕ファイルを手修正するのは大変です。エディタの正規表現検索を使えば、時間のゼロ詰めや区切りの修正を一括で行えます。さらに、ワンクリックでタイムスタンプ整形できるツールなら、キュー本文に影響を与えずに整形やエラー修正が可能です。
原稿のインポートとタイム合わせ
自動生成された原稿は文の区切りが甘かったり、ミリ秒が抜けていたり、カンマで区切るなど仕様に合わない場合があります。音声に合わせるには、短く読みやすいブロックに分割し、開始・終了時間を正しい形式で付けます。
手動で合わせる場合
- ステップバックやスローモーション再生ができるプレーヤーで動画を開く
- 話し始めた瞬間の時間を記録
- VTTファイルにタイムスタンプを入力し、ミリ秒単位で調整
自動補助
仕様に沿って生成された原稿は話者識別や正確なタイムスタンプを付けてくれるため、同期作業が短縮されます。こうしたツールを使えば、インタビューなど長時間録音でも数秒で字幕用に再構成が可能です。初期のVTT作成にとても便利です。
アップロード前のQAチェックリスト
VTTファイルをホスティングサービスやCMSにアップする前に、必ず以下を確認しましょう:
- 文字コード:UTF-8(BOMなし)で、多言語対応が保証されているか
- 構文:キュー間に空行があり、
-->の前後にスペースがあるか、ミリ秒が埋まっているか - 時間:終了時間が開始時間より後で、意図しない重なりがないか
- 書式:本文に余計な
-->や自動字幕の不要文字がないか - MIME確認:HTML5の
<track>タグで再生できるか、ブラウザで表示テストする
この確認を行うことで、アップ直前でのエラーを防げます。
まとめ
VTTファイルは、字幕やキャプションなどのタイム付きテキストを正確かつシンプルに届けられるフォーマットです。その構造や文字コードの扱い、タイムスタンプの注意点を理解すれば、どのプラットフォームでも即座に通るファイルを作ることができます。
ゼロから作る場合も、自動生成原稿を加工する場合も、重要なのは正確な技術的処理と効率的な作業フローの両立です。SkyScribeのように構造化文字起こしや即時整形、キュー自動調整ができるツールを活用すれば、エラー削減と作業時間短縮が実現します。
最終的に、正しいVTTファイルは単なる仕様遵守ではなく、アクセシビリティ向上、視聴者の満足度、そしてプロとしての仕上がりを支える存在です。
よくある質問(FAQ)
1. VTTとSRTの違いは?
VTTはミリ秒をピリオド区切り(hh:mm:ss.mmm)で表記し、キューIDやインラインスタイル、メタデータに対応します。SRTはコンマ区切りでミリ秒を表記し、フレーム番号を持ちます。
2. VTTはUTF-8必須ですか?
はい。仕様上、UTF-8であることが求められます。互換性を考えるとUTF-8(BOMなし)が最も安全です。
3. 再生中に字幕が途中で消えるのはなぜ?
タイムスタンプの重複や-->のスペース不足など、構文エラーの可能性が高いです。
4. SRTからVTTへの変換は簡単?
はい。タイムスタンプのコンマをピリオドに置換し、フレーム番号を削除し、UTF-8に変換すればOKです。正規表現や自動スクリプトが役立ちます。
5. VTTが正しいかを確認する方法は?
HTML5の<track>タグで再生テストし、バリデータやJW Playerなど仕様に厳しいプレーヤーでチェックすれば、非準拠部分も検出できます。
