Home β€Ί Tools β€Ί Shift Subtitle Timing

Shift Subtitle Timing

Move every subtitle cue earlier or later to fix out-of-sync captions.

Drop a subtitle file here, or
Shift by seconds or ms

Your file never leaves your device

This tool is plain JavaScript. There is no upload step and no server-side processing, so confidential captions, unreleased content and client material stay on your machine.

What this does

When subtitles are consistently early or late, every cue is off by the same amount. Rather than re-transcribing, shift the whole track by a fixed offset β€” the fix takes seconds and keeps the original text intact.

How to use it

  1. Paste or drop your subtitle file.
  2. Enter an offset such as +2.5 or -1.2 (seconds), or type a value directly in milliseconds.
  3. Download the corrected file. Cues that would start before zero are clamped to 00:00:00.

Good to know

  • Use a positive offset to delay subtitles, a negative one to make them appear earlier.
  • To find the offset, pick one cue and compare its timestamp with the moment the line is actually spoken.
  • The output format follows the input, so an SRT file stays SRT.

Offset or resampling? Two different sync problems

Subtitles fall out of sync in two different ways, and they need different fixes. Tell them apart by checking a cue near the start of the file and another near the end.

Constant offset. Both cues are wrong by the same amount β€” for example every line appears two seconds late. This is what this tool fixes: apply one offset and the whole track lines up.

Progressive drift. The first cue is nearly right and the last one is badly wrong, with the error growing through the file. That is a frame-rate mismatch, usually 23.976 fps against 25 fps, and no single offset can fix it. The file needs resampling to the video's frame rate instead.

If you shift a drifting file until the middle lines up, you make both ends worse. Confirm which problem you have before entering an offset.

Worked example

Input β€” subtitles 2.5s too early
1
00:00:01,000 --> 00:00:04,000
Hello there.

2
00:00:04,200 --> 00:00:07,000
How are you?
Output β€” offset +2.5
1
00:00:03,500 --> 00:00:06,500
Hello there.

2
00:00:06,700 --> 00:00:09,500
How are you?

Enter +2.5 and every start and end time moves 2.5 seconds later. The text is untouched β€” only the timing changes.

FAQ

How do I know what offset to use?
Pause the video on a line you can identify, note the real time, and subtract the subtitle's timestamp from it. If a line is spoken at 00:01:30 but the cue says 00:01:28, use +2.
What happens to cues that would move before zero?
They are clamped to 00:00:00,000. Shifting a track earlier than its first cue allows is a sign the offset is too large.
Can I shift only part of a file?
Not with this tool β€” it applies one offset to every cue. Split the file first if you need per-section offsets.

Troubleshooting

  1. All the cues piled up at 00:00:00The offset is too large and negative. Cues cannot start before zero, so they are clamped. Reduce the offset and check the first cue.
  2. Subtitles drift progressively out of syncA fixed offset cannot fix drift. Drift means the subtitle frame rate differs from the video β€” typically 23.976 against 25 fps β€” which needs resampling, not shifting.
  3. The picture and sound are out of sync with each otherThis tool only moves subtitles. Correct the audio delay in your video first, then resync the captions against the corrected video.
  4. The offset box rejects my valueEnter a decimal number of seconds such as 2.5, or whole milliseconds in the second box. Timecode strings like 00:00:02,500 are not accepted here.

Related tools

Last updated 2026-09-21. All conversions happen locally in your browser.