Subtitle timing tool
To fix out-of-sync subtitles, shift every cue by the seconds you enter — type -2.5 to move them 2.5 seconds earlier, or a positive value to delay them. Both .srt and .vtt are supported, the timecodes stay in SRT or VTT format, and the whole thing runs in your browser.
Last updated: 2026-06-11
Drop your subtitle file here, or click to browse
Supports .srt and .vtt
Positive delays the subtitles (they appear later); negative pulls them earlier. Times that would go below zero are clamped to 00:00:00.000.
Drop in your .srt or .vtt file. The tool detects the format and counts every cue.
Type the shift in seconds — positive to delay, negative to advance. Decimals like -2.5 are fine.
Every cue moves by the same amount. The preview shows old and new timecodes side by side.
Save the corrected file as name.shifted.srt or name.shifted.vtt in the original format.
A shift is the right fix when the subtitles are off by the same amount everywhere. Match your symptom to the value you type:
| Symptom | Enter | Effect |
|---|---|---|
| Subtitles appear about a second before the speech | -1 | Pulls the whole track 1 second earlier |
| Subtitles lag half a second behind the dialogue | 0.5 | Delays every cue by 500 ms |
| A 3-second intro logo was added to the video | 3 | Pushes all cues 3 seconds later |
| Subtitles trail the audio by 2.5 seconds | 2.5 | Delays every cue by 2500 ms |
| First lines start at the very top of the file too late | -0.25 | Advances cues 250 ms; cues near 0 clamp to zero |
A shift moves every cue by a constant amount and keeps the spacing between cues identical. Use it when the subtitles are off by the same gap from the first line to the last. If the subtitles are in sync at the start but drift further apart as the video plays, the file was authored for a different frame rate — a constant shift cannot fix that. In that case rescale the timings with the subtitle FPS converter.
Upload your .srt or .vtt file, type the offset in seconds (for example -2.5 to pull subtitles 2.5 seconds earlier), and apply. Every cue's start and end time moves by the same amount, the timecode format stays SRT or VTT, and you download the corrected file.
A positive value delays the subtitles so they appear later on screen; a negative value pulls them earlier. If subtitles show up before the dialogue, use a negative shift. If they lag behind the speech, use a positive shift.
Yes. The input accepts decimals and negatives, so 1.25 or -0.75 work. The value is converted to milliseconds (seconds × 1000) before it is applied, so you get millisecond-level precision.
No. The output keeps the same format you uploaded. An .srt file stays SubRip with comma-millisecond timecodes; a .vtt file keeps its WEBVTT header and dot-millisecond timecodes. Only the numbers in the timecodes move.
Any start or end time that would go below 00:00:00.000 is clamped to zero, so timecodes never go negative. Cues near the very start of the file may bunch up at zero if your negative offset is large.
Everything runs locally in your browser with JavaScript. The file is never uploaded, there is no account, and there is no per-character cost — the shift is instant even for files with thousands of cues.
No. A constant shift fixes a fixed offset. If the gap grows over time, the file is at the wrong frame rate. Use the FPS converter to rescale the timings instead.