Skip to content
ToolBoxGeniehome

Subtitle Timing Shifter

Text Tools · Added

Subtitles go wrong in two different ways, and they need two different fixes. When every line is late by the same amount, one number corrects the whole file. When the error grows as the film goes on, the copy was timed against a different frame rate and no single offset can help — that needs a stretch as well as a shift. This does both, and shows the before and after timings so you can check before downloading.

Or drop a file onto this box, or paste below.

An .srt or .vtt file, up to 5 MB. It is read and retimed on your device — nothing is uploaded.

3 cues read as SRT.

What is wrong with the timing?
s

Negative makes the subtitles appear earlier, positive later. Decimals are fine — 0.4 is 400 ms.

3 cues retimed

Correction
-2.5 sthe same for every line
First cue now at
00:00:00,000
Last cue ends at
00:01:12,500

1 cue would have started before zero and was clamped to the start of the file.

Before and after

WasNowText
00:00:02,000 --> 00:00:04,50000:00:00,000 --> 00:00:02,000Subtitles out of sync?
00:00:05,000 --> 00:00:08,00000:00:02,500 --> 00:00:05,500Paste the file here, or choose it above.
00:01:12,250 --> 00:01:15,00000:01:09,750 --> 00:01:12,500Every line moves together.

How to use the subtitle timing shifter

  1. 1Choose the .srt or .vtt file, drop it on the box, or paste the text straight in.
  2. 2Pick what is wrong. Use a fixed shift when the whole file is uniformly early or late; use frame rate when you know both rates; use two sync points when you know neither.
  3. 3For a fixed shift, enter the seconds — negative makes the subtitles appear earlier. For sync points, give one line near the start and one near the end, with the time each shows at now and the time it should show at.
  4. 4Check the before and after table, then copy the result or download it as SRT or VTT.

Examples

Subtitles two and a half seconds late

Input
Shift by -2.5 s
Result
A line at 00:00:12,000 moves to 00:00:09,500

Every line moves by the same amount, so a constant offset is the right tool. Negative is earlier.

A PAL file against an NTSC copy

Input
Frame rate, timed for 25 fps, video runs at 23.976 fps
Result
Every timestamp multiplied by 1.042708

The correction grows through the film: nothing at the start, over two minutes by the ninetieth.

Neither frame rate known

Input
First line shows at 00:00:02,000 but belongs at 00:00:04,000; last shows at 01:12:00,000 but belongs at 01:12:06,000
Result
A stretch of 1.000926 and an offset of about +2 s

Two points define the line, so no frame rate has to be identified. Pick them far apart.

About the subtitle timing shifter

Why frame rate causes drift at all

A subtitle cue is fundamentally attached to a frame, and its position in time is that frame number divided by the frame rate. Play the same frames at a different rate and every timestamp moves, proportionally — which is why the error is invisible in the opening seconds and enormous by the closing credits.

The classic case is a film shot at 24 frames per second and broadcast in a 25 fps region. Rather than dropping or duplicating frames, the whole film is simply run 4.167 per cent faster: it finishes four per cent sooner, and its soundtrack is very nearly a semitone sharp, a difference musicians notice on films they know well. Subtitles timed against one version are progressively wrong against the other, and the fix is to multiply every timestamp by the ratio of the two rates.

The direction of that ratio is the classic mistake, and getting it upside down doubles the drift rather than removing it. A cue sits at N divided by the old rate and needs to sit at N divided by the new one, so the correct multiplier is the old rate over the new. Subtitles timed for 25 fps and played against 23.976 are stretched, not compressed.

Where 23.976 comes from

It looks like a rounding of 24 and is nothing of the kind. When colour was added to NTSC television, the colour subcarrier interfered audibly with the sound carrier at exactly 30 frames per second, and the fix chosen for compatibility with existing monochrome sets was to slow the frame rate by one part in a thousand, to 30000/1001. Film transferred into that system inherited the same factor, giving 24000/1001, or 23.976023 recurring.

The consequence is that 23.976 and 24 are genuinely different rates, a tenth of a per cent apart, and confusing them produces a drift of about four seconds over a two-hour film — small enough to be blamed on the subtitles being sloppy, large enough to be annoying by the end. This tool uses the exact rational values rather than the decimal approximations, so a conversion between the two is right rather than nearly right.

Two points beat a guess

The frame rate method needs you to identify two rates correctly. The sync point method needs neither, because two corrections define a straight line, and a straight line is exactly what a frame rate mismatch produces: the same stretch and offset that a rate conversion would compute, recovered from evidence you can read off the screen instead.

That makes it the more reliable of the two in practice, particularly for files that have already been retimed once by someone else and no longer correspond to any standard rate at all. The only discipline it requires is spacing the two points widely, for the reason set out in the FAQ above.

Frequently asked questions

How do I tell a constant offset from a drift?
Check a line near the start and a line near the end. If both are out by roughly the same amount, it is a constant offset and a single shift fixes it — the usual cause is a copy with a different amount of material in front of the feature, such as a distributor logo or a different title card. If the first line is nearly right and the last is wildly out, the error is proportional to elapsed time, which means the two copies run at different frame rates. No amount of shifting will fix the second kind, because a shift moves every line equally and the error does not.
Which frame rates should I choose?
The first is the rate the subtitles were timed against and the second is the rate your video runs at. If you only know one, look at the size of the drift: 25 against 23.976 accumulates about 4.3 per cent, which is roughly two and a half minutes over a two-hour film, and it is by far the most common pairing because it is what happens when a film is prepared for both PAL and NTSC regions. If the numbers do not fit, use the two sync points method instead, which needs no frame rate at all.
Why should the two sync points be far apart?
Because the stretch is worked out by dividing one time difference by another, and the arithmetic amplifies whatever error is in your readings. Two points ten seconds apart divide by ten, so misreading a timestamp by half a second throws the factor out by five per cent and ruins the rest of the file. The same half-second across an hour divides by 3,600 and is negligible. Take one point in the opening minute and one in the closing minute, and read both as precisely as the player lets you.
What happens to lines pushed before the start of the file?
A large negative shift can move early cues to a negative position, and a media timeline has no such thing. Two things happen and both are reported rather than done quietly: a cue that would start before zero has its start clamped to zero, keeping its end where the shift put it, and a cue that would have finished before zero is removed altogether. Dropping it is deliberate — clamping such a cue would leave a line of text flashing at every viewer the instant the video begins.
Can I convert between SRT and WebVTT here?
Yes — pick the download format regardless of what you put in. The two are close relatives and differ mainly in the punctuation before the milliseconds, a comma in SRT and a full stop in VTT, plus the WEBVTT header. One thing is lost in one direction: WebVTT cues can carry positioning settings such as line and alignment, and SubRip has nowhere to put them, so they are dropped by an SRT download. If the source file uses them, this page counts them and says so rather than letting them disappear unmentioned.