TL;DR: Out-of-sync subtitles have three causes, and the fix depends on which one you have. If the gap stays the same from start to finish, shift every line by a fixed amount; if the subtitles drift further off the longer the video plays, it is a frame-rate mismatch and you have to stretch the timing, not shift it. The third case — right in some scenes, wrong in others — means the file was made for a different cut and has to be re-timed section by section.
Why are my subtitles out of sync?
"Out of sync" is not one problem — it is three, and they look different once you know what to watch for. Before you touch a single timestamp, play the video and note how the gap behaves over time. That one observation tells you which of these you have:
- Constant offset — the whole file starts a fixed number of seconds early or late. Every line is off by the same amount, from the first cue to the last.
- Frame-rate drift — the subtitles were made for one frame rate (for example 25 fps) but the video runs at another (for example 23.976 fps). The lines are close at the start and get further off the longer the video plays, because the error accumulates.
- A different cut — the subtitle came from a release with different intros, ads, or extended scenes. Some stretches line up, others do not, with no consistent pattern.
The single question that tells the three apart: does the gap stay the same, grow steadily, or jump around? A steady gap is a constant offset, a growing gap is frame-rate drift, and an inconsistent gap means a different cut. Diagnose first; the wrong fix for the wrong cause makes things worse.
Constant offset: shift every line
This is the easy one and by far the most common. The subtitles are readable and correctly ordered — they just appear a fixed amount too early or too late the whole way through. It usually happens when a subtitle file was made for a version of the video with a slightly different start point, or when a player adds a fixed delay.
The fix is a flat shift. Find one line you can verify against the audio — a clear spoken sentence works best — and measure how far off it is. If the subtitle appears two seconds before the words are spoken, every line is two seconds early; if it lags, it is late. Then shift the entire file by that amount.
For a constant offset, measure the gap on one known line and shift the whole file by that many seconds — add time if the subtitles are early, subtract if they are late. Because the offset is the same everywhere, fixing one line fixes all of them at once.
Frame-rate drift: stretch the timing, do not shift it
This is the case people fight the longest, because they keep trying to fix it with a shift and it never holds. The symptom: the subtitles are perfectly fine at the start, then slip further and further off toward the end. Shift them to fix the ending and the beginning breaks.
The cause is a frame-rate mismatch. An SRT file stores absolute timestamps — 00:06:00,000 means six minutes exactly. If the video's frame rate differs from the one the subtitles were built for, every one of those timestamps lands in the wrong place, and because the difference is proportional, the error grows the longer the video runs.
The math makes it concrete. A subtitle built for 25 fps played against a 23.976 fps video runs about 4 percent slow, which is roughly 15 seconds off by the six-minute mark and only gets worse from there. No single shift can absorb an error that keeps growing.
Frame-rate drift is fixed by rescaling the timings by the frame-rate ratio, not by a flat shift — you stretch or compress the whole timeline so every timestamp is multiplied, not just moved. Once the timeline is scaled to the video's actual frame rate, the drift disappears from start to finish.
A different cut: re-time by section
The hardest case, and the one no single number can fix. Some scenes line up, others do not, and there is no steady pattern to the errors — a stretch will be perfect, then a whole section is off, then it is fine again.
That happens because the subtitle was timed to a different edit of the video: a broadcast version with ad breaks, a theatrical cut versus an extended cut, an episode with the recap trimmed. Wherever the two versions diverge, the timing diverges with them, and it snaps back into alignment wherever they match again.
When some scenes line up and others do not, the subtitle was timed to a different cut, and the only fix is to re-anchor it scene by scene — there is no single-number correction. Find the matching line at the start of each mismatched section, align it, and work through the file block by block.
Fixing sync on a Mac
You can do all three of these locally on a Mac. GeekLink's built-in editor lets you shift a subtitle by a fixed amount, re-time lines, and preview each change against the video as it plays, so you can see whether a shift or a stretch is what the file actually needs before you commit to it.
But the most reliable fix for sync problems is not to inherit them in the first place. If you generate the subtitle from the exact video you will watch — by OCR of burned-in text, or Whisper speech recognition on that file — the timings are anchored to the real frames, so the subtitle never drifts. There is no foreign frame rate to reconcile and no different cut to fight, because the timing was measured against the very frames it will be shown over.
GeekLink runs entirely locally on your Mac: OCR for burned-in subtitles, Whisper speech recognition, AI translation into 40+ languages, and batch processing for a whole season at once — all without uploading anything. When a file you already have is out of sync, the editor re-times it; when you are starting from scratch, generating from the source file avoids the problem altogether.
FAQ
My subtitles are fine at the start but way off by the end — why?
That is frame-rate drift: the subtitle was built for one frame rate and the video runs at another, so the error accumulates as the video plays. A flat shift cannot fix it — you have to stretch the timing by the frame-rate ratio so every timestamp is rescaled, not just moved.
How much should I shift my subtitles?
Find one line you can hear clearly and measure how far the subtitle is from the spoken words. That gap is your shift amount. Apply it to the whole file — add time if the subtitles appear early, subtract if they lag. For a constant offset the same number fixes every line.
Why does frame rate change subtitle timing?
SRT files store absolute times, like six minutes exactly, rather than frame numbers. If the video runs at a different frame rate than the subtitles were made for, those absolute times no longer point at the right frames, and because the difference is proportional, the error grows the longer the video plays.
Why are my Whisper (auto-generated) subtitles out of sync?
Auto-generated subtitles are timed to the actual audio, so they should not drift. If they do, you most likely applied them to a re-encoded copy of the video at a different frame rate than the file they were generated from. Regenerate against the exact file you are watching, or rescale the timing to match its frame rate.
How do I avoid sync problems entirely?
Generate the subtitle from the exact file you will watch — OCR of burned-in text, or speech recognition on that video. Because the timings are then anchored to that file's own frames, there is no foreign frame rate or different cut to reconcile, and the subtitle stays in sync from start to finish.