Shift subtitle timing

Move every cue earlier or later by a fixed number of milliseconds to fix sync

The tool loads here. It needs JavaScript, because the work happens on your device.

Your files and your privacy

Your caption file is read and retimed inside this browser tab and is never uploaded, which matters because subtitle files often contain dialogue that has not been released. The page’s Content-Security-Policy limits connect-src to this origin, and Clear data discards the cues immediately.

What this tool does

Add one offset to the start and end of every cue in an SRT or VTT file, the fix for captions that are out by the same amount throughout. The offset is in milliseconds and may be negative; timestamps are clamped at zero and you are told how many cues that affected.

Shifting adds the same offset to the start and the end of every cue, which is the correct fix when captions are wrong by a constant amount from the first line to the last. A positive number of milliseconds delays the subtitles, a negative number moves them earlier. Cue text, order and length are otherwise untouched, and the file is re-validated afterwards, so an overlap or a zero-length cue caused by the shift is reported by cue number.

How to use it

  1. Load your .srt or .vtt file, then note where a line near the start is spoken and where it appears.
  2. Check a line near the end too: if both are out by the same amount a shift is right, and if the error has grown, scale instead.
  3. Enter the difference in milliseconds. Two seconds is 2000, and a negative value moves the subtitles earlier.
  4. Select Shift and read the message, which reports how many cues were clamped to 00:00:00.
  5. Check the validation panel, then download as SRT or VTT. Undo reverses the shift exactly.

Example use cases

Supported input and output

Accepts

Produces

What this tool will not do

Common mistakes

Technical notes

Cues are held as integer milliseconds from zero, so a shift is a single addition per timestamp and introduces no rounding of its own. Both ends are floored at zero, and a cue counts as clamped when either end would have gone negative, which is exactly what the warning reports — staying silent would hand back a file that looks correct and is not. Validation re-runs after every change and names each affected cue, flagging one that ends before it starts, one out of order, a zero-duration cue and an overlap. Scaling is a separate operation, because frame-rate error is proportional to elapsed time and no addition corrects it.

Frequently asked questions

Can I enter a negative offset?
Yes. A negative number moves every cue earlier, which is what you want when the captions lag behind the dialogue. No timestamp may go below zero, so any cue that would have is pinned to 00:00:00 and reported.
What does the clamping warning mean?
You shifted backwards by more than some cue’s start time. Rather than write a negative timestamp, which neither format can represent, those cues were pinned to 00:00:00 and counted. If the count is more than one or two, the offset is too large and you should undo rather than adjust.
Should I shift or scale?
Shift when a line near the start and a line near the end are out by about the same amount. Scale when the error grows as the video plays, which means a frame-rate mismatch: 25 divided by 23.976 is roughly 1.0427, and the reverse is roughly 0.959.