WhatBroke

AI-generated video lip sync drifts out of sync with the audio

AI video pipelines Last checked 2026-10-28

Lip sync in AI video pipelines is generated once against one audio file; any later change to that audio's length, timing or sample rate breaks the mouth-to-word alignment because the video was never re-synced.

What you saw

The first few seconds of a generated talking shot line up fine, then the mouth visibly falls behind or ahead of the words.

Sync is perfect on export from the video model and wrong after you drop the clip into your editor or swap in a revised voice track.

A clip that synced correctly at 24fps looks off after you convert, re-encode, or change the project frame rate.

Trimming a silence or a filler word from the audio shifts every line of dialogue after the cut out of sync for the rest of the clip.

What it actually means

Lip-sync video models (Veo's native audio, lip-sync-specific tools like those built on Wav2Lip-style pipelines, and avatar generators) bake mouth movement to one specific audio waveform at generation time. The sync is a property of that exact file, not of the words in it — change the file and the visual half of the sync does not know.

Re-encoding audio or video can silently change duration by a few milliseconds per minute through sample-rate conversion or variable frame-rate handling. That is invisible on a waveform but visible on a face, because human perception of audio-visual sync breaks down past roughly 80-120ms of offset.

Editing audio after lip sync was generated — tightening a pause, replacing a line, swapping a voice take — moves the words without moving the mouth, because the edit happened downstream of the step that created the match.

Frame rate mismatches between the source generation and your timeline compound over time: a clip generated for one rate and dropped onto a timeline at another rate drifts further out of sync the longer the shot runs, which is why short test clips look fine and full-length cuts do not.

The fix

  1. Lock the audio first, then generate lip sync against the final mix. Never generate a talking shot against a scratch or placeholder voice track — the lip sync is permanently tied to that file's exact timing.

  2. If the audio must change after sync was generated, regenerate the lip sync rather than trying to re-time the video. There is no reliable way to manually re-sync a baked lip-sync clip to new audio timing.

  3. Normalize frame rate and sample rate once, at the top of the pipeline, and never again downstream. Check both before assembly:

    ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate \
      -of default=noprint_wrappers=1:nokey=1 shot.mp4
    ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate \
      -of default=noprint_wrappers=1:nokey=1 shot.mp4
  4. Measure actual offset before guessing at a fix. Cross-correlate the audio track against a reference, or eyeball a clap/plosive frame against its waveform spike in your editor — do not assume the drift is constant across the clip.

  5. If the offset is a small, constant shift (not a drift that grows over time), a global audio delay in the editor can mask it. If the offset grows across the clip, that is a frame-rate or variable-rate problem, not an offset problem, and shifting audio will not fix it.

  6. For short-form cuts, bias toward the audio when forced to choose. Viewers tolerate a mouth a frame or two ahead of the words far better than it trailing behind them.

How to stop it happening again

Treat 'lock picture, lock sound' as a hard gate before any lip-sync generation step, the same way traditional post-production does — generate once, against the final audio, not the draft.

Standardize on one frame rate and one sample rate for the entire pipeline and assert it in a build check, the same way you would assert clip duration.

If a script line is likely to change, generate that shot last, after the line is truly final, rather than regenerating lip sync repeatedly as the script evolves.

Keep an automated sync check in your assembly step — even a rough cross-correlation flag that fires when offset exceeds ~80ms — so drift is caught before publish, not after a viewer comments on it.

Related questions

Why does sync look fine in preview but wrong in the final export?

Preview playback and final export can use different frame-rate handling or audio resampling. Always check sync on the actual exported file, not the editor's preview, before calling a shot finished.

Can I fix drifting lip sync by just nudging the audio track?

Only if the offset is constant across the whole clip. If the gap grows or shrinks as the clip plays, you have a frame-rate or variable-rate mismatch, and a fixed audio shift will fix one moment and break another.

Does this affect AI avatars the same way it affects generated video clips?

Yes — avatar and talking-head tools have the same constraint: the mouth movement is generated against one audio file, so any change to that file after generation requires regenerating the shot, not patching the video.

Other things that break

What Broke This Week

One email, most Thursdays. New symptoms, tool updates that quietly break things, and one fix worth stealing. Unsubscribe in one click.