Subtitle sync problems usually fall into one of two patterns:
- Constant offset: every subtitle is early or late by roughly the same amount.
- Progressive drift: subtitles begin in sync but become increasingly early or late as the video continues.
These patterns have different causes and fixes. A global time shift can repair a constant offset in seconds, but it cannot correctly repair a frame-rate mismatch that grows throughout a two-hour video.
First, Identify the Drift Pattern
Check at least three points: near the beginning, in the middle, and near the end. Choose moments with a clear sound and visible action, such as a door closing, a hand clap, or the first word after silence.
Record the subtitle error at each point:
| Video position | Subtitle error | Interpretation |
|---|---|---|
| 00:02:00 | 2 seconds late | |
| 00:30:00 | 2 seconds late | Constant offset is likely |
| 01:00:00 | 2 seconds late |
Compare that with progressive drift:
| Video position | Subtitle error | Interpretation |
|---|---|---|
| 00:02:00 | In sync | |
| 00:30:00 | 1.5 seconds late | Timing scale or edit mismatch is likely |
| 01:00:00 | 3 seconds late |
Do not rely on one scene. A local cut, missing commercial, or damaged timestamp can create a single discontinuity that looks like a global problem.
Fix 1: Apply a Constant Offset
If every cue is two seconds late, subtract two seconds from every start and end timestamp. If every cue is early, add the required delay.
For SRT, a cue such as:
12
00:01:14,500 --> 00:01:17,100
The first result is ready.shifted two seconds earlier becomes:
12
00:01:12,500 --> 00:01:15,100
The first result is ready.Use a subtitle editor’s shift or synchronize command rather than changing hundreds of cues manually. Preview the beginning, middle, and end after the edit, and make sure no timestamp becomes negative.
Fix 2: Correct Progressive Drift
Progressive drift means the subtitle timeline and video timeline run at different rates. You need two reliable synchronization points: one near the beginning and one near the end.
If a subtitle event currently appears at time S1 but should appear at V1, and a later event appears at S2 but should appear at V2, transform every subtitle time S with:
corrected time = V1 + (S - S1) × (V2 - V1) / (S2 - S1)Most subtitle editors describe this as synchronization using two points, stretch, scale, or adjust duration. The formula changes both the offset and the timing rate.
Choose synchronization points with unmistakable speech. A vague sentence boundary can introduce several hundred milliseconds of error across the entire file.
Why Frame Rates Cause Subtitle Drift
Subtitles normally store clock time, not frame numbers, but frame-rate conversions can still introduce drift when timing was derived from frames or media duration changed during conversion.
A classic mismatch is content interpreted at approximately 23.976 frames per second and played or converted at 25 frames per second. The difference is small per second but large across a feature-length video.
Do not blindly apply a remembered conversion factor. Inspect the actual source, edited master, and player behavior. A project can contain speed changes, duplicated frames, or separate audio that make the simple ratio wrong.
VFR vs CFR: Variable and Constant Frame Rate
Constant frame rate (CFR) media uses a stable frame cadence. Variable frame rate (VFR) media changes the duration between frames. Phones, screen recorders, video calls, and streaming captures commonly produce VFR files.
VFR itself does not guarantee broken subtitles. Modern containers store timestamps that capable software can follow. Problems arise when an editor, converter, or script assumes a constant rate and rebuilds timing from frame counts.
If subtitle sync changes after editing or transcoding:
- Inspect whether the source is VFR and the output is CFR.
- Confirm that audio and video begin at the same presentation timestamp.
- Keep the time base consistent across extraction, editing, and export.
- Generate subtitles against the final delivery file, not an earlier camera original.
- Avoid tools that ignore container timestamps.
For long recordings, test the entire duration after any frame-rate conversion.
Other Common Causes
A different edit was used
The subtitle file may belong to a version with a longer intro, removed advertisement, censored scene, or different credits. A constant shift works only until the first edit difference. After that, cues may need to be split into sections and synchronized separately.
Leading silence was removed
Extracting audio with silence trimming can make a transcript start earlier than the video. Preserve the original media timeline or add the removed duration back to every cue.
Audio and video tracks have different start timestamps
Some containers start audio before video or include an encoder delay. A player may compensate correctly while a separate transcription pipeline starts counting from zero. Inspect track timestamps rather than assuming both begin together.
Rounded timestamps accumulated error
Repeated conversions between frames, milliseconds, and low-precision time formats can accumulate rounding differences. Keep high precision internally and round only at final export.
The player adds its own delay
Many players allow a temporary subtitle delay. Check whether a saved player setting is affecting one device before editing a correct subtitle file.
A Reliable Repair Workflow
- Make a copy of the original subtitle file.
- Confirm that the subtitle and video are the same edit.
- Disable any player-specific subtitle delay.
- Measure errors at the beginning, middle, and end.
- Apply a constant shift if the error is stable.
- Use two-point scaling if the error grows steadily.
- Split the timeline at edit discontinuities and repair each section separately.
- Validate at several scene changes and near the final cue.
- Export with the required timestamp syntax.
- Watch the final encoded delivery, not just the editing preview.
SRT and VTT Details to Preserve
SRT timestamps normally use a comma before milliseconds:
00:00:05,200 --> 00:00:08,400WebVTT uses a period and begins with a WEBVTT header:
WEBVTT
00:00:05.200 --> 00:00:08.400A timing repair should not accidentally remove cue settings, speaker markup, positioning, or the VTT header. Validate the file in the destination player after saving.
Our TXT vs SRT vs VTT guide explains when each format is appropriate.
Prevent Drift Before It Happens
- Transcribe the final edited media whenever possible.
- Keep the original source timestamps during audio extraction.
- Store timestamps in milliseconds or better internally.
- Record which media-file checksum or version produced each subtitle export.
- Avoid repeated frame-rate conversions.
- Test VFR phone and screen recordings early in the workflow.
- Preserve a known synchronization marker at the start and end of long productions.
- Preview subtitles on the actual publishing platform.
Frequently Asked Questions
Why are subtitles correct at the start but wrong at the end?
That is progressive drift. Common causes include timing-rate or frame-rate mismatches, an incorrect media duration, and conversion software that mishandles VFR timestamps. Use two-point synchronization, not only a global shift.
Can I fix subtitle sync by changing the FPS label?
Only when the underlying problem is truly a frame-rate interpretation mismatch. Changing metadata without retiming can make the problem worse. Measure two synchronization points and verify the actual media timing.
Should I correct SRT or regenerate it?
Repair a high-quality transcript when the words are correct and the timing error is systematic. Regenerate or realign when the subtitle belongs to a different edit, many local sections are broken, or the original pipeline discarded the source timeline.
How accurate must subtitle timing be?
There is no single threshold for every platform and audience, but speech and captions should feel synchronized and remain readable. Accessibility-focused work should follow the rules of the destination and include human review.
The fastest repair begins with diagnosis: constant offset, progressive drift, or an edit discontinuity. Once you know which pattern you have, use the matching transformation and validate the complete final file.


