Two different sync problems, two different fixes
“Out of sync” covers two unrelated faults, and using the wrong fix makes things worse. If every line is off by the same amount — the whole track is a second late, start to finish — that’s a constant offset. If the lines start close and drift further apart as the runtime goes on, that’s progressive drift, almost always a framerate mismatch between the subtitle source and your video.
Constant offset
Add or subtract a fixed amount and every timestamp moves together. A positive offset delays the subtitles; a
negative one advances them. Internally each cue becomes start + offset and end + offset,
and anything that would land before zero is clamped to 00:00:00,000.
offset = +2.5s
00:00:04,180 --> 00:00:06,020 becomes 00:00:06,680 --> 00:00:08,520 Two-point linear correction
When the error grows over time, one number can’t fix it — you need to stretch the timeline, not just slide it.
Mark two lines you can anchor: pick a line near the start and a line near the end, and for each, enter the time it
currently shows and the time it should show. The tool fits a straight line through those two points
(new = scale × old + offset) and applies it to every cue, so the first and last anchors land exactly
and everything between is corrected in proportion.
This is the real fix for the classic 25 fps-vs-23.976 fps problem: a subtitle that’s perfect at the opening titles but a few seconds out by the credits. If you already know the two framerates, the framerate converter does the same maths from presets.
What it preserves
- Format — SRT stays SRT, VTT stays VTT, ASS stays ASS. Only the timestamps change.
- Text, tags and styling — untouched. Cue settings and ASS styles ride along unchanged.
- Order and numbering — cues keep their sequence; SRT output is renumbered cleanly.
- Negative results — clamped to zero, with a count of how many cues were affected.
- Size — no cap. A full film’s worth of cues is retimed instantly, in your browser, with no upload.