Subtitle timing
Subtitle timecodes explained
Last updated: 2026-06-11
A subtitle timecode is a pair of times that tells the player when a cue appears and disappears, measured from the start of the video. It is written as start --> end — for example 00:01:14,500 --> 00:01:17,200, which shows the line from 74.5 to 77.2 seconds. SRT puts a comma before the three-digit milliseconds; WebVTT puts a dot. The times are absolute wall-clock milliseconds, not frame numbers, so the same file plays correctly at any frame rate.
Because the timecode alone decides when text reaches the screen, it is the part of a subtitle file you must never alter when translating. Change the words; leave the times exact.
How a timecode line is built
Every timecode line has two times joined by --> (space, two hyphens, greater-than, space). Each time is two-digit hours, two-digit minutes, two-digit seconds, a separator, and three-digit milliseconds. So 00:00:05,250 is five and a quarter seconds in. The end time must be at or after the start. WebVTT also allows cue settings after the end time, but the time fields themselves are identical in structure.
Comma vs dot: the format table
The only structural difference between the two formats’ timecodes is the millisecond separator.
| Format | Pattern | Separator | Example |
|---|---|---|---|
| SRT | HH:MM:SS,mmm | , comma | 00:01:14,500 |
| WebVTT | HH:MM:SS.mmm | . dot | 00:01:14.500 |
For the full file structure behind these timecodes, see the SRT format and the WebVTT format.
Time, not frames
SRT and WebVTT store absolute time in milliseconds, so they are frame-rate independent. One frame at 25 fps lasts 40 ms; at 30 fps it lasts about 33 ms. Because the file uses milliseconds rather than frame counts, the same .srt aligns whether the video runs at 24, 25, or 30 fps. Some broadcast formats are frame-based and break when the frame rate changes — SRT and VTT do not, which is one reason they are the common interchange formats.
Why translation must preserve timecodes
The timecode is the bridge between text and audio. If a translation tool reflows lines, merges cues, or rounds a millisecond value, the affected lines drift away from the speech. A correct subtitle translation edits only the text inside each cue and copies the index and timecode lines unchanged. That is the rule SubLingo follows, and it is why a paste into a general chat tool — which rewrites the whole block — so often returns an out-of-sync file. See how to translate an SRT file for the step-by-step.
Fixing out-of-sync subtitles
When subtitles are off but the format is valid, the cause is timing, not punctuation. A constant offset — every line early or late by the same amount — is fixed by shifting all timecodes by a fixed number of milliseconds. Growing drift, where lines get further off as the video plays, points to a frame-rate or speed mismatch between the file and the video; re-time against the exact source. Translation never introduces either problem as long as it leaves timecodes untouched.
Key facts
- Timecode = start --> end, measured from the start of the video.
- SRT: HH:MM:SS,mmm (comma). WebVTT: HH:MM:SS.mmm (dot).
- Milliseconds are three digits: 500 = 0.5 s.
- Times are absolute milliseconds, not frames — frame-rate independent.
- Precision is to the millisecond, finer than one frame (40 ms at 25 fps).
- Translation changes text only; every timecode stays identical.
Definitions
- Timecode
- A time position in the video expressed as
HH:MM:SSplus milliseconds. - Start time
- The moment a cue appears, measured from the start of the video.
- End time
- The moment a cue disappears. Must be at or after the start time.
- Duration
- End minus start. How long the text stays on screen, often 1–7 seconds for readability.
- Offset
- A constant shift applied to every timecode to align a file that starts early or late.
- Frame rate
- Frames per second of the video (24, 25, 30). SRT/VTT use absolute time, so they are frame-rate independent.
Related guides
FAQ
What is a subtitle timecode?+
A subtitle timecode is a pair of times marking when a cue appears and disappears, measured from the start of the video. It is written start --> end, for example 00:01:14,500 --> 00:01:17,200, meaning the text shows from 74.5 to 77.2 seconds.
What format are subtitle timecodes written in?+
Hours:Minutes:Seconds plus milliseconds. SRT uses a comma before the milliseconds (HH:MM:SS,mmm); WebVTT uses a dot (HH:MM:SS.mmm). Milliseconds are always three digits, so 500 means 0.5 seconds.
Are subtitle timecodes based on frames or real time?+
SRT and WebVTT timecodes are wall-clock times in milliseconds, not frames. They are independent of frame rate. Frame-based formats exist (such as some broadcast formats), but .srt and .vtt store absolute time, so the same file works at 24, 25, or 30 fps.
Why must translation keep timecodes unchanged?+
The timecode tells the player exactly when to show each line. If translation alters a single timecode, that line drifts out of sync with the audio. Translating only the text and leaving every timecode byte-for-byte identical keeps the subtitles aligned.
What happens if two cues overlap in time?+
If one cue's end time is later than the next cue's start time, the lines overlap on screen for that interval. Most players render both. Translation does not change overlap because the times are preserved exactly.
How precise are subtitle timecodes?+
To the millisecond — three digits after the separator. That is finer than a single video frame at common frame rates (one frame at 25 fps is 40 ms), so timecodes can position a cue more precisely than frame counting.
Why are subtitles out of sync even though the timecodes look right?+
Usually a frame-rate or offset mismatch between the subtitle file and the video, not a timecode format error. A constant offset shifts every line by the same amount; a frame-rate mismatch makes drift grow over time. Re-time against the correct video.