Subtitles gradually out of sync? The frame-rate mismatch (23.976 vs 24 vs 25 fps) that passes every spot check and fails the film
There is a specific kind of subtitle defect that survives every casual check and still gets a delivery rejected. The first scene is perfect. Ten minutes in, the cues feel a touch early, or a touch late, nothing you would flag. By the third act the text is landing seconds away from the line, and by the climax the film is unwatchable with subtitles on. Nothing is mistranslated. Nothing is mistimed, in the sense that no individual cue was authored wrong. The whole track is simply running at a slightly different speed than the picture.
That is frame-rate drift, and it is one of the most common reasons professionally produced subtitle files bounce at QC. It is also completely diagnosable, and completely preventable, if you know where it comes from.
Why film frame rates are a mess in the first place
Cinema runs at 24 frames per second. Almost nothing you deliver does.
When US color television arrived in the 1950s, the color signal had to fit between the existing audio and video carriers of the black-and-white system. The arithmetic only worked if the whole system slowed down by a factor of 1000/1001, which turned 30 fps into 29.97, and turned film transferred to that system into 23.976 fps instead of 24. Seventy years later the analog constraint is gone and the rate remains: the overwhelming majority of digital feature masters are 23.976.
Europe took the other path. PAL television runs at 25 fps, and the historical practice was not to convert film but to play it 4% fast: a 24 fps feature broadcast at 25 fps runs about four minutes short over a 96-minute runtime, with the audio pitched up to match. Any subtitle file authored against a PAL master inherits that 4% and is useless against the cinema master, and vice versa.
And true 24.000 exists too. Digital cinema packages and some digitally finished features run at exactly 24, not 23.976. The difference between the two is one part in a thousand, invisible to the eye and fatal to a subtitle track. The only safe assumption about a master's frame rate is that you have not measured it yet. We probe every master on intake, because we have received features that were exactly 24.000 where every convention said they would be 23.976.
Timecode is a frame counter, not a clock
The second ingredient in most drift cases is a misunderstanding about what timecode is.
A timecode like 01:23:45:12 looks like a clock reading plus frames. It is not. It is a frame count, formatted for humans: at 24 fps it means "frame number 120,612." How much wall-clock time that frame represents depends entirely on the frame rate you play it back at. At exactly 24 fps, timecode seconds and real seconds agree. At 23.976, every timecode "second" of 24 frames lasts 1.001 real seconds, so a spotting list written in timecode runs 0.1% slower than the numbers suggest, about 3.6 seconds of divergence per hour. That same 3.6 seconds is the reason drop-frame timecode exists for 29.97 broadcast material; for 23.976 there is no drop-frame variant, so the divergence is simply a fact of the format that every conversion has to account for.
This matters for subtitles because the professional interchange formats are split down the middle. SRT stores milliseconds: real clock time, frame-rate-agnostic. The broadcast formats that pro buyers actually ingest (EBU STL, defined in EBU Tech 3264, Screen PAC, SCC) store frames. Every conversion between the two halves requires the true frame rate as an input. Feed the converter the wrong rate, and every cue in the output is wrong by an amount proportional to its position in the film. That is the drift.
The failure math, and why spot checks miss it
Treat 23.976 fps content as if it were 24 and every converted timestamp lands early by a factor of 1000/1001. That is one second of drift for every seventeen minutes of runtime. At the top of the film the error is a few frames, well inside anything a human reviewer would accept in a spot check. By minute eighty it is nearly five seconds.
This is precisely why the defect ships. QC habits, human and automated, are front-loaded: you check the head of the file, a few scenes, the formatting, the character counts. A frame-rate mismatch is at its minimum at the head. The only place it is obvious is the one place nobody looks, the last reel. If you take one operational rule from this article: when you receive a subtitle delivery, scrub to the final dialogue scene first and check sync there. The head tells you nothing.
The 25 fps variants are more dramatic and therefore less dangerous. A PAL-timed file against a 23.976 master drifts about 2.5 seconds per minute; anyone watching notices within the first scene. The insidious mismatches are the small ones, 23.976 against 24, or a spotting list authored in timecode at one rate and converted naively at another, because those pass the first ten minutes with no visible symptom at all.
A real one: the rescue job
This summer we were asked to fix a rejected two-language subtitle delivery on an 89-minute, 23.976 fps feature. The client's QC note mentioned, among other things, cue-duration errors that made no sense against the files we could see. When we decoded the frame-based broadcast files the previous vendor had delivered and diffed them cue by cue against their own SRT masters, the signature was unmistakable: the deltas grew linearly from zero at the head to roughly five seconds at the end of the film. The vendor's SRTs were correctly timed (median offset 16 milliseconds against the master clock, flat across the runtime). Their conversion to the broadcast format had been run as if the 23.976 content were 24 fps, and every downstream symptom, including the confusing QC flags, traced back to that single wrong parameter.
The fix was not retiming a single cue. It was regenerating the broadcast files from the good SRT masters at the true frame rate, then proving it: cue-by-cue timecode comparison against the source, and sync verified against the screener's burnt-in timecode at the head, the middle, and the tail. The redelivery passed.
The diagnostic recipe generalizes, and it is worth giving away because it saves everyone a week of email. Plot the timing difference between the suspect track and a trusted reference across the whole film. A flat, constant offset means a start-point problem (wrong zero, a missing leader, an hour-based timecode start not subtracted). A linear, growing offset means a frame-rate mismatch, and the slope tells you exactly which two rates were confused. A sudden step partway through means a reel-boundary problem. Three shapes, three root causes, one plot.
How to fix subtitles that gradually go out of sync
Once the shape has told you the cause, the fix follows. A constant offset is a shift: move every cue by the same amount. Linear drift is a rescale: multiply every timestamp by the ratio of the two confused frame rates (24/23.976, 25/23.976, whichever pair the slope revealed), which is what a subtitle tool's "change frame rate" function actually does. What a rescale cannot fix is a file that was authored against the wrong cut of the film, so verify against picture after converting, at the head and the tail.
For a delivery, though, converting a drifted file is the second-best repair. If a correctly timed millisecond-based master exists, regenerate the frame-based formats from that master at the measured rate rather than rescaling the broken export: a conversion of a conversion accumulates rounding, and a regeneration from source accumulates nothing. That is what resolved the case above.
What to put in your delivery brief
Frame-rate drift is almost never a translation vendor's linguistic failure; it is a pipeline failure at a format boundary, and a distributor can spec it away in three lines. State the measured frame rate of the master (measured, not assumed: your post house can read it in seconds). Require that any frame-based subtitle format be generated at that rate, and that the vendor state the rate they used in the delivery notes. And require a sync check against picture at the head and the tail of the film, not just the head. The same intake discipline applies to the rest of the package: the forced narrative track and the platform spec constraints are cheaper to name in the brief than to discover at QC.
Common questions
Why do subtitles gradually go out of sync?
Progressive drift, in sync at the start and seconds off by the end, means the subtitle file and the video are running at different frame rates. The usual causes are a file authored against a 25 fps PAL master played against a 23.976 cinema master, or a frame-based export generated at 24 fps for 23.976 content. A constant offset or a sudden mid-film jump have different causes (start point and reel boundaries).
How do I fix subtitles that drift out of sync?
Rescale the timestamps by the ratio of the two confused frame rates, which is the "change frame rate" function in subtitle tools. For a professional delivery, regenerate the frame-based file from the millisecond-based master at the measured rate instead of rescaling a broken export, and verify sync against the picture at both the head and the tail.
What is the difference between 23.976 and 24 fps?
One part in a thousand: 23.976 is 24 divided by 1.001, a rate inherited from the US color television standard. The difference is invisible to the eye and accumulates to about 3.6 seconds per hour in timing, which is why confusing the two ruins a subtitle track while looking identical in a player's file info.
What frame rate should subtitles be?
The measured frame rate of the video master they will play against, which is not always what the label says: most digital feature masters are 23.976 fps, true 24.000 exists on digitally finished features and DCPs, and European broadcast masters run 25 fps. Millisecond-based formats like SRT carry no frame rate of their own; frame-based broadcast formats must be generated at the master's measured rate.
Fonti Studio runs every delivery this way as standard: the master's frame rate is probed on intake, never assumed; every frame-based export is generated from the millisecond-accurate master at the measured rate; and sync is verified against the picture across the full runtime before anything ships. If you are holding a delivery that goes progressively out of sync, or a QC report you cannot reconcile with the files in front of you, email us the brief. The diagnosis usually takes less time than the email thread about it.
Fonti Studio is a subtitle and dubbing studio run by post-production engineers, for film distributors and sales agents. €400 per language for feature subtitles, delivered in SRT and the frame-based broadcast formats your buyer ingests, at the measured frame rate of your master. Flat. EUR. Free preview before you pay.
Heading into a delivery window?
Send a film master, trailer, and CCSL or original-language SRT. We send back a free preview in your target languages and tell you up front whether the master will pass.
Email us a brief