Subtitle Frame Rate Converter

A subtitle file has no frame rate — it has times. When the video those times were written against ran at a different rate from the one in front of you, every cue is wrong by an amount that grows as the file plays, and no single offset takes it out. Pick the two rates, say what happened to the picture, and this retimes the file with the exact NTSC and PAL math. SRT, WebVTT and ASS, and the file never leaves your machine.

Loading the frame rate converter…

Why the PAL speedup exists

Cinema shoots 24 frames a second. PAL television shows 25. The cheapest way to put one on the other — and the way it was done for fifty years — is simply to run the film one frame per second faster and leave every frame exactly where it is. No frames are added, none are dropped, and the transfer is frame for frame.

What changes is time. The picture plays 4.17% faster, which makes the running time 4% shorter. Those are not two different facts and they are not the same number: 25 ÷ 24 is 1.041667 and 24 ÷ 25 is 0.960000, the same conversion read from the two ends of a division. Almost every article on the subject prints one of them as both. An hour of film comes back 2 min 24 s short, and the audio rides up with it — 71 cents, about 0.71 of a semitone, which is why voices in old PAL transfers sound faintly wrong to anyone who knows the film.

A subtitle file made for one version is therefore wrong against the other from the first line onward, and increasingly wrong as it plays — 2 min 24 s by the end of an hour. It starts as a few frames — unnoticeable — and finishes with a caption for the line after the one being spoken. That is the conversion this page exists for, and it is the first option in the tool.

Why 23.976 is 24 × 1000 ÷ 1001

When NTSC added colour in 1953 it had to stay watchable on the black-and-white sets already in living rooms, so the colour information was squeezed into the signal alongside the existing picture and sound carriers. At the original 30 frames a second the new subcarrier beat audibly against the audio carrier. The fix was to slow the whole system by exactly one part in a thousand and one — 30 became 30000 ÷ 1001, and when film rates followed the same television plumbing, 24 became 24000 ÷ 1001.

So the ratio is exactly 1000 ÷ 1001 — as a decimal it is 0.999000999… and it never resolves, which is the whole reason the fraction is what gets carried around. Every NTSC rate on this page is its integer partner multiplied by it. It is not 23.98, and it is not "about 24". The labels are labels: this tool stores 24000 ÷ 1001 and 30000 ÷ 1001 and does the arithmetic on those, which is why the factor for 23.976 → 24 comes back as the rational 1000 ÷ 1001 rather than a fifteen-digit decimal.

The same fraction is what makes drop-frame timecode necessary, for the same reason and with different consequences — the timecode converter handles that side of it, and the frame calculator turns any of these rates into frame counts and back.

What the drift looks like

One part in a thousand sounds like nothing, and for the first minute it is nothing. The problem is that it accumulates. Below is a file timed for 24 fps played against 23.976 — the smallest mismatch in the whole table, and the one people dismiss as rounding.

AfterOut byIn frames at 23.976
1 minute0.06 s1
10 minutes0.60 s14
30 minutes1.80 s43
1 hour3.60 s86
2 hours7.20 s173

A cue meant to land on a cut is judged in frames, not seconds. One frame late is invisible. Fourteen frames — a little over half a second — is a caption that appears while the previous shot is still on screen. 86 frames is a caption for a line that has already been said, and that is where an unconverted file ends up after an hour.

That 3.6 seconds is the same figure an hour of non-drop timecode gains against the wall clock at an NTSC rate, which is not a coincidence — it is the same 1000 ÷ 1001 seen from two directions. It is worth knowing that the two are not interchangeable in the other direction: going from 23.976 up to 24 the hour delta is 3.6 s, three milliseconds short of 3.6, because the factor is 1000 ÷ 1001 rather than its reciprocal. The tool computes each direction rather than assuming they mirror.

Common conversions

Every figure here is produced by the same function the tool above calls, so the published table cannot drift from the calculator. Column headings sort.

ExactWhere it comes up
23.976 → 24× 0.9990011000 ÷ 10013.6 s shorterYesAn NTSC-finished master conformed back to true 24 for a DCP or a film-out.
24 → 23.976× 1.0010001001 ÷ 10003.6 s longerYes24 fps film slowed by 1000 ÷ 1001 for NTSC broadcast, Blu-ray and most streaming.
29.97 → 30× 0.9990011000 ÷ 10013.6 s shorterYesAn NTSC video master re-timed to true 30 for the web.
30 → 29.97× 1.0010001001 ÷ 10003.6 s longerYes30 fps camera or screen-capture footage slowed to NTSC video rate for broadcast.
24 → 25× 0.96000024 ÷ 252 min 24 s shorterNoThe PAL speedup: 24 fps film simply run at 25 for European broadcast and DVD.
25 → 24× 1.04166725 ÷ 242 min 30 s longerNoA PAL transfer taken back to film speed for a cinema or DCP master.
23.976 → 25× 0.959041960 ÷ 10012 min 27.5 s shorterNoAn NTSC-finished show re-transferred for PAL: the 1000 ÷ 1001 NTSC factor and the PAL speedup compounded into one.
25 → 23.976× 1.0427081001 ÷ 9602 min 33.8 s longerNoA PAL master conformed for NTSC territories and streaming.
59.94 → 60× 0.9990011000 ÷ 10013.6 s shorterYesNTSC-region sport or news re-timed to true 60 for the web.
60 → 59.94× 1.0010001001 ÷ 10003.6 s longerYes60p web or gaming capture slowed to the NTSC rate for broadcast delivery.

"Same frame grid" is whether the two rates count the same number of frames per second of timecode — 24 for both 23.976 and 24, 30 for both 29.97 and 30. Only those pairs can be re-read against a different grid without touching the picture, which is what the second option in the tool means and why it is refused everywhere else.

Telecine pairs such as 23.976 → 29.97 are deliberately not in this table. They belong to the third case below, where the running time does not change at all, and printing a speed-change factor beside them would publish exactly the wrong answer.

Which of the three happened to your file

The rates alone do not determine the answer. Two files can go from 23.976 to 29.97 and need opposite treatment, because what matters is what was done to the picture — and that is the question almost no other converter asks.

The video was sped up or slowed down

A PAL transfer, or any conversion where the running time changed. Every cue time is multiplied by the ratio of the two rates.

The video is fine; the subtitle times were counted at a wrong rate

The 23.976 ↔ 24 case. Only defined between rates that count the same number of frames per second of timecode — between 24 and 25 it has no meaning and is refused.

Frames were added or removed; the running time is the same

2:3 telecine, or plain frame duplication for the web. The cue times are already correct, so nothing changes — only the frame grid they snap to.

The refusal

"The timings were counted at a wrong rate" is only defined between rates that share a timecode base. Between 24 and 25 there is no such thing as re-reading the same frame numbers against a different grid, so the tool disables that option and says why instead of handing back the speed-change number under a different label. Any converter can multiply two numbers; telling you that the operation you picked does not apply to the rates you picked is the part worth having.

The one that changes nothing

2:3 telecine and plain frame duplication add or drop frames while the clock keeps running at the same speed. An hour is still an hour, so the cue times are already right and the correct output is the file you put in, with a factor of exactly 1. The tool says so and still offers the download, because a renumbered, correctly-encoded, frame-snapped copy is worth having. Handled as a speed change instead, 23.976 → 29.97 multiplies by 4 ÷ 5 and drags the last cue of an hour 11 min 60 s early.

When none of them fit

If the file is out by the same amount from the first line to the last, it is not a frame-rate problem at all — it is an offset, usually a different release with an extra logo or a trimmed recap on the front. Convert nothing and shift the whole file instead. And if it starts in sync and drifts but you do not know either rate, the same tool will fit it between two cues whose correct times you can read off the picture.

Frequently asked questions

How do I convert subtitles from 23.976 to 25 fps?

Load the file above, set the source to 23.976 and the target to 25, and choose the first option — the video was sped up. That is the PAL transfer, and every cue time is multiplied by 960 ÷ 1001. Download the result in the format it arrived in. Nothing is uploaded; the retiming happens in your browser.

Why do my subtitles slowly drift out of sync?

Because the file was authored against a different frame rate from the video you are watching, so the error is proportional to elapsed time rather than constant. At the 1000 ÷ 1001 ratio between 23.976 and 24 it is 3.60 seconds — about 86 frames — after an hour, which is invisible in the first scene and obvious in the last. A single offset cannot remove it; a ratio can.

Is 23.976 the same as 24 fps?

No, and the gap is not rounding. 23.976 is exactly 24000 ÷ 1001, or 24 slowed by the NTSC factor of 1000 ÷ 1001. A file timed for one and played against the other slips 3.60 seconds an hour. This tool uses the exact rate throughout, never the three-decimal label people say out loud.

What is the PAL speedup?

Running 24 fps film at 25 fps for PAL territories. The picture plays 4.17% faster, which makes the running time 4% shorter — the same conversion seen from the two ends of a division, and the two numbers most articles print as one. The audio goes up 71 cents with it, roughly 0.71 of a semitone rather than the full semitone often claimed. Subtitles made for either version run 2 min 24 s out by the end of an hour against the other.

Do subtitles need converting for 2:3 telecine, 23.976 to 29.97?

No, and this is the conversion most tools get wrong. Telecine adds frames rather than changing the speed, so an hour is still an hour and your cue times are already correct. Choose the third option — frames were added or removed — and the tool returns the file with a factor of exactly 1. Treating it as a speed change instead multiplies by 4 ÷ 5, which lands the last cue of an hour 11 min 60 s early.

What frame rate is my subtitle file?

It does not have one. SRT, WebVTT and ASS all store absolute times, not frame numbers, so the frame rate is a property of the video the file was written against — never of the file itself. That is why this tool asks for two rates: the one the timings were made for, and the one your video actually runs at.

Why does the tool refuse some conversions?

Because 'the timings were counted at the wrong rate' only means something between rates that count the same number of frames per second of timecode — 23.976 and 24, 29.97 and 30, 59.94 and 60. Between 24 and 25 the grids genuinely differ, so that option is disabled with the reason rather than quietly handed back the speed-change answer under a different name.

Is my subtitle file uploaded anywhere?

No. The file is read, parsed, retimed and written inside your browser tab. There is no upload, no server round trip and no account. Disconnect from the internet after the page loads and every part of this still works.