Annodex logo AnnodexNotes for people who make media
Captions and Subtitles

How to Fix Subtitles That Are Out of Sync With Video

Subtitles out of sync are one of the fastest ways to lose a viewer: the line appears a second before the speaker opens their mouth, or lingers after they have moved on, and the brain stops trusting the text.

A caption editor on a monitor showing a subtitle list beside an audio waveform and a paused interview video frame

Subtitles out of sync are one of the fastest ways to lose a viewer: the line appears a second before the speaker opens their mouth, or lingers after they have moved on, and the brain stops trusting the text. The good news is that almost every sync problem falls into one of three patterns, and each has a fix that takes minutes once you know which one you are looking at.

I run captioning for an archive that handles everything from old broadcast tapes to weekly video podcasts, and the files we receive drift in the same predictable ways. Before you start nudging lines one by one, spend two minutes diagnosing the problem. It will save you an hour.

Diagnose why your subtitles are out of sync

Open the video and the caption file side by side and check three moments: a line near the start, one near the middle, and one in the last minute. Write down how far off each one is. A stopwatch or the timecode readout in your player is accurate enough.

  • Constant offset: every line is late or early by roughly the same amount, say 1.5 seconds at the start and 1.5 seconds at the end. This is the most common case and the easiest to fix.
  • Progressive drift: the start is fine, the middle is off by a second, and the end is off by two or three. The gap grows steadily. This almost always means a frame rate mismatch.
  • Jump after a point: everything is perfect until 14 minutes in, then every line is 8 seconds late. Someone cut or added material in the edit after the captions were made.

Some files show a mix, such as a frame rate drift plus a constant offset. Fix them in that order: frame rate first, offset second, jumps last.

Fix a constant offset in one step

If every line is off by the same amount, you shift the whole file. In Subtitle Edit, which is free, open the file and use Synchronization, then Adjust all times, and enter the offset. A negative value moves captions earlier. In Aegisub, use the Shift Times dialog and apply it to all rows. Most editors, including DaVinci Resolve and Premiere Pro, let you select all caption clips on the subtitle track and drag or nudge them together.

The trick is measuring the offset precisely. Find a hard consonant at the start of a line, a word beginning with "p," "t" or "k," and look at the waveform. The spike is the true start of speech. If the caption begins at 00:02:10,300 and the spike sits at 00:02:11,800, your offset is plus 1.5 seconds. Measure two or three lines and average them, because single lines can be timed loosely on purpose.

A common source of constant offset is a slate, countdown or intro that was added or removed. A 5 second channel ident at the top of an upload will push every caption 5 seconds early if the file was made from the version without it.

Fix progressive drift caused by frame rate

Drift that grows over time is a math problem. Captions made against a 25 fps version of a video and played against a 23.976 fps version will slip by about 4 percent, which is around 2.6 seconds every minute of runtime. Captions made at 24 and played at 23.976 drift more slowly, about 3.6 seconds over an hour, which is why it often goes unnoticed in short clips and becomes obvious in a feature length interview.

The fix is to convert the timing rather than shift it. In Subtitle Edit, use Synchronization, then Change frame rate, and set the "from" and "to" values. If you do not know the original rate, try the usual suspects:

FromToDrift after 30 minutes
2523.976About 77 seconds late
2423.976About 1.8 seconds late
3029.97About 1.8 seconds late
23.97625About 74 seconds early

If your measured drift does not match any row, use two point sync instead. Pick a line near the start and a line near the end, tell the editor where each should sit, and it will stretch everything in between. Subtitle Edit calls this Point sync. It handles odd cases, like a video that was sped up slightly to fit a fixed broadcast running time.

Fix a jump after an edit

When captions are perfect until a certain point and then off by a fixed amount, the video was re edited. Find the first line that is wrong, select it and every line after it, and shift only that block. If the edit removed material, some captions now describe speech that no longer exists. Delete those lines rather than squeezing them in.

Videos with several edits need this done section by section, working from the top down. Shifting from the top matters, because each fix moves everything after it.

This is also where your file format starts to matter. Some formats store timing in frames rather than milliseconds, and those break more easily when a project changes speed. If you keep running into this, it is worth reading about choosing a caption file format that survives re uploads.

Why you should not trust auto sync tools blindly

The popular advice is to drop your file into an automatic alignment tool, YouTube's own auto sync included, and let it sort the timing. These tools are genuinely useful for getting a rough transcript onto a timeline. I do not use them as a final pass, for one reason: they align text to speech, and good captions are not timed to speech alone.

A well timed caption often appears a few frames before the words so the eye has time to land, holds through a short pause so it does not flash, and respects shot changes so a line does not straddle a cut. Automatic alignment ignores all of that. On a 20 minute interview, I typically find 30 to 50 lines that an auto tool placed technically correctly and practically badly, usually captions shorter than 1 second or lines that split across a cut. Those break the reading rhythm described in our guide to caption reading speed and line length.

Use auto sync to get close. Then watch the whole thing at normal speed and fix what feels wrong.

A final check before you publish

Play the first 60 seconds, a random 60 seconds in the middle, and the last 60 seconds with sound on. Then scrub through with sound off and watch only the caption timing against shot changes. If a speaker label is involved, confirm it appears with the right person, a common slip covered in our piece on labelling speakers in captions for a video podcast. Ten minutes of checking beats a comment section full of "subs are off."

Frequently asked questions

Why are my subtitles out of sync only on some devices?

Usually the platform is playing a different version of the video, such as a trimmed or re encoded copy, or the player is applying its own offset setting. Check whether the device or app has a subtitle delay option that someone changed. If one platform is consistently off, upload a version of the caption file timed to that platform's copy.

How do I sync subtitles in VLC without editing the file?

Press G or H during playback to move subtitles earlier or later in 50 millisecond steps. This changes playback only and does not save to the file. It is a quick way to measure the offset you need before fixing the file properly in an editor.

Can a frame rate change make subtitles drift over time?

Yes, and it is the most common cause of drift that grows as the video plays. Captions timed to 25 fps and played against 23.976 fps footage fall behind by roughly 2.6 seconds per minute. Converting the caption timing to the correct frame rate fixes it in one step.

PB
Philippa Brennagh

Philippa worked as a freelance subtitler for broadcasters and game studios. She writes about captions, transcripts and archives, and she believes good metadata is a form of kindness to your future self.

More posts by Philippa

More in Captions and Subtitles

01doorganico 084goad 3hot8 4465456 after5internprogram ahandfulofblessings ahmadpc ahomcybersecurity allodialresources antiquesandperiodcollectibles aotc asianworldkashmir beedlectrics bloggertemplatefree bluefeatheragency bodyweightsolution campaign08blog carfixadvisor catstreetcollective cbstvsports cnfanspurchasing committeeof500yearsofdignityandresistance covertopsdjs cs-kaiyuangame cuestacomunicaciontotal cxoutlet dancebetgame deskgearhub destinyvillastay detectmagazine di33 diamondsteelbuildings donmo dyanadropship emarsysfinance emimattl escapechan eskitarih evautoplay everythingweddings-orlando farmzone feedviewerapp foxstudiosscratch gamevui123 gleasongrade greetingsday hacklabasu haskell iw-kaiyun jagoanproperti jilidskripsi joltbusinessfinance juegodepokergratis juegospucca kaeru-festival latestmehndidesigns lestanzediottaviano litemagazines localcommunityhero lustrsazan mariashebets menswheels newwebstechs1 nikkit ootheday oxigenvpn plurfitness prefetial probudgetcarpetcleaning psychicmrsmartin pyaten qvantor rejoignezlogis rexzbot riselayouts ruchin rwxqsgd5 sakaltime shibiaowang shop-bot skrtips strcoding tetapatrium topselller uneplanteartificielle vipertechcr webtech1223411 wo-kygaming yamaha-mekar yeknava yoybuysheets zenunwa yamaha-mekar jilidskripsi ankertoto ankertoto ankertoto ankertoto