Skip to content

Media

Subtitle FPS Converter

Subtitle FPS Converter

Beta

Rescale every subtitle timestamp from one frame rate to another, such as 23.976 to 25, to fix captions that drift further out of sync the longer a video plays. Drop SRT or VTT files and download them retimed. Nothing is uploaded.

Use via API
  • Free, no sign-up
  • REST + MCP
  • Updated
  • Reviewed by Olgun Ozoktas

Factor 0.95904 · the track plays about 4.1% shorter

Drop .srt or .vtt files hereor click to browse — multiple files allowed
Works in your browser
•No uploads to servers

Common uses

Film subtitles against a PAL copy

A 23.976 subtitle file against a 25 fps release drifts further ahead every minute. Converting 23.976 to 25 brings the whole track back in step.

PAL subtitles against a film-rate copy

The same problem the other way round, where the subtitles fall further behind. Converting 25 to 23.976 is the reverse operation.

NTSC broadcast captions

29.97 and 23.976 material is frequently mixed in the same library, and captions moved between them drift in exactly the same way.

A whole season at once

Drop every episode's caption file together. Each is rescaled with the same factor and the set comes back as one ZIP.

Why do subtitles drift?

When a video is converted between frame rates — film at 23.976 frames per second broadcast at PAL's 25, say — every frame is played at a slightly different moment, and a subtitle file timed for the original runs at the wrong speed against the new copy. The error is not constant: it grows with elapsed time. A track that looks perfect in the opening minute can be a second out by the tenth and well over two minutes out by the end of a feature. Because the error grows, delaying the whole file by a fixed amount cannot fix it. Multiplying every timestamp by the ratio between the two frame rates can, and that is what this page does.

Subtitle FPS Converter rescales the timings in a SubRip (.srt) or WebVTT (.vtt) caption file from one frame rate to another, entirely in your browser. Every timestamp is multiplied by the source frame rate divided by the target: converting 23.976 to 25 gives a factor of 0.95904, so a cue at ten seconds moves to 9.590, and one at an hour moves to 57 minutes 32 seconds.

That growing gap is the signature of a frame-rate problem, and it is what separates this from a subtitle delay. A delay adds the same number of milliseconds to every cue, which is right when a track is uniformly early or late. When a video has been converted between frame rates the error is proportional to elapsed time instead, so no single delay can line up both the first scene and the last. Multiplying by the ratio corrects the whole file at once.

Files are read with the File API and rescaled in the tab, so nothing is uploaded and nothing is stored. Cue text, line breaks and WebVTT cue settings are copied through exactly as read — only the timestamps change. If several files need the same correction, drop them together and download the set as a ZIP. For a constant offset rather than drift, use the Subtitle Shifter; to join files that were exported in parts, use the Subtitle Merger.

How it compares

Subtitle Edit has done this for years and does it well, with the caveat that it is a Windows desktop install. So does Aegisub, and so does a short Python script if you are comfortable writing one. All three are reasonable answers when the machine is yours and the job comes up often.

The case for a page is the other situation: one file, someone else's laptop, no install. Frame-rate conversion is arithmetic on a text file, which is exactly the kind of work a browser can do without sending anything anywhere. This tool reads the file locally, multiplies the timestamps and hands the result straight back, which means it also works offline once the page has loaded.

It deliberately does not re-encode video, detect the frame rate of a video file for you, or guess which conversion you need. Reading the rate from your player takes a few seconds and is reliable; guessing it from a subtitle file is not.

Tips

  • If the subtitles start correct and drift further out as the video plays, frame rate is the cause and this is the right tool. If they are out by the same amount from the first line to the last, use the Subtitle Shifter instead.
  • The most common pair by far is 23.976 and 25, in one direction or the other. Try that first before hunting for exact rates.
  • 23.976 is really 24000/1001 and 29.97 is 30000/1001. The presets use the rounded decimals, which are accurate to well under a millisecond across a feature-length file.
  • The drift figure next to each file is how far its last cue moved. If it is close to zero, the two rates you picked are nearly the same and probably not the problem.
  • Frame rate and a constant offset can both be wrong at once. Fix the frame rate here first, then shift the result, because shifting first means re-doing it after the rescale.
  • The output keeps the format it came in as, so a .vtt stays a .vtt with its cue settings intact.

Frequently asked questions

How do I know frame rate is my problem?

Check the first subtitle and the last. If the first is roughly right and the last is badly out, the error is growing with time and frame rate is the cause. If both are out by the same amount, it is a constant offset and the Subtitle Shifter is the tool you want.

Which direction do I need?

Source is the frame rate the subtitles were timed for; Target is the frame rate of the video you are watching. If the subtitles run ahead of the speech and the gap grows, your source rate is lower than your target. Swapping the two and re-running takes a second if you guess wrong.

What is the factor shown under the rates?

Source divided by target — the number every timestamp is multiplied by. 23.976 to 25 gives 0.95904, so the track becomes about 4% shorter. Seeing it before you convert is a quick check that you picked the pair you meant.

Are my files uploaded?

No. They are read in your browser with the File API and rescaled in the tab. Nothing is sent to a server, and you can confirm that in your browser's network tab.

Can I use a frame rate that is not in the list?

Yes. Choose Custom on either dropdown and type the rate. Anything between 1 and 1000 is accepted.

Does it handle both SRT and VTT?

Yes, and the output keeps whichever format came in. WebVTT cue settings such as line and align positions are preserved.

Will this fix subtitles that are just a few seconds late?

No, and it would make them worse. A constant offset needs a constant correction, which is what the Subtitle Shifter applies. This tool changes the speed of the track, not its starting point.

What does the drift number next to each file mean?

How far that file's last cue moved. It is the largest change in the file, so it is a good sanity check: a drift of a couple of minutes across a feature is normal for 23.976 to 25, while a drift of a few milliseconds means the two rates you picked are almost identical.

Can I convert a whole season at once?

Yes. Drop every file together; they are all rescaled with the same factor and download as a single ZIP.

Does it change my subtitle text?

No. Only timestamps change. Cue text, line breaks and cue settings are copied exactly as read.

Rate This Tool

0/1000

Get Weekly Tools

Suggest a Tool