WebVTTをSubRip(.srt)に変換
Zoom、Teams、またはWhisperが生成した.vttファイルを、ミリ秒単位でタイミングを保持したまま、どこでも使える.srt字幕トラックに変換します。処理はすべてお使いの端末内で行われます。
ファイルがサーバーに触れることは一切ありません。 このページでの変換はすべて、JavaScriptのFileReader APIを使用してブラウザ内でローカルに実行されます。アップロード、記録、保存は一切行われません。Zoom/Teamsの機密録画、未公開の動画、法的なインタビューにも安心してご利用いただけます。
VTT to SRT変換の仕組み
WebVTTとSubRipは同じ基本的な考え方(タイミング付きのキャプションテキストのリスト)を表現していますが、その構文は3つの具体的な点で異なります。まず、WebVTTのヘッダー行(WEBVTT)やNOTE/STYLE/REGIONブロックにはSRTの対応がなく、取り除く必要があります。次に、WebVTTはミリ秒をピリオドで区切りますが(00:00:06.120)、SRTはカンマを必要とします(00:00:06,120)。この1文字の違いを変換せずに残すと、厳密なSRTパーサーはファイルを拒否してしまいます。3つ目に、WebVTTの任意のキュー識別子はどんな文字列でもかまいませんが、SRTは1から始まり欠落のない厳密な連番の整数を要求します。
SubToolDeskの変換ツールはこの3つすべてを自動的に処理します。FileReader APIを使ってVTTをローカルで解析し、きれいな連番を振り直し、ミリ秒の区切り文字を入れ替え、SRTに構文が存在しないものはすべて取り除きます。
VTTをSRTに変換する方法(手順ごとに解説)
- 上の変換ツールに
.vttファイルをドラッグするか、その内容を左側のパネルに貼り付けます。 - 形式バッジがVTTを検出していることを確認します。
- 音声タグや位置情報のメタデータがSRTの中に文字そのまま残らないよう、書式タグを削除はオンのままにしておきます。
- ダウンロードを押して正しい形式の
.srtファイルを保存するか、コピーで別の場所に貼り付けます。
なぜWebVTTをSRTに変換するのか
.vttファイルはブラウザでは問題なく再生されますが、多くのツールやワークフローは今も.srtを前提としています。変換は、ほぼ必ず次のいずれかが理由です。
- 理由:Premiere、DaVinci Resolve、Final Cutなど動画編集ソフトの字幕インポート機能がSRTを前提に作られており、WebVTTを拒否するか不安定にしか処理しない場合。
- 理由:ローカリゼーション業者やキャプション制作サービスが、あなたが持っている形式に関わらずSRTを標準の受け取り形式として指定している場合。
- 理由:WebVTTのサポートが一般的になる前に作られた動画プラットフォーム、ストリーミングサービス、広告サーバーにアップロードしており、
.srtしか受け付けない場合。 - 理由:Zoom、Teams、またはWhisperの文字起こしからWebVTTでAI生成のキャプションを受け取り、より古いデスクトップツールを使っている相手に渡す必要がある場合。
- 理由:形式変換と同じ処理で、SRTには対応のない音声タグやキュー設定のメタデータを取り除きたい場合。
- 理由:数年後にどんなソフトウェアを使っていてもファイルが開けるよう、より広く対応している形式でキャプションをアーカイブしたい場合。
変換前と変換後:実際の例
ZoomやTeamsが書き出すような、音声タグとキュー設定属性を含む短いWebVTTキューを、書式タグを削除をオン(このページの既定の状態)、話者ラベルを削除をオフにして変換した例です。
WEBVTT 1 00:00:06.120 --> 00:00:09.400 align:start position:10% <v Jordan>来られて嬉しいです、お招きいただきありがとうございます。 2 00:00:09.600 --> 00:00:12.800 align:start position:10% <v Priya>では議題から始めましょう。
1 00:00:06,120 --> 00:00:09,400 来られて嬉しいです、お招きいただきありがとうございます。 2 00:00:09,600 --> 00:00:12,800 では議題から始めましょう。
WEBVTTヘッダー、両方のalign:start position:10%キュー設定(SRTにはキューの位置指定に対応する構文がありません)、そして<v Jordan>と<v Priya>の両方の音声タグが、書式タグを削除が既定でオンになっているため、すべて取り除かれています。ミリ秒の前のすべてのピリオドはカンマになり、キュー番号は連番で振り直されました。話者がプレーンテキストでラベル付けされていた場合(Jordan:のような形式)、話者ラベルを削除が既定でオフであるため、そのテキストはそのまま残っていたはずです。
並べて比較:同じキュー、2つの形式
WebVTT: 00:00:06.120 --> 00:00:09.400 align:start <v Jordan>来られて嬉しいです。 SRT: 1 00:00:06,120 --> 00:00:09,400 来られて嬉しいです。
2026年になっても、なぜこれが重要なのか
ブラウザネイティブの字幕機能やAI文字起こしツール(YouTube、Zoom、OpenAI Whisperの書き出し)は、HTML5の<track>標準であるためWebVTTを既定にしています。しかし、デスクトップ向け動画編集ソフトの大部分、古いメディアプレーヤー、ストリーミングプラットフォームの字幕アップロード用フォームの多くは、今も.srtを前提とするか、それしか受け付けません。変換しておけば、何かを入力し直したりタイミングを手作業で再同期したりせずに、両方の世界でキャプションを持ち運べます。
ブラウザの外には何も出ません
この変換は純粋なテキスト変換であり(動画処理もOCRも外部APIも使いません)、完全にクライアント側で即座に実行されます。つまり、単に字幕ファイルを整形するためだけにサードパーティのサーバーへ渡したくない機密性の高い録音(証言録取、社内の全社会議動画、未公開の予告編など)にも同様に有効です。
誰が、なぜVTTをSRTに変換するのか
AI生成のキャプション(Whisper、Otter.ai、Zoom、Teams)を受け取る動画編集者は、編集スイートの字幕インポート機能(Premiere、DaVinci Resolve、Final Cut)がより古く、より広くサポートされている形式を前提に作られているため、SRTを特に必要とすることが多くあります。ローカリゼーション業者は、ソースの形式に関わらずSRTを標準の受け取り形式として要求することがよくあります。そして、WebVTTのサポートが広まる前からある動画プラットフォームや広告サーバーにキャプションをアップロードする人は、.vttファイルを直接アップロードしようとすると壁にぶつかります。ローカルで一度変換しておけば、元のキャプション制作ツールから再書き出しをしたり、タイムコードを手作業で入力し直したりする必要がなくなります。
何が振り直され、なぜそれが必要なのか
WebVTTのキュー識別子は任意であり、存在する場合でもUUID、タイムスタンプ、あるいは何もない文字列など、どんな文字列でもかまいません。SRTの仕様はより厳格で、すべてのキューは1から始まる連番の整数インデックスを、欠落も重複もなく持つ必要があります。そうでなければ、多くのプレーヤーは最初に壊れたインデックスに到達した時点でファイルの解析を拒否します。SubToolDeskは、元のVTTにあった識別子(あれば)を破棄し、書き出し時にきれいで欠落のない連番を生成します。そのため、元の番号付けがどれほど不規則であっても、結果は常に有効なSRTになります。
この変換ツールが保持するものと削除するもの
保持されるもの:
- 発言されたすべての単語を、元の順序のまま保持します。
- すべてのキューのミリ秒単位の正確なタイミング。
- 元の順序どおり1キュー1ブロックとし、1から始まる連番に振り直されます(SRTはこれを要求しますが、WebVTTは要求しません)。
- 話者ラベルを削除が既定でオフのため、
Jordan:のようなプレーンテキストの話者接頭辞。
削除または変更されるもの:
WEBVTTヘッダー行、およびNOTE、STYLE、REGIONのいずれかのブロック。これらにはSRTの対応がありません。- ミリ秒の前のピリオドは、すべてのタイムコードでカンマに置き換えられます。
align:start position:10%のようなタイムスタンプ行上のキュー設定。SRTにはこれに対応する構文がなく、切り替えの状態に関わらず常に削除されます。<v Speaker Name>のような音声タグ。書式タグを削除がオンの場合(このページでは既定でオン)。
よくある問題とその解決方法
<v Speaker Name>タグがSRT出力に文字そのまま表示される場合:書式タグを削除をオンにしてください。オフになっているのは変更した場合だけです。このページで既定でオンになっているのは、SRTにはそれらを保持するための音声タグ構文がまったくないためです。Jordan:のようなプレーンテキストの名前が行頭に残る場合:これは別の切り替えで、話者ラベルを削除です。ここでは既定でオフになっているのは、SRTがプレーンテキストの接頭辞を問題なく表現できるためです。それらも取り除きたい場合はオンにしてください。- 出力にミリ秒の前がピリオドのまま、カンマではなく表示される場合:実際の
.srt出力を見ているか、元の.vttを貼り付けたコピーを見ていないか確認してください。変換ツール上の形式バッジで、どちらが有効か確認できます。 - キューの位置指定や配置が消えてしまったように見える場合:これは想定された動作であり、不具合ではありません。SRTには
alignやpositionの設定に対応する構文がなく、切り替えの状態に関わらず変換時に削除されます。 - プレーヤーが変換後のファイルを拒否するか、最初のキューの後で止まる場合:変換前に形式バッジがVTTと表示されていたか確認してください。貼り付けが大きく途切れていると、キューの検出が壊れ、インデックスが欠落または不正なキューが生成されることがあります。
- アクセント付きの文字や英語以外のテキストが
éのような文字化けとして表示される場合:元の.vttがUTF-8で保存されていません。UTF-8として再書き出しまたは再保存してから、再度アップロードしてください。
キュー設定とスタイルについての注意
WebVTTの位置指定メタデータ(align:start position:10%、行オフセット、その他似た設定)にはSRTの対応がありません。SubRipの字幕は常にプレーヤーの既定位置で表示され、キューごとの配置制御はできません。そのメタデータは、はぐれたテキストとして残されるのではなく、変換時に削除されます。これを制御しているのが書式タグを削除の切り替えです。WebVTTファイルがアクセシビリティやスタイルの理由でカスタムの位置指定に依存している場合、その詳細はSRTへの移行では失われます。これはこの変換ツールの制限ではなく、SRT形式そのものの制限です。
よくある質問
VTTをSRTに変換するにはどうすればいいですか?
上の変換ツールに.vttファイルをドラッグするか、その内容を左側のパネルに直接貼り付けてください。形式バッジがVTTであることを確認したら、ダウンロードまたはコピーを押します。このツールは、すべてのタイムコードのピリオドをカンマに置き換え、WEBVTTヘッダーとキュー設定のメタデータを取り除き、キューを連番で振り直します。インストールもアカウント登録もアップロードも不要です。
VTTをSRTに変換すると、実際に何が変わりますか?
3つのことが変わります。すべてのタイムコードでミリ秒の前のピリオドがカンマに置き換わり、WEBVTTヘッダーとキュー設定のメタデータが取り除かれ、キューが1から始まる連番で振り直されます。これはSRTが要求し、WebVTTは要求しないものです。
<v Speaker>音声タグやキューの位置指定はどうなりますか?
SRTにはどちらにも対応する構文がないため、既定ではこのツールが変換時にそれらを取り除きます(キャプション本文に生のタグテキストをそのまま残したい場合は、書式タグを削除をオフにしてください)。
そもそもVTTではなくSRTが必要になるのはなぜですか?
SRTは最も広く対応している字幕形式です。VLC、ほとんどのメディアプレーヤー、Adobe Premiere、DaVinci Resolve、そして字幕トラックのアップロード用フォームの多くは.srtを受け付けますが、一部の古いツールは.vttをまったく認識しません。
変換によってタイミングの精度が失われることはありますか?
ありません。ミリ秒単位の精度は正確に保持されます。変わるのは区切り文字と周辺のメタデータだけです。
キュー識別子がないVTTファイルも変換できますか?
できます。パーサーは各キューをタイムスタンプ行(常に-->を含みます)で特定するため、識別子の行が欠けていても解析に影響しません。
変換後にSRTファイルを開いたり編集したりするには何を使えばいいですか?
どんなプレーンテキストエディタでも構いません。WindowsならNotepad、MacならTextEditです。タイミング調整やより使いやすい画面が欲しい場合は、AegisubやSubtitle Editのような専用の字幕エディタがSRTをネイティブに扱えますし、VLCを含むほとんどのメディアプレーヤーは、対応する動画ファイルと一緒に読み込んで同期を確認できます。