Subtitle timing tool
To fix subtitles that drift, rescale every timecode by source ÷ target frame rate — converting 23.976 → 25 fps multiplies each time by about 0.95904 so the file matches the new video. Both .srt and .vtt are supported, the timecode format is kept, and it all runs in your browser.
Last updated: 2026-06-11
Drop your subtitle file here, or click to browse
Supports .srt and .vtt
Common values: 23.976, 24, 25, 29.97, 30, 50, 59.94, 60. Multiply factor = 0.95904 (source ÷ target).
Drop in your .srt or .vtt file. The tool detects the format and counts the cues.
Choose the FPS the subtitles were made for and the FPS of your video — for example 23.976 → 25.
Every timecode is multiplied by source ÷ target. The preview shows old and new times side by side.
Save the rescaled file as name.25fps.srt (or your target) in the original format.
Set Source FPS to the frame rate the subtitles were authored for and Target FPS to your video. These are the values you will meet most often:
| FPS | Typical use |
|---|---|
| 23.976 | Film / Blu-ray (NTSC film, 24p) |
| 24 | Cinema, some Blu-ray and digital masters |
| 25 | PAL television, European DVD |
| 29.97 | NTSC broadcast and DVD video |
| 30 | Some web video and older NTSC content |
| 50 | PAL high-frame-rate, sports |
| 59.94 | NTSC high-frame-rate, sports |
| 60 | High-frame-rate web and game capture |
The classic mismatch is a film subtitle made for 23.976 fps played on a 25 fps PAL copy: the subtitles run slow and fall behind. Rescaling by 23.976 ÷ 25 brings them back in sync.
A frame-rate rescale multiplies every timecode, so the error it removes grows with elapsed time — exactly the drift a wrong frame rate causes. If your subtitles are instead off by the same amount from the first line to the last, the frame rate is fine and you only need a fixed offset. In that case use the subtitle timing shifter to move every cue by a set number of seconds.
Upload your .srt or .vtt file, set the Source FPS the subtitles were made for and the Target FPS of your video (for example 23.976 → 25), and apply. Every timecode is multiplied by source ÷ target, so the subtitles line up with the new frame rate. Download the rescaled file in the same format.
Subtitles authored for a 23.976 fps source play too slowly on a 25 fps copy, so they fall further behind with every minute. The error is proportional to elapsed time, which is why a single shift cannot fix it — the timings must be rescaled by the ratio of the two frame rates.
It multiplies every cue time by source FPS ÷ target FPS. Converting 23.976 to 25 fps uses a factor of about 0.95904, which makes the timecodes slightly earlier; converting 25 to 23.976 uses about 1.04270, making them slightly later.
23.976 and 24 fps are typical for film and Blu-ray, 25 fps for PAL television and European DVDs, 29.97 and 30 fps for NTSC, and 50, 59.94 and 60 fps for high-frame-rate and sports content. The tool lists all of these and also accepts a custom value.
Yes. The output stays in the format you uploaded — SubRip stays .srt with comma-millisecond timecodes, WebVTT keeps its WEBVTT header and dot-millisecond timecodes. Only the timecode numbers change.
If the gap is the same from start to finish, the frame rate is fine and you only need a fixed offset. Use the subtitle timing shifter to move every cue by a set number of seconds.
No. The rescale runs in your browser with JavaScript. There is no account, no server upload, and no per-character cost, so even files with thousands of cues convert instantly.