SubRip subtitles (SRT)
SRT stores numbered text cues with millisecond start and end timestamps separated into plain-text blocks.
An SRT file is easy to inspect because its main structure is plain text. Each block identifies a subtitle cue, gives its interval, and contains the text to display.
1
00:00:12,500 --> 00:00:15,000
The last train leaves at midnight.
2
00:00:16,200 --> 00:00:18,000
Then we still have time.
The first cue begins at 12.5 seconds and lasts 2.5 seconds. The second begins at 16.2 seconds and lasts 1.8 seconds. The 1.2 seconds between them contains no cue in this example.
The block's fields
| Field | Meaning |
|---|---|
1 or 2 |
Cue sequence number, not a video frame number |
00:00:12,500 |
Hours, minutes, seconds and milliseconds |
--> |
Separates start and end timestamps |
| Following text lines | The visible wording and explicit line breaks |
| Blank line | Separates this block from the next |
Changing the number from 2 to 3 does not move the cue in time. Changing its timestamps does. A cue can contain several text lines; those lines still belong to one interval.
SRT is a widely implemented convention rather than a format with one comprehensive normative standard for every extension. Basic italic, bold or other markup is interpreted by many players, but the supported subset and its appearance vary. A simple portable cue should not rely on elaborate positioning instructions that the reader may ignore.
The file needs the right character decoding
The timing punctuation can parse correctly while accented or non-Latin text is garbled. SRT files encountered in existing libraries can use UTF-8 or legacy encodings; the extension alone does not declare which bytes were written.
A recognizable wrong-decoding pattern such as é where é was intended points to character interpretation. An empty square in otherwise correct text can instead point to missing font coverage. These are different stages of text rendering.
An external SRT also does not inherently identify its language, the corresponding movie edition, or whether it contains only selected foreign dialogue. File naming and library metadata provide those associations. Emby's naming documentation explains the external-file conventions.
Inside Matroska, the container carries time
Matroska's S_TEXT/UTF8 mapping stores the UTF-8 cue text as a subtitle payload. Container timing and duration describe when it appears. The standalone SRT counter and timestamp line are therefore not simply copied into every packet as visible content.
Extracting that track to a standalone SRT reconstructs text blocks and timestamp lines from the track. Its cue numbering or millisecond rounding can differ while the intended presentation remains equivalent at the output format's precision.