Skip to tool

Categories

Audio & MediaZero Server Uploads6 min read2026-09-18

Why Your Subtitles Drift, and the Arithmetic That Fixes It

Subtitles that drift progressively out of sync suffer from frame-rate mismatch rates rather than simple static offsets. Here is the arithmetic of two-point sync and framerate conversions.

Try The Interactive Tool Now

Subtitle Workbench

100% In-browser execution. Zero server uploads, instant results, free forever.

Open Workbench

Constant Time Shift vs. Progressive Drift

When video subtitles do not line up with the spoken dialogue, diagnosing the nature of the error is the necessary first step. Subtitle timing errors fall into two distinct mechanical categories:

  1. Constant Offset (Shift): Subtitles that are wrong by the exact same amount all the way through require a linear shift. If the first line is exactly 1,200 ms early and the final line is also 1,200 ms early, adding a uniform offset of +1.200 seconds across every cue resolves the error completely.
  2. Progressive Drift (Rate Error): Subtitles that start about right and get further out as the film runs are wrong by a rate, and no uniform shift can fix that. If you shift the file so the beginning matches the dialogue, the ending will drift noticeably out of sync. Conversely, adjusting the end throws off the beginning.

The Arithmetic of Common Frame-Rate Mismatches

The usual cause of progressive subtitle drift is a frame-rate mismatch between the video master used to time the original text track and the video release being played. Common standard production frame rates include 23.976, 24, 25, 29.97, and 30 fps.

When a subtitle file authored for a 25 fps PAL television broadcast is played against a 23.976 fps NTSC film transfer, the dialogue in the film runs slower than the subtitle cue timestamps. The timing ratio between the two standards is:

25 ÷ 23.976 ≈ 1.042709

Each second of video duration takes approximately 1.0427 seconds of elapsed playback on the 23.976 fps release. While a 4.27% difference appears modest in a five-second scene, the discrepancy compounds across feature-length content:

  • Over a 10-minute short: 600 s × 0.0427 ≈ 25.6 seconds of drift.
  • Over a two-hour film (7,200 seconds): 7,200 s × (1.042709 − 1) ≈ 307.5 seconds, which is about 5 minutes of cumulative drift.

By the second hour, subtitles appear several minutes ahead of the corresponding audio track.

The Fix: Two-Point Linear Synchronization

Rather than guessing unknown historical frame rates or intermediate conversions, the mathematically sound fix is two-point synchronization.

Two-point synchronization works by anchoring two known reference points: 1. First Line Reference: Note the true audio time when the first spoken subtitle line occurs (actual₁) versus where the file currently places it (file₁). 2. Last Line Reference: Note the true audio time when the final spoken line occurs (actual₂) versus its timestamp in the file (file₂).

From these two data points, we calculate a global scale factor (S) and a global initial offset (O):

S = (actual₂ − actual₁) ÷ (file₂ − file₁)

O = actual₁ − (S × file₁)

Every intermediate timestamp t across the entire subtitle file is then recalculated using a single linear transform:

adjusted = (S × t) + O

With just two recorded numbers, the entire subtitle track stretches and shifts proportionally, landing every spoken line in between on its exact dialogue mark.

Three Other Causes of Drift, and How to Tell Them Apart

Frame-rate mismatch is the most common cause of progressive drift, but it is not the only one, and the fix differs for each. The diagnostic question is how the error behaves over time.

Constant offset. Every line is late or early by the same amount, from the first to the last. The subtitle file was timed against a version of the video with different leading content — a distributor logo, a certification card, different titles. The fix is a single shift, not a scale.

Progressive drift. The error grows linearly. This is frame-rate mismatch, and it needs the two-point scale-and-offset correction described above. A useful check: if the error at the end is roughly 4.27% of the running time, the mismatch is 25 to 23.976.

Step drift. Timing is correct for a stretch, then jumps and is correct again at a new offset. The video has been edited — a scene cut for a broadcast version, or an advertisement break removed. No global transform fixes this; each segment needs its own offset.

Random error. Individual lines are wrong with no pattern. Usually a badly converted file, or one machine-translated with timings re-derived per line. This generally needs re-timing rather than correction.

Plotting error against timestamp for a handful of sampled lines distinguishes all four in under a minute, and doing that before applying any correction avoids the common outcome of applying a scale to a constant offset and making the file worse.

Why 23.976 Exists at All

The awkward number has a specific cause, and knowing it makes the arithmetic memorable.

Film is shot at 24 frames per second. When NTSC colour television was introduced in the United States in 1953, the colour subcarrier had to be interleaved with the existing black-and-white signal without producing visible interference on existing sets. The solution slowed the frame rate by a factor of exactly 1000/1001, giving 29.97 fps rather than 30, and correspondingly 23.976 rather than 24.

That factor is why the numbers never divide cleanly, and why the drift from a 25 to 23.976 mismatch is 4.27% rather than a round figure.

PAL speed-up is the other side of it. To show 24 fps film on 25 fps PAL television, the film is simply played 4% faster — the entire film, including its audio, which is why European broadcast versions of films run about four minutes shorter than their cinema release and why the pitch is noticeably higher unless corrected.

Subtitle files inherit whichever version they were timed against, which is why a file found online frequently matches a different release of the same film. The common mismatches, and their scale factors:

FromToFactor
2523.9761.0427
23.976250.9590
3029.971.001
2423.9761.001

The subtitle workbench applies the two-point scale and offset described here, and converts between frame rates directly. Since subtitle files are frequently distributed inside archives, the ZIP archive toolkit opens them without extracting to disk.

Frequently Asked Questions (FAQ)

Why does a simple timestamp offset fail to resolve subtitle drift?

A uniform time offset shifts every timestamp by an identical constant value. When drift is caused by a frame-rate mismatch, the error scales with elapsed playback time, requiring a proportional stretch factor rather than a static shift.

What frame rates are most susceptible to subtitle drift?

Mismatches typically occur between 23.976 fps (NTSC film standard), 24 fps (theatrical film), 25 fps (PAL broadcast), 29.97 fps (NTSC television broadcast), and 30 fps digital media.

How accurate is two-point synchronization?

Because playback speed differences between standard video formats are strictly linear, anchoring the true spoken time of the first and last lines aligns all intervening lines with millisecond precision.

How do I tell what kind of subtitle drift I have?

By how the error behaves over time. A constant error from first line to last means a simple offset, fixed with a shift. An error growing linearly means a frame-rate mismatch, fixed with a two-point scale and offset. An error that is correct, then jumps, then correct again means the video was edited and each segment needs its own offset. Random per-line error usually needs re-timing rather than correction.

Why is the video frame rate 23.976 instead of 24?

Because NTSC colour television, introduced in 1953, slowed the frame rate by a factor of exactly 1000/1001 so the colour subcarrier could be interleaved with the existing black-and-white signal without visible interference. That gave 29.97 fps instead of 30 and 23.976 instead of 24, and it is why these numbers never divide cleanly.

What is the scale factor between 25 fps and 23.976 fps subtitles?

Approximately 1.0427 when converting from 25 to 23.976, and approximately 0.9590 in the other direction. That is why a subtitle file with this mismatch drifts by roughly 4.27% of the running time, which works out to about 25.6 seconds over a ten-minute short and over five minutes across a two-hour film.

Related Guides & Solutions

Ready to use Subtitle Workbench?

Execute this workflow privately on your device right now without creating an account or paying for cloud API credits.