SRT(SubRip Subtitle)は、字幕の本文と表示開始・終了時刻を記録するテキストファイルです。映像や音声は入っていません。短い字幕ならテキストエディターで作れますが、保存後に読み込み先で時刻・改行・日本語の表示を確認します。
基本は「番号→開始時刻 –> 終了時刻→本文→空行」の繰り返しです。SRTは細部まで統一された規格ではないため、装飾や文字コードの解釈は読み込み先で異なります。米国議会図書館のSRT形式説明を根拠に構造を示し、FFmpegでの実行結果は使用版と条件を分けて掲載しています。
SRTを作って確認する手順
- 字幕を使う動画と読み込み先を決める。字幕はその動画の時間を基準に作る
- 下の例をテキストエディターへ貼り付け、字幕の本文と開始・終了時刻を編集する
- 字幕ごとに番号を付け、終了時刻を開始より後にし、次の字幕との間に空行を入れる
- UTF-8でsub_utf8.srtなどの名前で保存する。ファイル名が.srt.txtになっていないか確認する
- 読み込み先へ字幕を追加し、冒頭・中間・末尾の表示と音声のタイミングを確認する。元のSRTも別名で残す
SRTの書き方
1
00:00:01,000 --> 00:00:04,000
こんにちは。字幕のテストです。
2
00:00:05,000 --> 00:00:08,500
2行目も
このように表示されます。
3
00:00:09,000 --> 00:00:11,000
<i>斜体</i>も使えます。| 行 | 書くこと |
|---|---|
| 1行目 | 字幕の番号(1から順に) |
| 2行目 | 表示を始める時間 –> 消す時間 |
| 3行目から | 字幕の本文(改行すれば2行になる) |
| 最後 | 空行(次の字幕との区切り) |
時間の書き方
時間は「時:分:秒,ミリ秒」の形で、時と分と秒は2けた、ミリ秒は3けたで書きます。
ミリ秒の前は「.」ではなく「,」です。
「–>」の前後には半角の空白を入れます。
使える飾り
<i>…</i> で斜体、<b>…</b> で太字にできますが、表示できるかどうかは再生するソフト次第です。
SRTの時刻は経過時間で、ミリ秒を使います。最後の「,000」はフレーム番号ではありません。00:00:01,500は1.5秒で、30fpsの映像のフレーム数をそのまま末尾に書く指定ではありません。
文字コードはUTF-8にする
同じ字幕を、3つの文字コードで保存して比べました。
| 保存のしかた | 大きさ | ffmpeg での焼き込み |
|---|---|---|
| UTF-8(BOMなし) | 236 バイト | そのまま表示できた |
| UTF-8(BOMつき) | 239 バイト | そのまま表示できた(10月2日に追加検証) |
| Shift_JIS(ANSI) | 198 バイト | エラーで止まった(文字コードを指定すると表示できた) |
Shift_JIS の字幕を ffmpeg で焼き込むと、次のエラーで止まりました。
Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc optionWindows のメモ帳で保存するときは、「文字コード」を UTF-8 にします。
BOM(ファイルの先頭に付く3バイトの目印)は、付けたほうが読めるソフトと、付けないほうがよいソフトがあります。
使うソフトの説明に合わせ、迷ったら BOM なしの UTF-8 にします。
ffmpeg で文字コードを指定して焼き込む方法は、ffmpegで字幕を焼き込む・埋め込む方法で紹介しています。
改行コード
今回のWindows環境ではCRLFで保存しました。改行コードはエディターの設定によって変わります。
今回試した ffmpeg では、CRLF の SRT もそのまま読めました。
保存した字幕の時刻を確かめる
ファイル名を sub_utf8.srt、文字コードをUTF-8にして保存します。
メモ帳で保存したあと、エクスプローラーの拡張子表示を有効にし、sub_utf8.srt.txt になっていないか確認してください。
ffprobe -v error -show_packets -show_entries packet=pts_time,duration_time -of compact sub_utf8.srtpacket|pts_time=1.000000|duration_time=3.000000
packet|pts_time=5.000000|duration_time=3.500000
packet|pts_time=9.000000|duration_time=2.000000上の3字幕を、2026年10月2日に ffmpeg 9.0.2 で読み込んだ結果です。
pts_time は開始時刻、duration_time は表示時間なので、2番目は5.000秒から8.500秒まで表示されます。
BOMあり・なしのUTF-8で3つの時刻と表示時間が一致し、CRLFで保存した日本語字幕も焼き込めました。
LF改行の同じ例も別途読み込み、同じ3つの時刻と表示時間を確認しました。
字幕が少ない・途中で止まる場合は、その前後の番号、開始より後の終了時刻、字幕間の空行を見直します。
ffprobeで時刻が読めても表示や音との同期を保証するものではないため、使うプレーヤーでも最初と最後を確認してください。
元のSRTを別名で残して編集すれば、失敗したときは元ファイルを開き直して戻せます。
2026年10月3日に文字コードと時刻を再確認した結果
Windows 11 Pro(build 26200)、Ryzen 5 7530U・RAM約16GB、FFmpeg 9.0.2(gyan.dev full build)で、上の3字幕を新しく保存して確認しました。CRLF・末尾改行ありのUTF-8は236バイト、BOMありは239バイト、CP932は198バイト、LFのUTF-8は224バイトでした。
4ファイルともffprobeで1.000秒・3.000秒、5.000秒・3.500秒、9.000秒・2.000秒の開始時刻・表示時間を取得できました。ただし、日本語テキストをデコードできることと、時刻だけを読み出せることは別です。CP932の焼き込みは文字コードを指定しないとエラーになり、charenc=CP932を指定するとUTF-8と同じ描画になりました。
日本語の表示は、12秒・640×360・30fpsの自作の色模様と合成音に焼き込んで確認しました。字幕のオン・オフやPremiereへの読み込み、Webページ上の表示を検証した結果ではありません。変換コマンドと実際の出力画像はFFmpegで字幕を焼き込む・埋め込む手順に掲載しています。
WebVTT(.vtt)との違い
WebVTT は、Web ページの動画(HTML の video タグ)で使う字幕の形式です。
次はFFmpegで上のSRTをVTTへ変換する例です。-nで既存の出力への上書きを止めます。拡張子を変えるだけでは、WEBVTTの先頭行や時刻の区切りは変わりません。
ffmpeg -n -i "sub_utf8.srt" "sub.vtt"WEBVTT
00:01.000 --> 00:04.000
こんにちは。字幕のテストです。
00:05.000 --> 00:08.500
2行目も
このように表示されます。
00:09.000 --> 00:11.000
<i>斜体</i>も使えます。| 比較項目 | SRT | WebVTT |
|---|---|---|
| 拡張子 | .srt | .vtt |
| 先頭 | なし | WEBVTT |
| 番号 | 必要 | 無くてよい(変換後は消えた) |
| ミリ秒の前 | ,(カンマ) | .(ピリオド) |
| 時が0のとき | 00: を書く | 省ける(変換後は 00:01.000 の形) |
| 主な使い道 | 動画プレーヤー・編集ソフト・字幕の配布 | Web ページの動画 |
WebVTTはW3Cの仕様でUTF-8、WEBVTTの先頭行、ピリオドを使う時刻などが定義されています。字幕識別子は任意です。字幕の位置や装飾を含むVTTからSRTへ変換する場合は、その情報が残るとは限りません。変換後は本文と時刻、必要な表示を読み込み先で確認します。
SRTが読めない・ずれる場合の確認
| 症状 | 確認する内容 |
|---|---|
| 字幕ファイルを選べない | 実際の拡張子が.srtか、.srt.txtやリッチテキストになっていないか |
| 字幕の時刻を読めない | 半角の数字、カンマ、–>、空行。終了が開始より前になっていないか |
| 日本語が文字化けする | 元の文字コードを確認してUTF-8へ変換する。拡張子や文字コードの名前だけを変えない |
| 文字が四角で表示される | 日本語を含むフォントが利用できるか。文字コードの問題と区別する |
| 動画を途中から使うと字幕がずれる | 切り出した動画の開始位置とSRTの時刻の基準が一致するか |
| すべて同じ時間だけずれる | 字幕の時刻のオフセットを確認し、映像・音声そのもののずれと区別する |
| 後半ほどずれる | 動画の版・長さ・編集内容が字幕作成時と同じか。開始だけを動かして全体が直るとは考えない |
手書きと自動文字起こしの使い分け
数個の短い字幕は上の書式で直接作れます。長い会話は字幕作成ソフトや文字起こしで時刻付きSRTを書き出し、原音に合わせて固有名詞・数字・時刻を修正します。音声から作る手順はWhisperの使い方で確認できます。自動生成の本文や時刻を確認せず、そのまま完成した字幕とは扱いません。
字幕は意味の切れ目で改行し、短い時間に文字を詰めすぎないよう分けます。文字数・行数・表示時間に納品先の指定がある場合はそれを優先します。SRTの書式として読めることと、視聴者が読めることは別なので、実際の画面サイズで音声と合わせて確認してください。
作ったSRTを映像の一部にするか、切り替えられるトラックにするかは字幕の焼き込み・埋め込み、関連操作は動画編集の手順一覧へ進んでください。公式資料確認:2026年10月3日。9月29日・10月2日の既存記録と今回の検証は区別して保存しています。
