Voice Conversion API
POST /redub_vc
About this tool
`/redub_vc` applies voice-conversion models so speakers can sound like approved talent profiles while keeping on-screen video untouched. You still send JSON with `video_url`, a `script` map for timing or phoneme alignment (see docs), and `voice_id` pointing at a licensed conversion profile. FFmpeg pipelines merge the converted waveform asynchronously; your subscription key unlocks the queue, and public HTTPS URLs keep uploads out of the hot path entirely. That split keeps browser extensions thin yet still satisfies auditors who demand clear boundaries between client demos and privileged keys.
Machine-learning inference plus traditional muxing means runtime splits into two observability phases. Track them via `status_url` transitions to understand whether GPU slots or disk IO throttled progress. Legal teams should archive consent paperwork alongside `voice_id` choices because synthetic likeness rules vary wildly by jurisdiction; the API surfaces technical telemetry, yet cannot interpret talent agreements for you.
Unlike drag-and-drop toy sites, this endpoint expects integration discipline: correlation IDs, structured logging, and retries that respect idempotency guidelines. Ship golden JSON fixtures per environment so QA catches schema drift quickly. Pair with `/redub` when you need hybrid mixes; some productions run VC for lead lines and keep natural room tone under beds. Designers validate intelligibility subjectively since objective MOS scores rarely ship in API JSON.
Quality hinges on clean reference audio upstream. Feeding brittle conference recordings into VC yields metallic artifacts FFmpeg cannot fix magically. Normalize inputs, remove HVAC rumble externally, then call `/redub_vc`. Throughput aligns with tiers; bursts during trailer launches belong behind your own backoff-smart queue.
Because scripts may drive alignment models, escaping special characters matters; consult anchoring docs before dumping markdown into the textarea. FFmpeg outputs deterministic media bytes for identical payloads, simplifying regression tests. Product and legal reviewers should watermark preview renders fetched after polling, not because URLs are careless, but because VC outputs might resemble protected likenesses before approvals. Organizations sometimes mirror JSON requests into immutable audit trails showing which `voice_id` shipped each window.
Try it now
How it works
Prepare URLs and persona metadata
Host the source video anonymously over HTTPS. Draft the textual `script` payload and reference the allowable `voice_id` string from catalog exports.
Authenticate JSON POST `/redub_vc`
Include `X-API-Key`. The POST returns task scaffolding without binary bodies; everything streams from remote storage.
Observe async inference + FFmpeg
Poll tasks for stage-specific statuses so support teams know whether ML or muxing stalled.
Finalize audio QA
Download the mastered file, run listening tests, and optionally route through `/captions/auto` plus loudness tooling before release.
Frequently asked questions
How is voice conversion different from text-to-speech?
Voice conversion reshapes existing speech toward a target voice profile. TTS creates new speech from text. Pick the route that matches your source material.
What should I put in the script field?
Plain dialogue lines work for many setups. Some integrations use the script for alignment hints; see the API docs if you need phoneme-level control.
Why do jobs take longer at peak times?
Voice conversion runs inference before FFmpeg muxing. GPU pools can queue during busy periods; use exponential backoff on retries.
My output sounds metallic or robotic: why?
Noisy or compressed source audio limits conversion quality. Clean up room tone and use a strong recording before calling the API.
Do I need talent consent for synthetic voices?
Yes. You are responsible for rights and likeness rules in your jurisdiction. The API provides technical processing, not legal clearance.
How do I use the Voice Conversion API?
POST to /redub_vc with a JSON body containing video_url, script, voice_id and your X-API-Key header. The API returns a task_id; poll GET /task/{task_id} until status is "completed" to retrieve the download_url.
Via the REST API
curl -X POST https://droidapps.one/redub_vc \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '{
"video_url": "https://cdn.example.com/talent_take.mp4",
"script": "Line one…\nLine two…",
"voice_id": "vc_profile_alpha"
}'Via the MCP server (droidapps-ffmpeg)
const job = await mcp.callTool("submit_job", {
path: "/redub_vc",
body: {
video_url: "https://cdn.example.com/talent_take.mp4",
script: "Line one…
Line two…",
voice_id: "vc_profile_alpha"
}
})
// Returns: { task_id: "abc123", status: "queued" }
const result = await mcp.callTool("wait_for_task", {
task_id: job.task_id
})
// Returns: { status: "completed", download_url: "https://..." }