SRTをVTTに変換するには?違いと3つの方法
手元にSRTファイルがあり、ブラウザ上で再生したい、あるいはWebVTTしか受け付けないプラットフォームにアップロードしたい——そういう場面でつまずきます。2つの形式は拡張子しか違わないように見えて、実際はヘッダー、タイムコードの書き方、スタイル対応のすべてが異なります。先に違いを押さえてから方法を選べば、遠回りを大幅に減らせます。
この問題は海外展開の現場で特によく起きます。同じ一本の完成映像をウェブとローカルプレイヤーの両方に出すなら、どちらの形式も用意しておく必要があります。
SRTとVTTの違いはどこにあるのか
どちらもプレーンテキストの項目型字幕です。ただしVTTにはSRTにない特徴がいくつかあります:
- ファイルヘッダー:VTTの1行目は必ず
WEBVTT。SRTにこの要件はありません - タイムコード区切り:SRTはミリ秒をカンマ
,で区切り(00:00:01,000)、VTTはピリオド.で区切ります(00:00:01.000) - スタイルと位置指定:VTTは
<c>による色付け、<b>による太字などのインラインタグや、cue単位の位置指定に対応。SRTは基本的にプレーンテキストのみ
# SRT
1
00:00:01,000 --> 00:00:02,500
今日は3つのテーマについて話します
# VTT
WEBVTT
00:00:01.000 --> 00:00:02.500
今日は3つのテーマについて話します
VTTも項目の間は空行で区切りますが、連番は省略可能です——仕様上、1・2・3と振る必要はありません。.srtの拡張子を.vttに変えただけではほぼ動かず、プレイヤーはヘッダー不足とタイムコード形式の不一致でエラーを出します。
もう1つ見落とされがちな点:VTT対応をうたっていても、実際は特定の書き方しか受け付けないプラットフォームがあります。たとえば全cueに番号を要求したり、一部のインラインスタイルを拒否したりするタイプです。アップロードでエラーが出たら、まず「形式が不正」なのか「スタイル非対応」なのかを切り分けてください。前者だけが変換の問題で、後者はプラットフォーム側の制限です。プラットフォームのスタイル制限を、変換の失敗と誤解しないようにしましょう。
方法1:オンライン変換(いちばん手軽)
ソフトを入れたくない、たまに1回変換するだけなら、オンラインツールが最も手軽です。SmileSubのSRT→VTT変換ツールなら登録不要で使えます:
- SRTファイルをアップロード
- 解析と変換の完了を待つ
- VTTファイルをダウンロード。項目数とタイムコードはそのまま維持されます
変換は形式だけに作用し、中身には触りません。元の日本語や英語のテキストはそのまま保たれます。無料枠は1ファイルあたり1MB・500字幕項目まで、各ツール各IPで1日3回です。
字幕にスタイルを足したり、画面の特定の位置に置いたりしたいなら、それはSRTの守備範囲を超えているので、VTTではなくSRT→ASS変換ツールの出番です。
方法2:プレイヤーに直接読み込ませる
多くのウェブプレイヤー(およびブラウザ標準の<video>+<track>)はVTTしか受け付けません。ウェブ上で字幕を表示したいだけなら、元ファイルを何度も変換し回す必要はありません:
- HTML内で
<track>を使ってVTTファイルを指定する - またはVTTを独立したトラックとして、対応するプラットフォームにアップロードする
このルートの前提は、プラットフォーム自体がVTTを受け付けることです。納品物が.srtでなければならないなら、結局はファイル変換が必要です。
字幕形式の選び方をより詳しく知りたいときは、SmileSubのブログ一覧で字幕形式やハード字幕・ソフト字幕の違いを扱った関連記事を探してみてください。
方法3:コマンドラインで一括処理
同じシリーズで何十本・何百本もの字幕を変換するなら、コマンドラインのほうが安定します。定番はffmpegの一行変換です:
ffmpeg -i input.srt output.vtt
これもWEBVTTヘッダーを補い、カンマをピリオドに置き換えます。ただしコマンドラインは入力ファイルの形式にかなり厳格で、元のSRTに時間の重複や番号の乱れがあると、出力されたVTTにも同じ問題が持ち越されます。変換の前に字幕仕様チェックツールで一度確認しておくのがおすすめです。
補足として:ffmpegの変換は元ファイルの問題を修復してくれません。あくまで形式を運ぶだけです。元SRTに壊れたデータがあるときは、先に掃除してから変換しないと、結果も汚れたままになります。
3つの方法の選び方
| あなたのシーン | おすすめの方法 | 主なコスト |
|---|---|---|
| たまに1回だけ、ソフトは入れたくない | オンラインツール | ほぼゼロ |
| ウェブで表示、プラットフォームがVTT対応 | プレイヤー読み込み | プラットフォームの対応が必要 |
| 何十本・何百本の一括変換 | コマンドライン | 基本コマンドの知識、元ファイルがきれいなこと |
ひとことで言えば:オンライン変換は臨時・少量向け、プレイヤー読み込みはウェブ表示向け、コマンドラインは一括・自動化向けです。
最初はコストの最も低い方法から始めて、足りなくなってからステップアップするのが、いちばん安定した進め方です。
よくある質問
拡張子を変えるだけで使えますか?
基本的に無理です。VTTにはWEBVTTヘッダーが必要で、タイムコードもカンマ区切りのままでは、多くのプレイヤーは無視するかエラーを出します。この差分を埋めるには、本物の変換が必要です。
変換後に字幕の位置が変わったのはなぜ?
SRTには位置情報がありません。VTTに変換しても、位置指定が突然生まれることはありません。字幕の位置がおかしいとき、大半はプレイヤー自身のデフォルトスタイルによるもので、変換が原因ではありません。位置を正確に制御したいならASSが必要です。
オンライン変換でテキストの中身は変わりますか?
変わりません。変換が触るのは形式の層(ヘッダー、タイムコード区切り、省略可能な連番)だけで、テキストはそのまま保たれます。文字の翻訳や校正は別の話で、そちらは翻訳系ツールの仕事です。