piapia123
ja

SRT ↔ WebVTT 字幕変換

メディア

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

SRT と WebVTT を相互変換し、そのうえでタイムラインを調整できます。形式変換のほうは退屈な半分で、役に立つのは残りの 2 つです。 全体の移動は音ズレを直します —— 映像と字幕が別のグループ由来だと 0.5〜2 秒ずれていることがよくあり、1 件ずつ直すのは現実的ではありません。負の値なら全体が前へずれます。 倍率変更はフレームレートの不一致を直します。これは「移動」と間違えられやすいものです。25 fps 前提で作られた字幕を 23.976 fps の映像で使うと、ずれは後半ほど大きくなります:冒頭は合っていて、10 分後には数秒ずれ、途中のどこかはたまたま合っています。これには係数(25 ÷ 23.976 ≈ 1.0427)が必要で、移動では直りません。両方が同時に起きている場合、順序が重要で、ここでは先に倍率、次に移動です。 ⚠️ 移動しすぎた場合は、壊れたファイルを出さずエラーにします。 5 秒前へずらすと先頭の数件が負の時間になります。0 に丸めれば先頭に重なり、そのまま出力すれば `-00:00:01,000` のような不正なタイムスタンプになります。プレイヤーの反応はどちらも沈黙です —— エラーも警告もなく、その数件が二度と表示されなくなるだけです。そこでここでは拒否し、何件が該当するかを伝えます。 細かい点も仕様どおりに扱っています:SRT の番号は振り直し(番号は位置情報にすぎず、入力側は乱れていることがあります)、WebVTT 出力には番号を書かない(その位置は cue 識別子であり連番ではないため、`1` `2` と書くと SRT の番号と混同されます)。

機能

  • SRT ↔ WebVTT の双方向変換。入力形式は自動判定
  • タイムライン全体の移動(秒、負の値も可)—— 音ズレの補正
  • タイムラインの倍率変更 —— フレームレート不一致の補正。後半ほどずれるため移動では直りません
  • 両方使う場合は先に倍率、次に移動(逆順だと移動分まで倍率がかかります)
  • ⚠️ 移動によって負の時間が出る場合は、件数を示してエラーにします。壊れたファイルは出しません
  • SRT の番号は順番に振り直します —— 番号は情報を持たず、入力側は乱れていることがあります
  • WebVTT 出力には番号を書かず、既存の cue 識別子と設定は保持します
  • WebVTT の時間省略表記に対応(`00:01.000` は 1 時間ではなく 1 秒)
  • CRLF・BOM・NOTE / STYLE コメントブロックに対応
  • ファイルは送信されず、サーバーも経由しません

使い方

  1. SRT または WebVTT を貼り付けます(形式は自動判定)
  2. 出力形式を選びます
  3. 音ズレなら移動秒数を、フレームレート不一致なら倍率を入力します
  4. 結果はその場で更新されます。コピーまたはダウンロードしてください

よくある質問

字幕が全体にずれています。移動と倍率のどちらを使うべきですか?
ずれ方の規則性を見てください。最初から最後まで同じだけずれている → 移動です。固定の秒数を入れます(字幕が早く出るなら負、遅れるなら正)。冒頭は合っているのに後半ほどずれる → 倍率です。これはフレームレートの不一致で、23.976 fps 前提の字幕を 25 fps の映像で使うなら 25 ÷ 23.976 ≈ 1.0427、逆なら 23.976 ÷ 25 ≈ 0.959 を掛けます。⚠️ 両方が同時に起きていることもよくあり(映像も字幕も別の出所など)、その場合は両方入力してください —— 順序は先に倍率、次に移動です。逆だと、入れた移動分にも倍率がかかってしまいます。
移動しすぎるとエラーになるのはなぜですか?他のツールは切り詰めています。
切り詰めは黙ってファイルを壊すからです。5 秒前へずらすと先頭の数件が負の時間になります。0 に丸めれば同じ時刻に重なって表示され、そのまま書けば `-00:00:01,000` のような不正なタイムスタンプになります。プレイヤーはどちらも報告しません —— その数件が表示されなくなるだけで、あなたは「字幕はこういうものだ」と思い込みますが、実際はツールが壊したのです。そこでここでは実行を拒否し、何件が範囲外かを伝えます:移動量を小さくするか、本当に不要な先頭の数件を先に削除してください。
SRT の番号は変わりますか?
変わります。出力時は 1、2、3… と順番に振り直します。SRT の番号は情報を持たず、「何番目の字幕か」を示すだけです。入力ファイルの番号は乱れていたり抜けていたりすることがあり(コピー&ペーストや手編集の後によくあります)、一部のプレイヤーは先頭の数件しか表示しなくなります。WebVTT 側には番号を書きません:その位置は cue 識別子(任意の文字列)であり、`1` `2` `3` と書くと SRT の番号と同じものだと誤解されます。既存の識別子は保持します。
ASS / SSA には対応していますか?
対応していません。ASS / SSA は「タイムスタンプ付きのテキスト」ではなく、完全なスタイル体系(フォント、縁取り、位置指定、カラオケ効果、レイヤー)を持っており、SRT にも WebVTT にもそれを入れる場所がありません。片方向の変換ではスタイルの大部分が必ず失われ、結果は「変換に成功した」ように見えるのに、プレイヤーでは位置もフォントも違う —— 視聴中に気づくことになります。したがってここでは、相互に無損失で変換できるこの 2 形式だけを扱います。

関連ツール