SRT字幕をWebVTTへオンライン変換
SRTの字幕ファイルを、Webのプレーヤーが読めるWebVTTに変換します。00:00:01,250は00:00:01.250になり、WEBVTTの見出しが付き、複数行の字幕もそのまま残ります。作られた字幕の数も表示します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
SubRip字幕の句読点を手作業で置換したり、キューブロックを組み直したりせず、標準に適合するWebVTTへ変換できます。必須のWEBVTTヘッダーを追加し、SRT時刻のカンマをWebVTTの小数点へ変更します。複数行の字幕本文は保たれ、生成されたキュー数も返されます。結果を返す前にすべての時刻行を検証するため、壊れた字幕は不安定なファイルではなく明確な入力エラーとして報告されます。
SRT字幕をWebVTTの制作工程へ移行します
SRTとWebVTTは外観が似ていますが、同じファイルとして扱うことはできません。Webプレーヤーでは通常、先頭にWEBVTTという署名が必要ですが、SRTは番号付きキューから始まるのが一般的です。ミリ秒の区切りも異なり、SRTはカンマ、WebVTTはピリオドを使います。
本機能は一般的な改行を統一し、先頭にUnicodeバイトオーダーマークがあれば除去して、各キューを順番に読み取ります。2行以上の字幕も元の順序で保持されます。数字のSRTインデックスは構造として処理され、本文にはコピーされません。
応答のvttには変換済みテキストが入り、自動処理での確認に便利なキュー数も含まれます。アップロード処理や映像解析、外部通信は行いません。
公開前に不正な時刻を検出します
字幕の不具合は見つけにくい場合があります。SRTで必要なカンマがピリオドになっている、ミリ秒の桁が足りない、矢印が抜けている、存在しない分の値が含まれる、といった問題です。各時刻行はHH:MM:SS,mmm --> HH:MM:SS,mmm形式として検証されます。
分と秒は00から59まで、ミリ秒は必ず3桁で、終了時刻が開始時刻より前になることは認められません。いずれかのキューが規則に違反すると、途中までのファイルを出力せず、該当するSRT項目を示す入力エラーを返します。本文が空のキューや、想定外の数字以外のインデックスも拒否されます。
曖昧な時刻を推測して修復すると台詞が別の場面へずれる可能性があるため、自動補正はしません。報告された項目を直してから再度送信してください。
Webサイトや自動処理で再現可能な出力を使えます
返されたWebVTTテキストは.vtt拡張子で保存し、text/vttメディアタイプで配信できます。HTML動画ページではtrack要素から参照し、用途に合う言語とラベルを指定してください。変換は決定的であり、同じ入力からは常に同じ出力が得られます。
Unix改行、ヘッダー後の空行、キュー間の空行、末尾の改行も統一されます。そのため、バージョン管理、再現可能なビルド、移行スクリプト、生成物を比較するテストに適しています。本機能は構造だけを変換し、台詞の翻訳、音声の文字起こし、時刻の調整、重複字幕の統合、動画ファイルの検査は行いません。
ブラウザーでは無料でお試しいただけます。
活用例
HTML5動画用の字幕を準備します
編集者から受け取ったSRTを、HTMLのtrack要素から参照する前にWebVTTへ変換できます。
CIで字幕書き出しを検証します
不正な時刻を含むキューがあればビルドを停止し、壊れた字幕の公開を防げます。
字幕ライブラリを移行します
既存のSRTテキストから、再現可能なメディア移行用の安定したWebVTT資産を生成できます。
よくある質問
変換によって何が変わりますか?
WEBVTTヘッダーを追加し、時刻のミリ秒区切りをカンマからピリオドへ変え、数字のSRTインデックスを除去します。字幕本文は保持されます。
どの時刻形式を使用できますか?
各キューはHH:MM:SS,mmm --> HH:MM:SS,mmm形式で、正しい分と秒、および3桁のミリ秒を使う必要があります。
時刻行が不正な場合はどうなりますか?
該当するSRT項目を示す入力エラーで処理が終了します。途中までのWebVTT文書は返されません。
複数行の字幕は保持されますか?
はい。 キューの時刻行より後にある字幕行は、すべて同じ順序で保持されます。
字幕の翻訳や時刻調整も行いますか?
いいえ。 コンテナ形式だけを変更し、字幕本文と正しい時刻値はそのまま維持します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video/subtitle-srt-to-vtt \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}'const res = await fetch("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/subtitle-srt-to-vtt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"srt":"1\\n00:00:01,250 --> 00:00:03,500\\nWelcome to the presentation.\\n\\n2\\n00:00:04,000 --> 00:00:06,125\\nLet us begin."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitle_srt_to_vtt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
SRT字幕をWebVTTの制作工程へ移行します
完全なSRT文書をsrtフィールドへ貼り付けるか送信してください。
Webサイトや自動処理で再現可能な出力を使えます
字幕文書を自動変換するAPIは1項目あたり$0.002でご利用いただけます。
技術的な質問
API変換の料金はいくらですか?
APIリクエストは1項目あたり$0.002です。このページのブラウザー版は無料でご利用いただけます。