TL;DR: A voiceover script and a video prompt are two artifacts that must agree: on length, on pacing, and on what's visible when each line lands. Budget the script's word count against the clip's duration, mark the beats where the visual should change, and write the prompt around those exact moments. Below: the workflow, per-vendor audio defaults, and 25+ copy-paste pairs.
One thing before any of this: Prompt Architects writes the script and the prompt; it doesn't generate the video or the audio. These are words to draft and paste into whichever model renders the clip.
Why Do a Script and a Video Prompt Have to Agree With Each Other?
Because they describe the same eight seconds from two different angles, and most workflows write them as if they don't. The common failure looks like this: a script gets written first, for how it reads on the page, then a video prompt gets written second, for how the shot should look, and the two are only ever checked against each other after generation, when the twelve-second voiceover is already sitting over an eight-second clip. Neither half is wrong on its own. They just were never budgeted against the same clock.
Treating them as one paired artifact instead of two sequential tasks fixes this before generation, not after. That means three things line up from the start: the word count fits the duration, specific moments in the script (beats) are marked, and the video prompt's visual description is written to match what's on screen at each of those moments, not one generic scene for the whole clip.
None of this is specific to any one model. It's true whether the finished voiceover comes from a text-to-speech tool, a hired voice actor, or the video model's own native audio, and it's true whether the clip is 5 seconds or 30. The pairing discipline is the same regardless of which vendor eventually renders the pixels or the waveform; only the exact syntax for handing a model dialogue or audio settings changes from one to the next, and that part is covered vendor-by-vendor elsewhere on this site rather than here.
How Do You Budget Word Count Against Clip Duration?
By converting seconds into a word count before writing a single line of script. A natural, conversational voiceover pace runs around 150 words per minute, or roughly 2.5 words per second; that's a widely used production and podcasting convention, not a number any single vendor publishes, so treat it as a starting budget rather than a guarantee. A faster, ad-style read pushes closer to 170-180 words per minute; a slow, deliberate delivery drops to 120-130.
| Clip duration | Word budget at a natural pace (~2.5 words/sec) |
|---|---|
| 5 seconds | 10-12 words |
| 8 seconds | 18-20 words |
| 15 seconds | 35-38 words |
| 30 seconds | 70-75 words |
Write to the low end of the range, not the high end. Every script needs a beat of silence somewhere, a breath, or a pause after a key line, and a script written to the exact word ceiling leaves no room for any of it. A script that comes in a little short is a minor edit; one that comes in long forces a cut under deadline, usually to the line that mattered most.
The pace itself isn't fixed, either, and the honest answer is that it depends on genre as much as on the speaker. A calm explainer runs slower than a hyped-up ad read; a line with a proper name, a number, or a technical term takes longer to say clearly than five common words of the same length, even though a word counter treats them identically. Time an actual read of the draft out loud once the word count looks right, rather than trusting the word-count math alone all the way to the final cut.
What Does It Actually Mean to Mark Beats in a Script?
A beat is the moment the script's content shifts enough that the visual on screen should shift with it: the line moves from naming a problem to naming a solution, or it introduces an object, a place, or a person that needs to be visible right then, not two seconds later or two seconds earlier. Marking beats means writing the timestamp for each of those moments directly into the script, before it goes anywhere near a video prompt.
A marked script for an 8-second clip might look like this:
[0:00-0:03] "Most teams lose an hour a day to status meetings."
[0:03-0:06] "What if that hour just... came back?"
[0:06-0:08] "That's the idea behind [PRODUCT]."
Each bracketed window becomes the window the video prompt has to fill with a matching visual, which is the entire point of marking beats in the first place: it turns "write a video prompt for this script" into "write three short shot descriptions, each locked to a specific window," which is a much easier and more precise task than describing one continuous eight-second scene and hoping the pacing works out.
How Do You Write the Visual to Match the Moment a Line Lands?
By describing what's on screen at each beat's timestamp, not by describing the scene once for the whole clip. Using the marked script above, the video prompt becomes three short, timestamped shot descriptions instead of one paragraph:
Shot 1 (0-3s): Overhead shot of a cluttered calendar filling with meeting blocks, muted color grade, slightly frantic pacing
Shot 2 (3-6s): Cut to a single calendar block dissolving into empty white space, light brightens, pacing slows
Shot 3 (6-8s): Product interface fades in cleanly over the empty calendar, calm and settled framing
This isn't a universal syntax; it's a structure, and several models document their own version of exactly this shape. Seedance's own documentation, for one, uses timestamped shot blocks as its worked example. The lesson to take is the structure, not the exact syntax: write the shot list in the same timestamped windows as the marked script, and the visual has somewhere specific to land instead of drifting across the whole clip. For the full, per-vendor breakdown of dialogue syntax, timing quirks, and what happens when a line runs longer than its shot, see AI Video Lip Sync and Dialogue: What Each Model Documents, which this post deliberately doesn't re-derive.
What Do You Do When a Line Runs Long or Short for Its Beat?
Fix the length problem first, and resist fixing it by speeding up the read. A line that runs long for its window has three honest options, in order of preference: cut words from the line itself, extend that beat's window and shorten a neighboring one to compensate, or extend the whole clip's duration if the platform and format allow it. Speeding up the delivery to force a long line into a short window is the option that sounds like a shortcut and reads as rushed and artificial in the finished clip, which defeats the purpose of writing a careful script in the first place.
A line that runs short for its window has the opposite, gentler problem: dead air, which is actually fine in small doses and a real defect in large ones. A half-second of silence after a punchy line reads as a deliberate beat, giving the line room to land; two full seconds of silence in the middle of an 8-second clip reads as a mistake. If a beat is running noticeably short, either add a short second clause to the line or shrink that beat's window and give the freed time to a neighboring beat that needs it more.
The order matters because it protects the script's actual meaning. Cutting a word here and there preserves what the line says while it gets shorter; speeding up the whole read preserves the words but damages how they land, which is the entire reason to write a careful script instead of a rough one.
Which Models Put Audio in the Clip by Default, and Which Don't?
This is the first thing to check before writing a single beat, because the vendors genuinely disagree, and the wrong assumption wastes an entire generation. Checked directly against each vendor's own current documentation:
| Feature | Kling 3.0 | Grok Imagine 1.5 | Runway Gen-4.5 | Luma Ray 3.2 |
|---|---|---|---|---|
| Audio in the clip by default | Off — settings.audio defaults to off, per Kling's own request-schema table | On — includes an audio track unless generate_audio=False is set | No audio parameter exists at all; the model is silent, full stop | Not documented — zero mentions of audio anywhere in Luma's own video-generation guide |
| Can the model generate spoken dialogue itself | Only via settings.audio=native, which matches ambient sound to the visuals, not a chosen voice | Yes, via a small set of preset voices referenced by index in the prompt | No | Not documented |
| Preset voice cap | Not a voice-selection feature in this endpoint | Max 3 voices per request, per xAI's own documentation | Not applicable — no audio parameter | Not documented |
Kling's default being off and Grok's default being on is the single most common source of a "why is there no sound" or "why is there sound I didn't ask for" surprise. Neither is a bug; they're documented, opposite defaults on two different vendors, and this table is exactly the kind of check worth doing before, not after, a generation. For the fuller picture on sound effects and ambience specifically, AI Video Sound Design and Veo Audio Prompts cover that ground in depth; this post stays focused on the script-and-prompt pairing problem.
When Should You Just Record the Voiceover Separately?
Most of the time, honestly. For anything beyond a quick native-audio test clip, the more reliable workflow is to record or synthesize the voiceover on its own, through a dedicated voice tool, and lay it under the video in an editor rather than asking a single generation to produce both at once. That separation buys three things a combined generation doesn't: independent retakes when one line reads wrong, real control over pacing and pauses, and a voiceover that doesn't get regenerated (and change) every time the visual needs a re-roll.
This isn't a limitation to apologize for. It's the same division of labor professional video production has always used: the voice track and the picture track are cut separately and married in post, because that's what gives an editor control over both. If a project specifically needs the video model's own generated voice (matching mouth movement to a line the model wrote, for instance), that's a real and valid use case, and HeyGen Prompts: 21 Avatar Video Script and Direction Templates covers a platform built specifically around a script-first, not prompt-first, avatar workflow. For most other work, plan on the editor doing the marrying.
Should You Write the Script or the Prompt First?
Neither, on its own, and writing one to completion before starting the other is exactly how the length mismatch happens in the first place. Draft both roughly at the same time, against a fixed clip duration decided before either one: a rough script with beats sketched in, a rough shot list timed to the same windows. Lock the duration and the beat timings first, since those are the constraints both halves have to fit inside, then tighten the script's exact wording and the prompt's visual language separately, checking the pair against each other one more time before generating anything.
Copy-Paste Script-and-Prompt Pairs
25+ pairs below, grouped by clip length. Each pair is a marked script plus a matching timestamped video prompt; brackets are yours to fill in. The word counts assume the ~150 words-per-minute pace from the table above; adjust the wording, not the timestamps, if your own read comes in faster or slower.
5-second clips (3 pairs)
[0:00-0:02] "[PRODUCT] does the thing you've been doing by hand."
[0:02-0:05] "In seconds, not hours."
Shot 1 (0-2s): Close-up on [SUBJECT/OBJECT] mid-task, slightly strained pacing
Shot 2 (2-5s): Quick cut to the same subject relaxed, task already done, calmer framing
[0:00-0:03] "[NUMBER] out of [NUMBER] [AUDIENCE] say this is the part they hate most."
[0:03-0:05] "Not anymore."
Shot 1 (0-3s): Wide shot establishing [SCENE], visible friction or frustration in body language
Shot 2 (3-5s): Cut to relief or resolution, brighter lighting, same location
[0:00-0:05] "[ONE-LINE HOOK NAMING THE PROBLEM DIRECTLY]"
Shot 1 (0-5s): Single continuous shot of [SUBJECT], slow push-in, muted color grade building tension across the full five seconds
8-second clips (4 pairs)
[0:00-0:03] "Most [AUDIENCE] lose [TIME/RESOURCE] to [PROBLEM]."
[0:03-0:06] "What if that just... came back?"
[0:06-0:08] "That's [PRODUCT]."
Shot 1 (0-3s): [SCENE showing the problem visually, cluttered or frantic framing]
Shot 2 (3-6s): [Transition shot, the clutter resolving or clearing, lighting brightening]
Shot 3 (6-8s): [Product or resolution reveal, calm settled framing]
[0:00-0:04] "You've tried [ALTERNATIVE]. It didn't stick."
[0:04-0:08] "Here's what actually does."
Shot 1 (0-4s): [SUBJECT] visibly unsatisfied with [ALTERNATIVE], flat lighting
Shot 2 (4-8s): Cut to [SUBJECT] engaged and satisfied with [PRODUCT], warmer directional light
[0:00-0:02] "Before."
[0:02-0:04] "[SPECIFIC PAIN POINT, ONE PHRASE]"
[0:04-0:06] "After."
[0:06-0:08] "[SPECIFIC RESULT, ONE PHRASE]"
Shot 1 (0-2s): [Establishing "before" state, static framing]
Shot 2 (2-4s): [Close-up detail reinforcing the pain point]
Shot 3 (4-6s): [Establishing "after" state, same framing as shot 1 for contrast]
Shot 4 (6-8s): [Close-up detail reinforcing the result]
[0:00-0:08] "[TWO-SENTENCE STORY BEAT: setup, then a single twist or payoff]"
Shot 1 (0-4s): [Setup framing matching the story's first sentence]
Shot 2 (4-8s): [Payoff framing matching the story's second sentence, visible shift in mood or lighting]
15-second clips, multi-beat (3 pairs)
[0:00-0:04] "[HOOK NAMING THE AUDIENCE AND PROBLEM]"
[0:04-0:09] "[HOW THE SOLUTION WORKS, ONE SENTENCE]"
[0:09-0:13] "[SPECIFIC PROOF POINT OR RESULT]"
[0:13-0:15] "[PRODUCT NAME / CALL TO ACTION]"
Shot 1 (0-4s): [Establishing shot naming the audience/context visually]
Shot 2 (4-9s): [Demonstration shot, the mechanism actually shown working]
Shot 3 (9-13s): [Proof shot: a result, a number, a visible before/after]
Shot 4 (13-15s): [Product or logo reveal, clean closing frame]
[0:00-0:05] "[SETTING UP A RELATABLE MOMENT]"
[0:05-0:10] "[THE MOMENT SOMETHING GOES WRONG OR COULD GO BETTER]"
[0:10-0:15] "[THE FIX, STATED PLAINLY]"
Shot 1 (0-5s): [Relatable everyday scene, natural lighting]
Shot 2 (5-10s): [Visible friction point, framing tightens or tenses]
Shot 3 (10-15s): [Resolution, framing relaxes, warmer light]
[0:00-0:06] "[TWO-BEAT PROBLEM SETUP]"
[0:06-0:12] "[SOLUTION INTRODUCED, WITH ONE CONCRETE DETAIL]"
[0:12-0:15] "[SHORT, DIRECT CLOSING LINE]"
Shot 1 (0-6s): [Problem-establishing sequence, two connected shots if needed]
Shot 2 (6-12s): [Solution demonstrated with the concrete detail visible on screen]
Shot 3 (12-15s): [Simple closing frame, no new information, just resolution]
General-purpose beat-marking templates (3)
[0:00-0:0X] "[LINE 1]"
[0:0X-0:0Y] "[LINE 2]"
[0:0Y-0:0Z] "[LINE 3, CLOSING]"
(Fill in X, Y, Z as running-total seconds; each line's word count should fit its window at ~2.5 words/sec)
Shot [N] ([START]-[END]s): [WHAT IS ON SCREEN AT THIS EXACT WINDOW, matching the script line timestamped to the same window]
[SCRIPT LINE], timestamped [START]-[END]s — [NOTE: pause/breath/emphasis if the line needs one, since this is where word-count padding should live]
When you're laying the voiceover in separately (2)
Silent clip, no dialogue or narration audio: [FULL VISUAL DESCRIPTION, SHOT-BY-SHOT], paced for a voiceover to be added in post rather than generated audio
[VOICEOVER SCRIPT, recorded or synthesized separately] — timed to a [DURATION]-second silent clip: [MATCHING SHOT-BY-SHOT VISUAL DESCRIPTION], no native audio requested from the video model
Stop rewriting prompts. Start shipping.
Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 4.8★ on the Chrome Web Store.
Create An Account