Add multi-speaker dialogue as audio
Generate one conversation with a voice per alias, then attach it. Two solo reads stitched still sound like two monologues.
Generate one conversation with a voice per alias, then attach it. Add multi-speaker dialogue to a video is generate_multi_speaker_speech plus attach_audio_to_video. Multi-speaker dialogue is one speech generation, distinct voice per speaker alias, so a conversation is a single take instead of several stitched reads. Two monologues still sound like two monologues.
This is the audio cast. It is not lipsync per person, and it is not a native-audio T2V that invented two talkers.
One conversation file, not two monologues
Chaining generate_speech per role means you own the gaps, the overlaps, and the stitch. This call does not. The script carries aliases — Host, Guest — and the speakers list assigns a voice to each alias. One file comes back in line order.
Use it when two or more distinct voices are the point: podcast clip, scripted interview, two-character explainer, a panel. Use single-voice generate_speech when one narrator is the point. Gemini 3.1 Flash TTS is 4 credits and can do multi-speaker dialogue in its own family; Cartesia Sonic 3.5 is 5 credits for a stock single voice. Pick the tool that matches the cast, not the one you used last week.
Procedure:
- Write the conversation as it should be heard. Include overlap only if you want it. The model will not invent cross-talk you did not script.
- Attribute every line to an alias that also appears in
speakers. An unmatched name is an ambiguous assignment. - Assign a distinct voice per alias. Same voice twice is a radio play with one actor.
- Set language and
style_promptfor pacing, formality, energy — overall, not per line, unless the model you picked documents inline tags. estimate_coston a long conversation. Billing follows script length and speaker count.- Generate. Listen once without picture. If Host and Guest collapsed into one timbre, fix voices before you attach.
Do not generate each role as a solo read “to have more control.” Timing was the reason for one call.
Native-audio video rows that happen to contain two people talking are a different object: baked, uneditable, visemes included. Veo 3.1 at 40 credits will invent a two-shot and a chat if you prompt one. You cannot recast Guest. This page is for when the picture is already locked (B-roll, a silent two-shot, a slideshow) and the conversation is a bed you author.
Aliases have to match the speakers list
The failure mode is a typo. Host: in the script and host in speakers can be two people or an error, depending on how strict the call is. Make them identical. Do not add a third alias “Announcer” in line 40 if you did not cast it.
Casting:
- Stock voices from the catalog the tool exposes.
- Cloned voices you have the right to use. Consent is the gate. A scraped podcast guest is not a
voice_id. - Voice design as a prior step if you need invented timbres, then assign those ids to aliases. Design is casting. This generate is the conversation.
Language: one language for the file unless the tool you picked documents code-switching. A Host in English and a Guest in Spanish is a different brief; do not assume this call will mix.
Tone: a debate needs two energies. If style_prompt is global, write the difference into the lines (interruptions, short Guest answers) rather than hoping the model will act.
NY GBL § 396-b (in force 9 June 2026) covers synthetic performers that appear as a human not recognizable as an identifiable natural person, in ads, with actual knowledge, conspicuous disclosure. Audio-only ads are exempt; this attach-to-video path is not audio-only once it is on picture. A clone of an identifiable person is a publicity problem, not that statute. Get the release. Article 50 (2 August 2026) still wants a deployer label at first exposure when the picture would pass as real.
Attach the bed; lipsync is later
attach_audio_to_video: mode replace if the plate is silent or the original talk is wrong; mode mix if you are laying conversation under room tone you want to keep. A silent row plus this wav is replace. Native-audio two-shot plus this wav is usually replace — otherwise you have four people.
The wav starts at the beginning of the attach. It is not auto-spotted to a Guest’s mouth at 0:04 unless you built silence into the script. Write beats that match picture:
- 0–2s: Host hook while we see Host (or a title still).
- 2–8s: Guest proof while we see the pack.
If the picture is one B-roll bed, the conversation can float. If the picture is two faces, you will notice when Guest speaks over Host’s closed mouth. That is a spotting problem. Fix the script length, or cut picture to the voice with keep-ranges, or lipsync later.
Lipsync is a later step, not part of this generate. Pairing each speaker with on-screen visemes means a mouth pass per face, or a dub engine that retargets, or living with a VO over B-roll. Do not expect generate_multi_speaker_speech to animate anyone.
Duration: time the conversation out loud. A 40-second dialogue on a 12-second pack video overflows. Shorten the script or extend / assemble more picture. Do not 1.5× the video to fit two talkers; visemes and product verbs die.
Add voiceover to a video is the single-narrator sibling. If you only have Host, use that.
Caption a mix of two voices carefully
ASR on a two-voice mix will miss overlaps and mis-attribute. After attach:
- Add captions to a video in the spoken language. 165 codes, BASIC 1×, DYNAMIC 2×.
- Spot-check who is speaking. Speaker IDs in a caption track (
JORDAN:) are a transcript convention when the face is off screen. They are not a lower third. - If ASR collapses two voices, shorten overlaps or caption from a script you timed — that is closer to timed overlays plus honesty, or a cleaned transcript you burn.
- Place in safe area. Two-speaker captions get long. They will eat the pack.
Burned-in captions are still the mute object. A podcast clip without a burn is a voice in a muted feed.
Do not caption before attach. The silent plate has nothing to transcribe.
YouTube inauthentic-content buckets (Mashable, 21 July 2026) include synthetic personas presenting as human authorities on healthcare, finance, law, politics. Two generated voices giving medical advice on generated faces is that bucket. A branded pack conversation about a flavour is not. Know which you are making.
Generate the conversation in Versely as one multi-speaker file, then attach it. Do not stitch two solo reads and call it dialogue.
FAQ
Do I generate each voice separately?
No. One call, aliases in the script, voices in speakers, one file in line order.
How do I get this onto the video?
attach_audio_to_video, replace or mix, same as a single voiceover. Lipsync per speaker is a later job.
Can I lipsync both faces in this step?
No. This generate is audio. Picture pairing is attach, cut, or a mouth pass you run after you have a wav and a face.