Join voiceover takes into one gapless wav: timeline audio concat
Timeline audio concat joins up to 20 hosted audio parts sample-exact into one reusable wav for $0.01 per job and returns segment offsets.

Send operation: "concat" and up to 20 parts[] to POST /v1/timeline-1.0/audio and you get one gapless file back at $0.01 per job. The join is in the sample domain, with no re-synthesis and no silence at the seams (Timeline audio).
Request
Each part is {url, source_in?, duration?}. The second part below skips its first 0.1 s and keeps 1.8 s.
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: vo-concat-001" \
-d '{
"operation": "concat",
"parts": [
{"url": "https://media.sume.com/artifacts/artf_demo/line1.wav"},
{"url": "https://media.sume.com/artifacts/artf_demo/line2.wav", "source_in": 0.1, "duration": 1.8}
],
"output": {"format": "wav"}
}'What comes back
The result is kind: timeline_audio with one audio_url, duration_seconds and segments[] holding index, start and duration_seconds for each part. Use those offsets to re-base video[].start in your timeline.
Concat or audio.parts?
| Need | Use | Cost |
|---|---|---|
| Reusable merged file | timeline-audio concat | $0.01 per job |
| Join only inside one render | audio.parts[] on Timeline render | Included in the render |
| Slice one file into ranges | timeline-audio split | $0.01 per job |
Format notes
wav(pcm_s16le) is the default and sample-exact;mp3is smaller and adds priming padding at every edge, so keep wav if you will join again.- All parts must share a channel layout:
audio_parts_channel_mismatch. - The produced audio is at most 1800 s.
After the join
Pass the returned audio_url as audio.url on a Timeline 1.0 render, with audio.duration_seconds set to the returned duration_seconds. The same file also works as Avatar 1.0 image-to-video audio. If the render is the only place the voice is used, skip this job and send the takes as audio.parts[] instead.
Need the opposite? operation: "split" takes one top-level url and 1 to 20 ranges[], each {start, end?}, and returns a separate audio_url per segment. It is also $0.01 per job. If the source is a talking-head MP4, run audio detach once and split the audio it returns.
Sources
Related posts
More in Media tools
- Keyframe or exact trim for a TikTok ad: which keeps 516 kbps?
Sume video-trim exact re-encodes with libx264; keyframe copies the stream. You cannot set bitrate, so measure size / duration against TikTok's 516 kbps floor.
- Korean caption fonts: 29 Hangul faces and each style's default
Sume video captions list 29 Hangul fonts under the font field. See which face each style uses by default and what the API rejects.
- Korean captions on slam return 400: caption_hangul_text_latin_style
Sending Hangul text to slam, punch or tiktok-green returns 400. Sume refuses rather than burn tofu boxes. Use black-outline or a Hangul style.
- Korean captions on a small phone: clip-wipe or black-outline?
Sume lists six Hangul caption styles. The docs call black-outline the safe default and clip-wipe the clearest at small phone sizes. Fonts and the 400 rule.
Written by Sume