The subtitles are late. Everybody’s first move is the same: nudge them earlier until the line on screen matches the line being spoken, and carry on watching. Twenty minutes later they are wrong again, and by the end of the film they are a scene behind.
That is the moment to stop nudging, because the nudge was never the right tool. There are two faults here and they need opposite treatments.
The test, and do it before anything else
It takes thirty seconds and it decides everything that follows.
- Play the first line of dialogue in the film. Note how far out the subtitle is, and in which direction. Say the subtitle arrives two seconds early.
- Skip to the last line of dialogue, near the end. Measure again.
Same error at both ends — two seconds early at the start, two seconds early at the end — is a constant offset. Every cue is displaced by the same amount and one number fixes the whole file.
A bigger error at the end — two seconds early at the start, eleven seconds early at the end — is drift. The error is growing steadily, which means it is proportional to elapsed time, which means no single number can fix it.
Measure at the ends and not in the middle. Drift over a two-hour film that reaches eleven seconds is barely two seconds out at the twenty-minute mark, which is close enough to look like an offset and send you down the wrong path.
Offset: a different cut of the same film
A constant offset means the subtitles and the video are correctly timed relative to themselves and start at different moments. The usual causes are dull and all the same shape: an extra distributor logo at the front of one encode, a title sequence trimmed from another, a broadcast version with a recap, a release with a few seconds of black at the top.
The fix is to add or subtract the same number of milliseconds from every timestamp. The timing shifter does exactly that, and there are two details worth knowing.
The sign is the thing people get wrong. If the subtitle appears before the line is spoken, it needs to happen later, so the shift is positive. If it appears after, the shift is negative. Reversing it doubles the error, and the result looks so obviously wrong that most people assume the tool is broken rather than the sign.
A large negative shift will hit zero. Cues near the start of the file cannot go earlier than the beginning of the video, so they pile up at zero. A tool that clamps them silently is hiding the fact that your sign was reversed; one that counts them and tells you is handing you the diagnosis.
Drift: the frame rate is not the same
Drift is arithmetic, not sloppiness. Subtitles are timed against a particular running speed, and if the file they are played over runs at a different speed, the two diverge at a constant rate.
The numbers involved are a short list, and they exist for historical reasons that are no longer anybody’s fault. 24 is film. 25 is European broadcast, which is why a film shown on European television runs four per cent faster than in the cinema. 23.976 is 24 slowed by a factor of 1000/1001, a legacy of fitting colour into the American television signal, and it is what most film encodes are. 29.97 is the same trick applied to 30.
Subtitles ripped from a 25 fps broadcast master and played over a 23.976 fps encode are the classic case. The ratio is 25 ÷ 23.976 = 1.0427, so every timestamp needs multiplying by it. At the ten-minute mark that is 25 seconds of accumulated difference; at ninety minutes it is nearly four minutes.
The same tool rescales for this — you give it the rate the subtitles were timed against and the rate the video runs at, and it multiplies rather than adds.
The two faults can be present at once, and this is where people give up. A file can be both timed against the wrong frame rate and displaced by a title sequence. Rescale first, then re-run the two-point test, then shift by whatever is left. Doing it the other way round means the shift you measured is scaled along with everything else and stops being the number you measured.
Three things that look like sync problems and are not
A line that flashes and vanishes. If a cue appears at the right moment and is gone before you can read it, the timing is correct and the duration is not. That is a cue under about a second, which registers as a flash rather than as words, and it is fixed by holding the short cues longer rather than by moving anything.
Two subtitles flickering against each other. Overlapping cues, where one is still on screen when the next starts. The player alternates between them and the result reads as a sync fault. It is a collision, and it is fixed by pulling the earlier cue’s end back.
Everything correct for forty minutes, then nothing. This is a two-part video with a one-part subtitle file, or the reverse. The subtitles have not drifted; they have run out. Splitting the file at the point the first video ends, with the second half retimed to start from zero, is the fix — and the reason the second half has to be retimed is that the second video starts its own clock at zero too.
Check the format before you check the timing
One last ordering point, because it saves the most time. If no subtitles are appearing rather than appearing at the wrong moment, this is not a sync problem at all and no amount of shifting will help. A file that shows nothing is usually a format problem — a renamed file, a missing header, three invisible bytes — and those fail silently in a way that is easy to mistake for a timing so far out that nothing has come up yet.