Subtitle Shifter
Processed locally in your browser — nothing is uploaded.
Quick answer
Out-of-sync subtitles are almost always off by a constant amount — the whole file is a second or two early or late. A subtitle shifter fixes this by adding or subtracting a fixed offset from every cue’s start and end time at once. Enter how many seconds to shift (negative to pull earlier, positive to push later), and this tool re-times the entire file in your browser. Nothing is uploaded.
How to subtitle shifter
Load the subtitle file
Drop your .srt, .vtt, .ass or other subtitle file in, or paste the text. Format is detected automatically.
Set the shift amount
Type the offset in seconds. If subtitles appear too early, use a positive value to delay them; if too late, use a negative value to advance them.
Export the re-synced file
The preview updates live so you can check a cue against the video. Download the shifted file or copy it, keeping the original format.
How do you work out the right shift?
Play the video and note when the first line of dialogue is actually spoken, then look at the timestamp on that same line in the subtitle file. The difference is your offset. If the line is spoken at 00:00:05 but the subtitle is timed to 00:00:07, the file is two seconds early — shift it by +2 seconds to delay it into place.
Constant offset vs. gradual drift — which do you have?
Shifting only fixes a constant offset — subtitles that are wrong by the same amount from start to finish. If your subtitles start in sync but slowly drift further out as the video plays, you have a frame-rate mismatch, not an offset, and shifting will not fix it. That case needs rescaling (a linear re-sync from two anchor points), because the error grows over time.
| Symptom | Cause | Fix |
|---|---|---|
| Off by the same amount throughout | Constant offset | Shift by ±X seconds (this tool) |
| In sync at the start, drifting by the end | Frame-rate mismatch (e.g. 23.976 vs 25) | Linear re-sync / speed change |
| Correct in parts, wrong in others | Edited or re-cut video | Split and shift each section |
Does shifting work on every format?
Yes. Because the file is parsed into a common timing model first, the shift applies uniformly whether the source is SRT, VTT, ASS, SBV, TTML or LRC, and the file is written back in its original format with the styling intact. Only the timestamps change.
Is the file uploaded to shift it?
No. The re-timing is arithmetic done in your browser — each timestamp has the offset added and the file is rebuilt locally. There is no upload; check the Network tab if you want proof. Your captions stay on your device.
Related subtitle tools
For fine cue-by-cue changes, open the file in the subtitle editor. Need to change the format as well? Use the subtitle converter. Once your timing is right, you can burn the subtitles into the video so they can never go out of sync again.
Your files never leave your device
Processed locally in your browser — nothing is uploaded. You can verify it yourself: open your browser’s developer tools, watch the Network tab, and use the tool — no upload request is ever made.
Frequently asked questions
My subtitles are a few seconds ahead — which way do I shift?
Ahead means they appear too early, so delay them with a positive shift. Enter the number of seconds they are early as a positive value.
Can I shift by a fraction of a second?
Yes. Enter decimals such as 1.5 or 0.25. The offset is applied in milliseconds internally, so sub-second corrections are exact.
Why are my subtitles still drifting after I shifted them?
Shifting fixes a constant offset only. Progressive drift is a frame-rate mismatch and needs rescaling from two anchor points, not a single shift.
Does shifting change the subtitle format?
No. The file is exported in the same format it came in — only the timestamps move. Styling and structure are preserved.
What happens to cues near the start if I shift backwards?
Timestamps are clamped at zero, so no cue is given a negative time. Cues that would go before 0 simply start at 0.
Can I shift multiple files by the same amount?
Yes. Apply the same offset to each file you load. Because it is all local, there is no limit on how many you process.