Home › Tools › Subtitle Timing Checker

Subtitle Timing Checker

Audit an SRT or VTT file for cues that are too fast, too short, too long or overlapping.

Drop a subtitle file here, or
Max characters/second Min ms per cue Max ms per cue Max chars per line

Your file never leaves your device

This tool is plain JavaScript. There is no upload step and no server-side processing, so confidential captions, unreleased content and client material stay on your machine.

What this does

A subtitle file can look perfect in an editor and still be unreadable on screen: cues that vanish before the eye can finish them, lines that run past the edge of the frame, two cues on screen at once. This checker measures every cue against the limits broadcasters and streaming platforms actually use and lists the ones that break them.

How to use it

  1. Paste your subtitle file, or drop the .srt / .vtt file onto the box.
  2. Adjust the limits if you are working to a specific style guide.
  3. Read the report, then open the flagged timestamps in your editor and fix them.

Good to know

  • Characters per second counts every character including spaces, which is the convention used by most delivery specifications.
  • Formatting tags such as <i> and ASS overrides are stripped before measuring, so styling does not inflate the count.
  • An overlap is reported when the next cue starts before the current one ends. Sub-frame overlaps are ignored, because rounding produces them harmlessly.
  • The default limits match common streaming practice. Broadcast guides are often stricter — some sit at 16 or 17 CPS.
  • The report is a finding list, not a fix. Timing changes are yours to make; use the shift or resync tools when the whole track needs the same correction.

The four things that make subtitles unreadable

Reading speed is measured in characters per second (CPS). Most style guides land between 12 and 21 CPS; 20 is a common hard ceiling for streaming delivery. A cue at 30 CPS is technically valid and completely unreadable, which is why no player will ever warn you about it.

Minimum duration stops the opposite failure — a two-word cue that flashes for 300 milliseconds. Even a short line needs roughly 0.8 seconds on screen because the eye needs time to find the text at all, not just to read it. The usual floor is about five-sixths of a second.

Maximum duration catches the cue that nobody noticed was left on screen for twelve seconds. Viewers re-read a subtitle that never changes and assume it is broken, so seven seconds is a practical ceiling even when the dialogue continues.

Line length and line count are about layout rather than timing. Around 40–42 characters per line and two lines per cue is what fits comfortably on a phone in portrait. Wider than that and the player either wraps or clips, and neither is under your control after upload.

Worked example

Input — .srt
1
00:00:01,000 --> 00:00:02,200
The quick brown fox jumps over the extremely lazy dog tonight

2
00:00:02,100 --> 00:00:02,400
Hi.
Output — report
Subtitle timing report
======================
2 cues checked · 2 flagged (100%)

Too fast      (> 20.0 CPS)                  1
Line too long (> 42 chars)                  1
Too short     (< 0.83s)                     1
Overlapping cues                            1

--- Flagged cues ---

#0001  00:00:01,000 -> 00:00:02,200  (1.20s, 61.7 CPS)
        The quick brown fox jumps over the extremely lazy dog tonight
        ! too fast — 61.7 CPS (max 20.0); line too long — 61 chars (max 42)

Cue 1 carries 74 characters in 1.2 seconds. Cue 2 is both too short and starts before cue 1 has ended — the report catches all three problems at once.

FAQ

What CPS should I aim for?
12–20 is comfortable, with 20 a common hard ceiling. Children's content and language-learning material sit lower, around 12–15. Fast dialogue that genuinely cannot fit is usually condensed rather than sped up.
Why is my minimum duration flagged when the cue is one word?
Because the eye has to locate the text before it can read it. Even a single word needs roughly 0.8 seconds on screen, which is why the default floor is 833 ms.
Does it count formatting tags?
No. HTML tags and ASS override codes are stripped before measuring, so a heavily styled cue is not penalised for its markup.
Can it fix the problems it finds?
No, deliberately. Changing reading speed means rewriting the text, and changing durations means editing timings — both are judgement calls. The report tells you where to look.
Are the reported overlaps real?
Only if they exceed one millisecond. Sub-frame overlaps come from rounding and are ignored, so anything reported is visible to a viewer.
Is there a cue limit?
No. Nothing is uploaded, so the practical limit is browser memory. Files with several thousand cues are checked instantly.

Troubleshooting

  1. The report is emptyNo cues were recognised. Check that the file uses --> between timestamps — a plain transcript or an SBV file will not parse.
  2. Nothing is flagged but the subtitles still feel rushedRaise the sensitivity by lowering the CPS limit. The default of 20 is a delivery ceiling, not a comfort target; many editors work to 16 or 17.
  3. Almost every cue is flaggedThe file may be auto-generated caption output with no line balancing. Run it through the clean subtitles tool first, then re-check.
  4. Durations look wrongThe checker reads the timestamps as written. If the whole track is offset, fix it with the shift tool before checking.
  5. Counts do not add up to the flagged totalOne cue can break several rules at once. The summary counts rule violations; the flagged list counts cues.

Related tools

Last updated 2026-09-21. All conversions happen locally in your browser.