How many words fit in a 30-second voiceover, and what it costs
A 30-second voiceover is about 75 words or 450 characters at a planning pace of 150 wpm. Sume TTS bills characters, so here is the length-to-cost table.

A 30-second voiceover is about 75 words if the narrator reads at 150 words per minute, a common planning pace and not a Sume guarantee. At roughly 6 characters per word including the space, that is about 450 characters, which Sume TTS prices at $0.0475 per 1,000 characters, so 3 cents after rounding up to a whole cent.
What does each length look like in words, characters and cents?
Spoken length depends on the voice, the language and the punctuation, so treat this table as a first draft of the script, not a promise. The cost column uses the Sume catalog rate of $0.0475 per 1,000 characters, a 1-cent minimum per job, and rounds each job up to a whole cent.
| Voiceover length | Words | Characters | Exact charge | Billed per job |
|---|---|---|---|---|
| 15 seconds | about 38 | 225 | $0.0107 | 2 cents |
| 30 seconds | 75 | 450 | $0.0214 | 3 cents |
| 60 seconds | 150 | 900 | $0.0428 | 5 cents |
| 90 seconds | 225 | 1,350 | $0.0641 | 7 cents |
| 2 minutes | 300 | 1,800 | $0.0855 | 9 cents |
Why count characters instead of words?
Words are a poor unit for the bill. The TTS request counts characters, and the OpenAPI text says spaces and punctuation count toward usage. A script full of short words costs less per word than one full of long words, and a Korean or Japanese script has far fewer spaces, so count the string you will actually send.
The same function works in any language because it only counts characters. Paste your script into it before you submit.
import math
def tts_cents(script: str) -> int:
# $0.0475 per 1,000 characters = 47.5 micro-dollars per character
# 10,000 micro-dollars per cent, 1-cent minimum, rounded up
return max(1, math.ceil(len(script) * 47.5 / 10_000))
print(tts_cents("x" * 450)) # 3
print(tts_cents("x" * 900)) # 5How do I measure the real pace of my voice?
Submit the first draft and ask for word timings with timestamps: { words: true }. The completed job returns monotonic words[] with start and end seconds, so the last word's end is your real narration length. Divide your character count by that length to get your own characters-per-second figure, then size the rest of the script with it.
If the take runs long, the generation_config.speed multiplier accepts 0.6 to 1.5. Cutting copy is usually better than speeding the voice up: a 10 percent cut is 45 characters on a 450-character script.
What is the ceiling for one request?
One request carries up to 20,000 characters, so a 30-second line never needs splitting. Long scripts are covered in the reel script length guide. The exact request fields are in the Sume OpenAPI document.
Sources
Related posts
More in Use cases
- iMessage app has no App Store preview: where the video goes
Apple's specification page says app previews are not available for iMessage apps. Keep the demo clip for your site and social, made with the Sume Format API.
- Instacart Immersive Feed: 9:16, 5 to 30 s, a recipe clip from a photo
Instacart's Immersive Feed takes 9:16 video of 5 to 30 seconds and is in early pilot. Prepare a recipe-style clip from a product photo with the Sume video API.
- Job opening video with an AI host: 16:9 and 9:16 versions
A 30-second hiring video with a Sume avatar costs $5.52 on Standard or $7.35 on Plus per aspect ratio. A 16:9 and a 9:16 cut on Plus is $14.70.
- Kids story, five 8-second scenes: Omni $5.00 vs H3 $3.00
Five 8-second scenes cost $5.00 on Gemini Omni Flash 1.1 at 720p, $3.00 on MiniMax H3 at 768p and $4.00 on H3 Max, priced on Sume. Plus a reference body.
Written by Sume