Fonti Studio

HomeTools › Subtitle FPS converter

Subtitle FPS converter: 23.976, 24, 25, 29.97 fps

Subtitles in sync at the start and seconds off by the end were timed for the wrong frame rate. Rescale an SRT or WebVTT file between 23.976, 24, 25, 29.97 and 30 fps by the exact ratio. Free, in your browser.

Runs in your browser · your file never leaves your machine

Convert format

Timing is preserved to the millisecond and text passes through untouched. Both formats store real clock time, so no frame rate is involved.

Frame-rate repair

For subtitles that drift steadily: in sync at the start, seconds off by the end. Timestamps are rescaled by the exact ratio between the two rates.

Constant shift

For subtitles that are early or late by the same amount all the way through. Positive moves cues later, negative moves them earlier.

Applied after the frame-rate repair when both are set.

How findings are graded
BlockingBreaks the spec with no legitimate exception. A platform QC bounces the file.
ReviewExceeds a limit for a reason a person has to judge: a two-speaker cue, a card over dialogue, or dialogue the original cuts just as fast.
RepairableFixed mechanically when the file is written, not by an editor.

Checked against the public Netflix Timed Text limits: 42 characters per line, 2 lines, reading speed, 5/6 s to 7 s durations, 2-frame gaps, overlaps. Formatting tags are excluded from the counts, and cues of 12 characters or fewer are exempt from reading speed because they are read at a glance.

When you need a subtitle frame rate converter

One specific symptom: the subtitles are in sync at the start of the film and seconds out by the end, and the error grows steadily. That is not a delay, it is a speed mismatch. The file was timed against a video running at one frame rate and is being played against the same picture at another: a 25 fps PAL master versus a 23.976 fps file is the classic case, and 23.976 mistaken for exactly 24 is the one that passes every spot check (it drifts by only 0.1 %, about 6 seconds over a 100-minute feature). How to tell drift from offset, and where each comes from, is its own guide.

What the converter does

It multiplies every start and end time by the exact ratio between the two rates (25/23.976 = 1.04271, not a rounded 1.04) and writes the result back as a normal SRT or WebVTT at millisecond precision. Text, tags and cue order pass through untouched. If the file is also offset by a constant amount, set the shift below the frame-rate fields: it is applied after the rescale, in the right order. Not sure which rate the video really runs at? Read it from the file (ffprobe reports it as r_frame_rate), never from the filename, which is wrong often enough that we stopped trusting it.

What it will not fix

A file authored against a different cut. If the offset is zero for twenty minutes and then jumps, the reference was timed to a version with inserted or removed scenes, and no constant or ratio recovers it; the timing has to be rebuilt from the audio. And a 24 to 23.976 conform that is accompanied by a pitch-shifted audio track changes the picture duration too: rescale the subtitles to the new duration, which is exactly what the ratio does.

Need it fixed, not just flagged?

We deliver broadcast-grade subtitles that pass these checks and the ones no tool can run: glossary lock, semantic alignment, and a native-speaker read. €400 per language for a feature, flat, with a free preview first.

Send a brief

Prefer email? hello@fonti.studio