Skip to main content
SubtitleMatrix

Shift Subtitles

TimingShift by a fixed offset
Or paste subtitle text

Options

Milliseconds to move every cue by. A positive number pushes the subtitles later, a negative one pulls them earlier. Zero is a legal value: the file comes back unchanged, which is a quick way to confirm a file already sits where you want it.

Which frame rate the timings are counted in. On the format pages this is what MicroDVD needs, because it stores timing as frame numbers. On the frame rate pages it is the rate the file was timed against — the version the subtitles were made for — and the page's second box takes the rate of the video you are going to use them with. 23.976, 24, 25, 29.97, 30, 50, 59.94 and 60 are the common ones. Getting it wrong shifts the whole timeline, and on the frame rate pages it shifts it by a ratio rather than by a fixed amount.

This page moves every cue in a subtitle file earlier or later by the same amount, without touching a single word. Give it a millisecond offset — a positive number pushes the subtitles later, a negative one pulls them earlier — and every start and end time in the file comes out shifted by exactly that much.

Two things can happen at the near end of the timeline, and both are counted rather than hidden. A cue whose start would land before zero keeps its end and has its start pinned to 00:00:00, so that cue comes out shorter than it was. A cue whose end would land at or before zero is dropped outright, because there is no honest place left to put it. Every other cue keeps its original length and the cue number it already had.

Each file is read as whatever format it actually is rather than as the format you might expect: drop an SRT, WebVTT, ASS, SSA, SBV, SAMI, MicroDVD, TTML, JSON or CSV file and its own timing syntax is used. Subtitles written as plain text or as LRC are not accepted here, because neither stores an end time — shifting one would hand you back a file with nothing changed in it. Nothing is uploaded; the offset is applied in your browser, and a whole season goes through the queue in one pass.

Examples

Push a whole file 500 ms later

Input

1
00:00:01,000 --> 00:00:03,000
Hello there.

2
00:00:05,500 --> 00:00:08,000
Second line.

Output

1
00:00:01,500 --> 00:00:03,500
Hello there.

2
00:00:06,000 --> 00:00:08,500
Second line.

Both boundaries of every cue move by the same amount, so each one keeps its length. Nothing else in the file changes.

Pull a file earlier, past the start

Input

1
00:00:01,000 --> 00:00:02,000
The first one starts too early.

2
00:00:03,000 --> 00:00:04,000
This one is fine.

Output

1
00:00:00,000 --> 00:00:00,800
The first one starts too early.

2
00:00:01,800 --> 00:00:02,800
This one is fine.

The first cue would start at −200 ms. Its start is pinned to zero and only that boundary moves, so the cue comes out 800 ms long instead of 1000.

A cue that falls off the front

Input

1
00:00:01,000 --> 00:00:02,000
Gone entirely.

2
00:00:03,000 --> 00:00:04,000
Still here.

Output

2
00:00:00,500 --> 00:00:01,500
Still here.

The first cue ends at −500 ms, so it is removed rather than pinned to zero. The survivor keeps the number 2 — shifting never renumbers.

Frequently asked questions

Does shifting subtitles change any of the text?

No. The offset only moves start and end times, so every character of every cue is carried across untouched, including line breaks and inline tags. If you need the words changed, the text tools do that instead.

What happens to a cue that would end up before the start of the file?

There are two rules, and they are counted separately. A cue that would begin before zero has its start pinned to 00:00:00 while its end stays where the arithmetic put it, so that one cue becomes shorter. A cue whose end would land at or before zero is removed entirely, because no player can show it.

Why is there a frame rate box on a page that only adds milliseconds?

Because a MicroDVD .sub file stores its timing as frame numbers rather than clock times. Reading one and writing it back means passing through a frame rate, and where the file does not declare one, the number in that box is the one used. It is ignored for every other format.

Can I shift a plain text or LRC subtitle file?

No, and this page will not take one. Neither format writes an end time into the file, so there is nothing for the offset to move — a shift would come back looking identical to what went in. Both formats are accepted by the text tools.

Does the preview match the file I download?

Yes, on purpose. The output is read back before it is shown, so the timeline and the cue count describe the file as written rather than the numbers held in memory. On formats that round to centiseconds or to whole frames, that means you see the values that are genuinely in the file.

What does an offset of zero do?

Nothing, and the page says so. Zero is a legal offset and the file comes back byte for byte, which is a quick way to confirm that a file already sits where you want it. It is never treated as a missing value.

Related tools