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変換ツールなら登録不要で使えます:

  1. SRTファイルをアップロード
  2. 解析と変換の完了を待つ
  3. 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が必要です。

オンライン変換でテキストの中身は変わりますか?

変わりません。変換が触るのは形式の層(ヘッダー、タイムコード区切り、省略可能な連番)だけで、テキストはそのまま保たれます。文字の翻訳や校正は別の話で、そちらは翻訳系ツールの仕事です。