← All writing

2026-09-01 · 6 min read

The 24 characters per second rule, and what translation does to it

Reading speed belongs to the viewer, not the language. Measured across eight languages: the English source already breaks the limit more often than any translation does, and most residual violations cannot be fixed without deleting dialogue.

Broadcast subtitling guidelines converge on a reading speed around 20 to 25 characters per second for Latin-script languages. This pipeline uses 24. A cue that shows 60 characters for two seconds is 30 CPS and will vanish before a viewer has finished it, however good the translation is.

The source is already too fast

The surprising number, measured on four episodes of the same show across eight target languages: the English source itself runs over 24 CPS on 7.5% of cues. Every translation came in lower. German, the densest of the eight, was over on 3.8% of cues. French 2.1%, Italian 1.0%, Bulgarian 0.3%.

That is not because the translations are shorter than the English. Most are longer. It is because the model is told to compress rather than to translate word for word, and it does: a fast English cue gets a tighter translation, not a longer one.

Why a laxer limit for German is the wrong fix

The first investigation of German got this wrong. German trips the 24 CPS check more than any other language, so the obvious knob is a higher ceiling for German. But reading speed is a property of the viewer, not of the language. A German viewer does not read faster because their language is longer. Raising the limit would simply ship harder-to-read German subtitles with a cleaner report. The ceiling stays at 24 and German spends more of its budget on repairs.

When the check cannot be satisfied

Across all eight languages, 65% of the reading-speed flags that survived repair sat on cues whose English source was already over the limit. The slot is too short for the content in any language. The only way to pass is to delete part of what was said, which this pipeline refuses to do.

So the check now distinguishes the two cases. A translation that is denser than its source is flagged as too fast and sent back. A translation that merely inherited an impossible slot is flagged as source-too-fast, reported, and not sent back, because every repair request aimed at one was money spent on an instruction the model could not follow. That change cut repair requests by 41% overall and 52% for German, and every language re-scored within noise of its previous baseline.

Scripts that read differently

The 24 figure is for Latin and Cyrillic. A Japanese kana carries roughly an English word, so Japanese runs at 7 characters per second, Chinese at 9, Korean at 12. Comparing raw rates across scripts excused a genuinely unreadable Japanese cue at 9 CPS because the English source was at a comfortable 15. The comparison is now each side against its own ceiling.

What this means if you are checking a file

  • Divide characters by seconds for a few of the longest cues. Anything over about 25 for a Latin-script language is a problem.
  • Before blaming the translation, do the same sum on the English. If the source is over, the translation cannot be under without losing words.
  • A translation that is much shorter than its source on a fast cue is not a good sign either. It probably fits by dropping meaning, which the length-ratio check is there to catch.

Read next

How to translate an SRT file without losing a line

7 min read

ProvenSubs translates subtitles and checks every cue before you see it.

Translate an episode free →