Caption after lipsync, not before
A mouth pass rewrites timing. Burn captions last, on the lipsynced file, or the words will lead or trail the mouth.
Caption after lipsync, not before. A mouth pass changes when the words happen. Burned-in type locked to the old take will lead or trail the new mouth. Finish the lipsync. Then transcribe. Then burn. Do not caption a still-faced generate and hope the later mouth wears the same clock.
The mouth pass is a new timeline
Lipsync is not a filter on top of a caption track. It is a new performance. You give the model a picture or a clip and a piece of audio. It writes mouth shapes to that audio. Duration can shift. Phoneme timing can shift. A pause you had in the original take can compress. A breath can grow. The file that comes back is not the file you captioned.
Catalog rows that do this job, with credits as published — not dollars:
- Kling Lipsync — video-to-lipsync, 4K, 7 credits
- VEED Lipsync — video-to-lipsync, 4 credits
- Kling Avatar Pro — lipsync 4K, 58 credits, audio-to or image-to
- LTX 2.3 audio-to-video lipsync — mouth pass at 1080p, 20 credits
- VEED Fabric 1.0 — lipsync 720p, 40 credits
None of those rows returns captions. None of them promises to preserve a burn you already composited. If the input already had type in the pixels, the mouth pass will chew the lower third, warp the glyphs, or leave a correct-looking caption on the wrong syllable. Pixels in, pixels out, mouth rewritten. The caption was a picture of words. The picture moved.
Native-audio generates are a different first step. Veo 3.1 bakes speech into the take. If that line is the line you will ship, there is no later mouth pass — caption that file. If you will replace the line with a clone or a dub, you are in this page: new audio, new mouth, new caption. Do not burn the Veo mumble and then lipsync a better read under it.
Why a pre-burn goes late
Caption timing is alignment to the soundtrack you actually ship. ASR on the pre-lipsync file times to that mix. After lipsync the mix is different, even when the script is the same.
Typical misses:
- Offset. The new mouth starts a beat later. The whole track is early. First word is on screen while the lips are still closed. Mute autoplay presents a sentence nobody has started.
- Drift. The lipsync compressed a pause in the middle. Cues that were right at 0:02 are late at 0:08. Karaoke makes this obvious. A static block hides a 300-millisecond error that word-highlight will flash.
- Reordered phonemes. A retake inside the mouth pass lands a word on a different frame. The transcript is still true. The timestamps are not.
- Chewed type. The burn was in the input. The model treated letters as texture on a chin. You now have warped captions and a new mouth.
Word-highlight (Snap, Reveal; VEED DYNAMIC) needs word timestamps. Those stamps are only valid on the audio they were built from. Reusing a karaoke burn on a lipsynced take is how the accent walks through the sentence while the mouth is on the previous word. Static BASIC hides some of that. It does not hide an offset of a full cue.
CPS is not the issue here. A line can be finishable and still late. Fix alignment by recaptioning the new file, not by shortening holds on the old track.
If you captioned from a script you wrote, not from ASR, you still retime. Forced alignment is to the new waveform. A script is not a clock.
Burn last, on the file you will upload
Order is the whole craft.
- Lock the still or the picture take. A portrait you will throw away is not a lipsync input.
- Lock the audio. Script, clone, dub, the line you will honour. If the number in the line must match the PDP, fix it in the audio first.
- Run the mouth pass. Pick the row for the job: cheap video-to-lipsync at 4 or 7 credits when the picture already exists; Avatar Pro when the still has to become a 4K talker.
- Picture-lock the lipsynced file. Trim now. A later trim is a recaption.
- Transcribe this file. 165 language codes on
add_veed_captions. Code matches what was spoken, not what you wish was spoken. - Read names, SKUs, prices. ASR on a clone can still miss the brand string.
- Burn. BASIC 1× for ads and courses. DYNAMIC 2× only if the organic hook is a spoken phrase you can still finish. Preview on the lipsynced plate — the chin and the set are not the pre-pass plate.
The AI caption generator and add captions to a video should see the lipsynced MP4. Pointing them at the pre-pass generate is how you buy a beautiful transcript of a mouth that no longer exists.
Do not run captions and lipsync in parallel “to save time.” The caption job is cheap compared with a 58-credit Avatar Pro. Recaptioning is cheaper than a 2× DYNAMIC render of the wrong clock. Parallel is how both finish and neither matches.
Silent turbo rows (Kling 3 Turbo is silent on this catalog at 12 credits) have nothing to transcribe until you add a mouth or a VO. Caption after that audio exists. Transcribing silence is a spend on empty.
A dub is the same rule in another language. New audio, new mouth if you lipsync the dub, new caption burn. One English burn does not serve the Spanish mouth. That is a later page. The order is the same: mouth, then type.
What you can reuse
The transcript text, once cleaned, can be reused as a starting script. The timestamps cannot.
Keep the do-not-ship list: talent names, SKUs, prices. Paste it onto the new ASR draft. Do not paste the old .srt times onto the lipsynced file and call it alignment. SubRip has no mouth.
A sidecar for YouTube long-form can be exported after the burn pass on the lipsynced take. Convert with the VTT to SRT converter if you need the other extension. That sidecar is for a player. The Reel still needs pixels timed to this mouth.
If the lipsync is rejected and you regenerate the mouth, you are back at step 3. The caption burn from the rejected take is leftover. Delete it from the ship folder so nobody uploads it.
Caption after lipsync, not before. The mouth rewrites the clock. Burn last.
Burn the lipsynced file in Versely.
FAQ
Can I caption the generate and lipsync later if the script is identical?
No. Identical words are not identical times. The mouth pass will shift onsets. Burned-in type will not ripple. Caption the lipsynced file.
Does karaoke survive a mouth pass better than a static block?
Worse. Word-highlight exposes timestamp error. A static BASIC block can hide a small offset; Snap will not. Either way, recaption after lipsync.
What if the take already had burned captions in the input?
Do not lipsync that file. The model will treat type as chin texture. Use a clean picture, run the mouth pass, then burn captions as a finishing step.