Lip sync audio longer than the video: which duration to send
On Sume video-to-video lipsync, duration is the output's length: the shorter of clip and audio. Kling Lipsync is the exception and takes the clip's.

When the audio is longer than the clip, send the clip's length as duration; when the audio is shorter, send the audio's. On a Sume video lipsync row, duration is the length of the output, and the output stops at the shorter of clip and audio. Kling Lipsync is the one exception: its duration is the source clip's length, whatever the audio does.
Whole seconds only, and the number sets the price, so a wrong guess changes the bill.
Worked cases
Take the rule from the Sume repo docs for the lipsync rows added 2026-10-13: the field is required, it is a whole number, and for a video row it is the output's length.
| Clip | Audio | Model | Send duration |
|---|---|---|---|
| 12 s | 20 s | sync-lipsync-3 | 12 |
| 20 s | 8 s | sync-lipsync-3 | 8 |
| 20 s | 8 s | kling-lipsync (clip 2-10 s only) | the clip's length, 8 if the clip is 8 s |
| 30 s | 30 s | veed-lipsync | 30 |
| 1 s | 10 s | any video row | refused: minimum is 2 |
Why the field is required
Sume reserves the cost before the job runs, and the price of every lipsync row is a function of seconds. A default would charge the wrong amount, so the request fails instead of guessing. The range check also runs before any provider call: a value below 2, above the row's maximum, or not a whole number is refused with the row's limits in the message.
Most rows reach 60 s, so the check rarely bites. It does on InfiniteTalk Video (2-9 s), Kling Lipsync (2-10 s) and PixVerse Lipsync (2-30 s).
A mismatch is the most common reason a lipsync job is refused or costs more than expected, and it is cheap to prevent. Do the measurement in the same script that uploads the files, and log the number you sent next to the job id, so a bill that looks off can be traced to a length rather than guessed at. Credits for a job reserve at the length you send, so a value that is too large cannot be a harmless safety margin.
A pre-flight check
Measure both files before you send. If you do not know the audio's length, read it from the file; do not estimate. This small helper returns the value to put in the field:
def lipsync_duration(clip_s: float, audio_s: float, kling: bool = False) -> int:
seconds = clip_s if kling else min(clip_s, audio_s)
whole = int(seconds) # whole seconds only
if whole < 2:
raise ValueError("a lipsync clip must be at least 2 s")
return whole
print(lipsync_duration(12.4, 20.0))
print(lipsync_duration(20.0, 8.9))Trim or pad instead of cutting off
If you want every word of a long audio track lip-synced, the clip has to be as long as the audio. Extend the footage first, or split the audio into pieces that each fit one clip and run one job per piece. If you only want the opening seconds, the cut-off behavior does the trimming for you.
Which rows exist, and their limits, is in the eight video rows. The step and floor rules for two of them are in Kling and LatentSync billing.
Sources
Related posts
More in Media tools
- Pinterest video ratio floor 1:2: which Sume output sizes pass
Pinterest asks you to avoid video ratios beyond 1:2 and 1.91:1. 1080x1920, 1080x1350 and 1080x2160 all land inside; here is the arithmetic.
- Suno Studio clip stretching: fit AI music to a video on Sume
Suno Studio added clip stretching, downbeat detection and fade curves on Oct 8, 2026. Sume has none of them; it fits music by prompt, trim, fade and duck.
- VEED Subtitles styles on Sume: 9 dynamic bill twice
Sume's veed-subtitles row has 30 VEED caption styles: 9 dynamic ones bill twice, 21 basic ones bill once, and 6 take a second highlight color.
- Whistle needs 16 kHz mono audio: extract it from a video first
Whistle takes 16 kHz mono audio. Sume audio detach returns exactly that shape from a hosted video with sample_rate 16000 and channels mono.
Written by Sume