Shift & resync subtitles

Apply a constant millisecond offset or a two-point linear correction to every cue. SRT, VTT and ASS — corrected locally, no upload.

Runs in your browser. Files never leave your device.

Drop a subtitle file

or ·

SRT, VTT or ASS/SSA · processed in your browser · nothing is uploaded

Correction

Positive pushes subtitles later; negative pulls them earlier. Decimals welcome (e.g. -1.4).

Mark two lines whose correct times you know — one early, one late. Times as HH:MM:SS,mmm.

Reference 1 (early)
Reference 2 (late)

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.

Frequently asked questions

My subtitles start in sync but drift further off as the film goes on. What fixes that?

That’s framerate drift, not a constant offset — the error grows with time, so a single shift can’t correct it. Switch to two-point sync: mark one line near the start with its correct time and one line near the end with its correct time, and every cue in between is stretched to fit. You can also use the dedicated framerate converter if you know the exact source and target rates.

What’s the difference between a constant offset and two-point sync?

A constant offset moves every cue by the same number of seconds — right when subtitles are uniformly early or late. Two-point sync applies a linear transform (scale + offset), which both shifts and stretches the timeline — right when the drift changes over the runtime, usually from a framerate mismatch.

How do I find the right offset?

Play the video, note when a specific line is actually spoken, and check the time that cue currently shows. The difference is your offset. If the subtitle appears too early, use a positive offset to push it later; if too late, use a negative one.

What if a shift pushes a cue before zero?

Any cue that would start before 00:00:00,000 is clamped to zero and the tool tells you how many were affected, so you never get negative timestamps that break players.

Which formats can I shift, and does the format change?

SRT, VTT and ASS/SSA. The timing is adjusted and the file is written back in the same format it came in, so nothing else about it changes.