The Missing Step Between 'AI Generated the Video' and 'Here's the Deliverable': Introducing Conform
Generative video pipelines routinely hand you a silent picture track and a separately-produced audio track — a voiceover, a dub, a music bed rendered by a different tool entirely. Muxing them back together sounds trivial until the frame rates don't match or one track runs three seconds long. We added conform_from_url and conform_media so an agent can do this in one call instead of hand-rolling ffmpeg.
A pattern kept showing up across agent workflows we support: something produces a picture — a generative video model, a screen recording, a rendered animation — and something else, entirely separately, produces the audio for it. A text-to-speech voiceover. A dubbed translation. A licensed music bed. A narration recorded a day later once the edit locked.
Getting those two things back into one deliverable file sounds like the easy part. It usually isn't.
Where it breaks
Two failure modes account for almost every case we saw:
The frame rates don't match. The video renderer outputs 30fps; the delivery spec — or the audio tooling's internal assumptions — wants 24fps or 25fps. Nudge one without the other and you get a file that's technically valid and unwatchable: motion judders, or worse, the audio very slowly drifts out of sync over a long clip because nobody actually retimed anything, they just relabelled the container.
The lengths don't match. A translated voiceover almost never runs exactly as long as the language it was translated from. A separately-mixed music bed gets trimmed to a marketing deck's runtime, not the video's. Naively muxing two streams of different lengths in ffmpeg doesn't error — it just silently produces a file where one track stops early, which nobody notices until a client does.
Neither of these is exotic. They're the default state of two files produced by two different processes. What's missing isn't a rare capability — it's a boring, correct default for the common case.
What we added
conform_from_url and conform_media take a video source and an audio source and return one fresh-encoded file, with explicit control over both failure modes above:
And independently, options.duration_policy decides what happens when the two sources are simply different lengths: shortest trims to whichever stream is shorter (the honest default — no silent truncation you didn't ask for), or match_video silence-pads a short audio track so the picture is never the thing that gets cut.
Why this needed to be a real feature, not "just use ffmpeg"
Everything above is buildable with ffmpeg directly — that's exactly the point. The four methods here map onto specific, well-known ffmpeg filter chains (fps, minterpolate, setpts + atempo), and getting each one right — particularly the pulldown-style speed conform, where the timestamp retiming and the audio tempo change have to use the reciprocal ratios of each other or you get a file that's subtly, maddeningly out of sync by the last few seconds — is exactly the kind of task an agent should not be reinventing inline from scratch, on a deadline, from memory of ffmpeg flags. It's a small, sharp piece of infrastructure. So we built it once, correctly, and put it behind one MCP call.
How to run it
The pulldown case — a 24fps master that needs to conform to a 25fps delivery spec, audio included:
const { job_id } = await callTool("conform_from_url", {
video_url: "https://cdn.example.com/master-24fps.mov",
audio_url: "https://cdn.example.com/master-mix-24fps.wav",
output_format: "mov_prores",
options: {
method: "speed_conform",
target_framerate: 25
}
});
// Botverse detects the source is 24fps and retimes both streams by 24/25 —
// output runs ~4% shorter in wall-clock time, same frame count, audio
// pitch/pace shifted to match. Poll get_job_status, then get_download_url.
Or the more common case — a video and a separately-produced voiceover that's a few seconds longer than the picture, where you want the video's length to win:
const { job_id } = await callTool("conform_from_url", {
video_url: pictureUrl,
audio_url: voiceoverUrl,
output_format: "mp4",
options: { duration_policy: "match_video" }
});
Conform is also a first-class workflow step, so it composes with the rest of Botverse in one submitted job — transcode a raw render down, transcribe a separate narration track, then conform the two together, all wired up with depends_on in a single BWDL definition rather than three round trips from the agent.
Pricing follows the same shape as transcode: $0.30 for a job up to 5 minutes of source video, $0.08 per additional minute. Full reference, every option, and the frame-rate/duration-policy interaction table are at botverse.cloud/docs/services/conform.
Ready to connect your agent to Botverse? Set up in five minutes. No contracts, no minimums.
Ready to connect your agent to Botverse?
Set up in five minutes. No contracts, no minimums.
Get started