AIStacker
MediaNew

Overview

Subtitle Timing Shifter & FPS Converter

Offset and re-scale SRT, ASS, or WebVTT subtitle timing. Combine a millisecond shift with an FPS conversion (23.976 ↔ 25 etc.) to re-sync subs to a different video source.

Category hub

Media

Problems

5

FAQ

3

Subtitle Timing Shifter

Offset and stretch SRT, ASS, or WebVTT subtitle timing. Combine a millisecond offset with an FPS conversion to re-sync subtitles to a different video frame rate.

Detected format: srt · Scale factor: 1.000000
Output appears here

What you can solve

My subtitles start on time but drift later and later — what's happening?

That is the signature of an FPS mismatch. A subtitle authored for 23.976 fps played against a 25 fps re-encode will get later by about 4 ms per second, which compounds visibly after a few minutes. Use the FPS conversion (23.976 → 25 preset) to rescale all timestamps. Do not use offset alone — offset will only fix the first cue.

Subtitles are exactly 1 second late through the whole video — how do I fix it?

A constant delay means a pure offset problem, not an FPS issue. Set Offset (ms) to -1000 and leave From/To FPS blank. Every cue moves earlier by one second, no rescaling. Negative values move earlier, positive values move later.

I have Blu-ray subtitles but a web 25 fps source — how do I match them?

Blu-ray is usually 23.976 fps. The web 25 fps source has been PAL-sped up. Apply the 23.976 → 25 FPS preset, then check the first dialogue line and add a small offset if it is a few hundred ms off. The combined pass handles both the speed change and the boot-up delay.

How do I convert NTSC 29.97 fps subtitles back to 23.976 fps film?

If you ripped a NTSC DVD and now have a 23.976 fps film master, apply From FPS 29.97 → To FPS 23.976 (preset available). Every timecode is multiplied by 0.7992, undoing the 2:3 pulldown timing the DVD added.

Does shifting break my ASS styling or my SRT cue numbers?

No. Only the time fields in each cue are rewritten. ASS styles, override tags, layer numbers, and SRT cue indices pass through untouched. The output stays in the same format as the input.

Typical workflow

ASS to SRT Subtitle ConverterSubtitle Timing Shifter & FPS Converter

Guides for this workflow

Supporting guides that connect this tool to the broader category workflow.

Open category hub

What is

What is Subtitle Timing Shifter & FPS Converter?

Subtitles drift for two reasons: the timecodes start at the wrong moment (offset), or they were authored against a different frame rate than your video file (FPS mismatch). One slips by a constant amount; the other drifts further as the video plays. This tool fixes both at once.

The offset shifts every cue by the same millisecond delta. The FPS converter multiplies every timestamp by a from/to ratio — so a 23.976 fps subtitle file targeted at a 25 fps source gets every timecode multiplied by 0.95904. Apply both together when you need to re-sync after a frame rate conversion, then download in the same format the file came in.

How to use

How to use Subtitle Timing Shifter & FPS Converter

1. Paste or upload your .srt, .ass, or .vtt file — the format is detected automatically.

2. Enter a millisecond offset (negative to make subs appear earlier).

3. If the video frame rate differs from the subtitle source, set From FPS / To FPS or pick a preset (23.976 → 25 etc.).

4. Copy or download the corrected file.

Example

Example

Offset −1500ms applied to:
00:00:05,000 --> 00:00:07,000 Hello

Results in:
00:00:03,500 --> 00:00:05,500 Hello

FPS conversion 23.976 → 25 multiplies every timestamp by 0.95904, so a 10-minute file ends ~24 seconds earlier.

Common use cases

Common use cases

1. Re-sync subtitles when the audio starts a few seconds late on a particular release.

2. Match a fansub authored against a 23.976 fps source to a 25 fps PAL transfer.

3. Convert NTSC-to-film telecine subtitles (29.97 → 23.976) when ripping a Blu-ray.

4. Combine offset and FPS shift in one pass to avoid double-rounding error.

Frequently asked questions

Frequently asked questions

How does the FPS conversion math work?v
Every timestamp is multiplied by (From FPS / To FPS). A 23.976 → 25 conversion multiplies by 0.95904, compressing the timeline. A 25 → 23.976 conversion multiplies by 1.04271, stretching it.
Can I apply offset and FPS conversion at the same time?v
Yes — they are applied in one pass. The output time is (input_ms × scale) + offset_ms. This avoids the compounding rounding error you would get from running two separate tools back-to-back.
What about negative timestamps after offsetting?v
Any cue that would land before 0 is clamped to 00:00:00. If you need cues before the original start, shift forward instead of backward, or pad the video itself.