Sonex Labs

Why your 15-minute script comes out at 12 minutes: timing AI narration

Creators usually size a narration script by counting words or characters, then find that the AI voiceover finishes minutes early. One Hindi creator's script, written for 15 minutes, came out at 12:36. That gap is normal rather than a fault: a text-to-speech voice reads at its own pace, which changes more between voices than between languages, and a written count hides how numbers, abbreviations and Indian scripts turn into speech. The dependable fix is to time one paragraph in the exact voice and speed you will use, then scale up from it.

Timing AI narration: Why your 15-minute script comes out at 12 minutes: timing AI narration
Written by
Anmol Agarwal
Published
Last updated
Reading time
8 min read
On this page
  1. A 15-minute script that came out at 12:36
  2. Why character and word counts mislead
  3. Words and characters per minute by language
  4. The levers that change a voiceover's length
  5. Render one paragraph, measure, scale: a worked example
  6. How to put this into practice
  7. Sources

A 15-minute script that came out at 12:36

In October 2026 a creator who makes Hindi narrated anime and manhwa recaps described the problem on r/creators: narration that looked long enough on paper finished before the visuals. A script meant for 15 minutes came out at about 12:36 with text-to-speech, 84% of the planned length. Their own lessons were to generate a sample with the final voice and speed before estimating runtime, to split the script into scene-sized sections, and to fix the section that drifts rather than slowing the whole recording. Their open question was how to keep long voiceovers in sync without the delivery sounding unnaturally slow.

The usual cause is the planning number, not the voice. Many people size scripts at a human speaking pace, and Baruch College's Tools for Clear Speech programme, citing the National Center for Voice and Speech, puts the average English speaker at about 150 words a minute. Default TTS voices tend to read faster than that. In our own renders, the Indian English voice on our site read at about 176 words a minute.

That difference alone produces the creator's gap. A script sized for 150 words a minute, read at 176, runs at 150 ÷ 176, or 85%, of its planned length: about 12:47 for 15 minutes. That is an illustration with an English voice, not a diagnosis of their Hindi render, but it shows why the shortfall is predictable and why the same fix works in any language.

Why character and word counts mislead

A word or character count measures the text you write; a voiceover's length depends on the speech that text becomes. Three things pull those apart, and all three are worse in Hindi and Hinglish scripts than in plain English prose.

Numbers and abbreviations expand when spoken

Digits are short to write and long to say. Through the Sonex text-to-speech API, ₹1,49,900 is 9 characters in the script but is spoken as "one lakh forty nine thousand nine hundred rupees", 48 characters' worth of speech. A date written 31/12/2026 is 10 characters and becomes "thirty first December two thousand twenty six". Acronyms such as EMI or KYC are read letter by letter, so three characters become three syllables.

Billing follows the characters you send, so a script full of numbers is cheap per minute and long per character. It also means any characters-per-minute figure, including ours below, assumes text like the text it was measured on. Our test paragraphs wrote numbers out as words, so a script full of digits will run longer than the figure predicts. The sample below is 44 characters as written.

Devanagari counts vowel signs and conjuncts

Character counters and TTS billing count Unicode code points, not letters as a reader sees them. In Devanagari each vowel sign (matra) and each half-letter joiner (virama) is its own code point, so क्षेत्र, a two-syllable word, is 7 characters while घर is 2. Formal Hindi with many conjuncts therefore packs more characters into each second of speech than everyday Hindi does, and other scripts pack differently again: in our renders Malayalam came out at 1,103 characters a minute and Gujarati at 715.

So a characters-per-minute rule only transfers within one language, one register and one voice. Moving a Hindi rule of thumb to a Tamil or Marathi script, or from a casual vlog script to a formal documentary script, will put you off by more than you expect.

Words are different sizes in different languages

Word counts mislead across languages for a simpler reason: a word is not the same amount of speech everywhere. Hindi writes postpositions such as में, को and से as separate words, so it has many short words, about 4.6 characters each in our test paragraphs. Tamil and Malayalam join suffixes onto the word, averaging about 8 characters a word. The same pace of speech therefore shows up as about 206 words a minute in Hindi and 107 in Tamil.

This is why "how long is a 1,000-word voiceover" has no single answer. At a human 150 words a minute it is about 6 minutes 40 seconds. With the Indian English voice on our site it came to about 5 minutes 41 seconds, and 1,000 Hindi words with the voice on our Hindi page to about 4 minutes 51 seconds.

44 characters as written; the price alone is spoken as eight English words

इस फ़ोन की कीमत ₹1,49,900 है, लगभग डेढ़ लाख।

Words and characters per minute by language

The figures below come from paragraphs we rendered through Pāṇini, our text-to-speech engine, on 24 October 2026: three or four everyday spoken-style paragraphs per language, one voice per language (the one its language page uses), at the default speed of 1.0. Characters per minute are measured from the audio files. Words per minute are our arithmetic from the same renders, splitting words at spaces, so treat them as estimates: the sample is small and a different voice can move them by 20%.

Two cautions apply. These are rates for one synthetic voice each, not for how fast people speak a language, and we found no reliable published words-per-minute figure for human Hindi narration to set beside them. For English, the human benchmark of about 150 words a minute is the useful comparison.

Pāṇini TTS, speed 1.0, voice from each language's page, rendered 24 October 2026. Words per minute: space-split words over the same audio (estimate). Durations include natural pauses and about 0.4 s of lead-in and tail per file.
Language (voice)Words per minute (estimate)Characters per minute (measured)
Hindi (Priya)206937
Hinglish, romanised (Shruti)2301,203
Urdu script (Alok, a Hindi voice)210927
Punjabi, Gurmukhi (Veer)183910
English, India (Diya)176922
Spanish (Sofia)171925
Bengali (Nupur)149880
Kannada (Mitaali)138968
Gujarati (Kinjal)135715
Malayalam (Vani)1321,103
Marathi (Rujuta)121747
Telugu (Ananya)120875
Tamil (Kavya)107849

The levers that change a voiceover's length

Once you know your voice's real rate, you have five ways to land on a target length. They are listed roughly in order of how much they move the result.

The voice

The voice changes length more than the language does. When we rendered the same Hindi text with the voice from our Hinglish page instead of the Hindi one, it ran at 1,151 characters a minute instead of 948, about 21% faster. Pick the voice first, then size the script, because switching voices later can undo all your timing.

The speed setting

Pāṇini's API accepts a speed from 0.5 to 2.0, and the dashboard has the same control as a slider. Characters per minute scale roughly with it, though pauses do not shrink or stretch in exact proportion. Small changes are safe; large ones are what the r/creators poster was worried about, because slowed-down speech starts to sound dragged. Test a paragraph before applying a speed below about 0.9 to a whole script.

Text: add or cut, rather than slow down

Adding or trimming text keeps delivery natural, so it is the first fix for a script that runs short. Writing numbers as the words you want spoken also makes your count honest, because the script then shows how long it really is.

Sentences, punctuation and paragraph breaks

Our measured rates include the natural pauses between sentences, so the same words split into more, shorter sentences generally run a little longer. Each separately rendered file also carries a short lead-in and tail, about 0.4 seconds on average in our tests, so a script rendered as 40 scene clips runs a few seconds longer in total than the same text rendered as one file.

Silence in the edit

For scene sync, add pauses in your editor between scenes and after key lines instead of slowing the voice. That is the creator's own advice, and it keeps every spoken line at a natural pace.

Devanagari, 123 characters, the Hindi page voice

बचपन में हर गर्मी की छुट्टी हम नानी के घर जाते थे। गाँव छोटा सा था, बिजली आती-जाती रहती थी, पर किसी को फ़र्क नहीं पड़ता था।

The same 123 characters in the Hinglish page voice, which reads faster

बचपन में हर गर्मी की छुट्टी हम नानी के घर जाते थे। गाँव छोटा सा था, बिजली आती-जाती रहती थी, पर किसी को फ़र्क नहीं पड़ता था।

The same lines typed in Roman letters: 143 characters for the same speech

Bachpan mein har garmi ki chhutti hum Nani ke ghar jaate the. Gaon chhota sa tha, bijli aati-jaati rehti thi, par kisi ko farak nahi padta tha.

Render one paragraph, measure, scale: a worked example

The method needs one paragraph of your real script, the voice and speed you will publish with, and a calculator. Here it is with numbers from our own test: a 423-character Hindi story paragraph, read by the voice on our Hindi page at speed 1.0, came out at 26.9 seconds. That is 423 ÷ 26.9 × 60, or about 943 characters a minute, and about 201 words a minute for its 90 words.

To fill 15 minutes (900 seconds) at that rate you need 423 × 900 ÷ 26.9, or about 14,150 characters. Suppose your finished script is 11,900 characters: it will run about 11,900 × 26.9 ÷ 423 = 757 seconds, or 12:37, very close to the r/creators result. You can close the gap by writing about 2,250 more characters, by adding about 2 minutes 23 seconds of pauses and music in the edit, or, least naturally, by setting the speed to about 0.84, since 757 ÷ 900 is 0.84.

For a long video, do the same per scene rather than once for the whole script. Render each scene separately, compare its length with the scene's time on screen, and fix only the scenes that drift. Creators dubbing to subtitles have asked for exactly this kind of timestamp-matched generation (r/StableDiffusion). The script below reads an SRT subtitle file and flags any line whose text will probably run longer than its slot, before you spend characters rendering it.

With our Hindi page voice, the 10,000 free characters described in what 10,000 free characters buy in Hindi come to about 10.7 minutes of audio, which is plenty for timing tests. Ready-made scripts with word counts are in our Hindi voice-over script library, and you can render a test paragraph on the Hindi text to speech page.

import re
import sys

# Characters per minute of finished audio for YOUR voice and speed.
# Render one paragraph, then: len(text) / seconds * 60.
# 937 is Hindi with the voice on the Sonex Labs Hindi page at speed 1.0 (24 October 2026).
CHARS_PER_MINUTE = 937


def to_seconds(stamp: str) -> float:
    hours, minutes, secs = stamp.strip().split()[0].replace(",", ".").split(":")
    return int(hours) * 3600 + int(minutes) * 60 + float(secs)


with open(sys.argv[1], encoding="utf-8-sig") as f:
    blocks = re.split(r"\n\s*\n", f.read().strip())

for block in blocks:
    lines = block.splitlines()
    if len(lines) < 3 or "-->" not in lines[1]:
        continue
    start, end = (to_seconds(part) for part in lines[1].split("-->"))
    text = " ".join(lines[2:])
    slot = end - start
    speech = len(text) / CHARS_PER_MINUTE * 60
    note = "TOO LONG: trim text or raise speed" if speech > slot else ""
    print(f"{lines[0]:>5}  slot {slot:5.1f}s  speech about {speech:5.1f}s  {note}")
Run it as python check_srt.py episode.srt. It estimates each subtitle's speech length from its character count and flags lines that will not fit. Write numbers as words first, or the estimate will run short.

How to put this into practice

  1. Choose the voice and speed first

    Length depends on the voice more than on the language, so settle both before you size the script. Changing either later means re-timing everything.

  2. Render one real paragraph

    Pick a paragraph of 300 to 500 characters that is typical of your script, numbers written the way you want them spoken. Render it with the final settings and note its length in seconds.

  3. Work out your own rate

    Divide the paragraph's characters by its seconds and multiply by 60. That is your characters per minute; a whole script will run about its character count divided by that number.

  4. Fix the gap with text and pauses first

    If the estimate is short, add text or plan pauses between scenes. Use the speed setting only for small corrections, and listen before applying it to the whole script.

  5. Check long videos scene by scene

    Render each scene separately, compare it with the scene's time on screen, and fix only the scenes that drift. For subtitles, check every line against its SRT slot before rendering.

Sources

  1. Reddit r/creators: Hindi story voiceovers, character count alone doesn't keep narration in sync, 3 Oct 2026Secondary
  2. Reddit r/StableDiffusion: Indian male accent cloning and SRT-timed generation, 22 Aug 2025Secondary
  3. Tools for Clear Speech, Baruch College (CUNY): Speaking rate (about 150 words a minute, citing the National Center for Voice and Speech)Secondary

Questions about your calling setup?

Tell us what you call about, where and in which languages.