SNUBBIX

How SRT Timestamps Work

HH:MM:SS,mmm explained, with the rules that trip people up and how to convert from other formats.

Updated 2026-10-26

Every SRT cue has a timing line in this exact form:

00:01:02,500 --> 00:01:05,250

Reading a timestamp

Part Meaning Rule
00 hours two or more digits
01 minutes two digits, 00–59
02 seconds two digits, 00–59
500 milliseconds exactly three digits

The separator before milliseconds is a comma. This is the single most common SRT error: WebVTT uses a full stop, and files converted carelessly end up with the wrong one.

The arrow

Start and end are separated by a space, two hyphens, a greater-than sign and a space: -->. Some players tolerate variations; many don't.

Start must come before end

A cue whose end time is equal to or earlier than its start time is invalid. Each cue's start should also be at or after the previous cue's start.

Converting from seconds

If a tool gives you times in seconds (e.g. 62.5), convert like this:

function toSrt(ms) {
  const h = Math.floor(ms / 3600000);
  const m = Math.floor((ms % 3600000) / 60000);
  const s = Math.floor((ms % 60000) / 1000);
  const f = ms % 1000;
  const p = (n, w = 2) => String(n).padStart(w, "0");
  return `${p(h)}:${p(m)}:${p(s)},${p(f, 3)}`;
}
toSrt(62500); // "00:01:02,500"

Frame-based timecodes

Editing software often shows timecode as HH:MM:SS:FF (frames). To convert, divide the frame number by the frame rate: at 25 fps, frame 12 is 480 ms. Using the wrong frame rate causes gradual drift — subtitles that start correct and get progressively later.

Have a Subtitle Project to Deliver?

Share your video duration, source files, required output, and deadline to receive a project-specific quotation.