How to calculate speech rate in words per minute
Speech rate is words spoken divided by speaking time in minutes. Word timestamps from speech-to-text measure both, per recording or per sentence.

To calculate speech rate, count the words spoken and divide by the speaking time in minutes: 390 words in 2 minutes 30 seconds is 390 ÷ 2.5 = 156 words per minute (WPM). Word timestamps give you both numbers: transcribe the recording, count the word tokens, and time the span from the first word's start to the last word's end. Sume STT 1.0 always returns word timings: a words[] array with each word's start and end in seconds.
The formula is plain arithmetic. The timing fields come from the OpenAPI document behind the Sume API reference, which the API reference docs page names as the source for exact request and response shapes, read on 2026-09-27.
Which time should I divide by?
That depends on whether pauses count. Pick one definition, say which one you used, and apply it to every recording you compare:
| Rate | Divide the word count by | Pauses |
|---|---|---|
| Overall rate | The file's full duration | Counted, with any silence before the first word and after the last |
| Speaking rate | The first word's start to the last word's end | Pauses between words counted |
| Articulation rate | The speaking span minus pauses longer than a cutoff you choose | Long pauses left out |
| Sentence rate | One sentence's first word start to its last word end | Only pauses inside that sentence |
How do I get word timestamps for a recording?
Transcribe it with a speech-to-text API that returns word timings. Sume STT 1.0 takes the recording's public HTTPS URL at POST /v1/stt-1.0/transcribe and always returns word timings, with no flag to turn on; Speech-to-text API with word timestamps shows the request. The result fields you need:
words[]: each token'sword,start, andend, in seconds from the audio start, ordered bystart.words[].type: when supplied, the token's class, for examplewordorspacing. Count onlywordtokens.segments[]: sentences withtext,start,end, andduration_seconds, returned when you sendsegmentation: { "mode": "sentence" }.- One request covers up to 10 minutes of audio (
duration_seconds1–600), billed at $0.01 per audio minute plus a 5.5% agent fee by default on API pricing. For longer recordings, see Transcribe long audio files.
How do I calculate words per minute from the timestamps?
Keep the word tokens, then divide. This sketch computes the speaking rate and an articulation rate that leaves out pauses longer than one second. The one-second cutoff is a choice, not a standard, so state yours when you report a rate.
Decide how to count numbers, contractions, and filler words, and count them the same way every time. In languages that don't put spaces between words, count characters or syllables instead.
// result = data.result from GET /v1/jobs/{id}/result
const words = result.words.filter((w) => (w.type ?? "word") === "word");
const first = words[0];
const last = words[words.length - 1];
const spanMinutes = (last.end - first.start) / 60;
const speakingWpm = words.length / spanMinutes;
// Articulation rate: leave out gaps longer than 1 second between words
let pauseSeconds = 0;
for (let i = 1; i < words.length; i++) {
const gap = words[i].start - words[i - 1].end;
if (gap > 1) pauseSeconds += gap;
}
const articulationWpm = words.length / (spanMinutes - pauseSeconds / 60);How do I get the rate of each sentence?
Ask for sentence segments and count the words inside each one. Segments are gapless, since each one's end equals the next one's start, so a segment's duration_seconds can include the silence between sentences. For the pace of the sentence itself, time it from its first word's start to its last word's end:
const sentenceRates = result.segments.map((s) => {
const inside = words.filter((w) => w.start >= s.start && w.start < s.end);
if (inside.length < 2) return { text: s.text, wpm: null };
const minutes = (inside[inside.length - 1].end - inside[0].start) / 60;
return { text: s.text, wpm: inside.length / minutes };
});Can I work out speech rate without a transcript?
Yes, for a script read as written: count the script's words, time the recording from the first word to the last, and divide. The count drifts when the speaker ad-libs or skips lines, which is where a transcript's word timings help.
To go the other way and estimate how long a script will run before anyone records it, see how many words fit in 60 seconds.
Sources
Related posts
More in Media tools
- How to color correct a video: fix a color cast and warmth
Color correct a video with FFmpeg filters on Sume: colorbalance removes a yellow or green cast, colortemperature sets warmth, and eq sets saturation.
- How to convert HEVC (H.265) video to H.264
Convert HEVC (H.265) to H.264 by re-encoding the video stream. On Sume, an exact trim of a whole non-HDR clip returns an H.264 MP4.
- How to crop a video without losing quality
A normal crop re-encodes the frames, so lose as little as you can: crop once, from the original, and don't scale back up. How Sume encodes each edit.
- Demand Gen video specs: sizes, lengths, and the 4:5 cut
Demand Gen takes 1:1, 16:9, 4:5, and optional 9:16 videos of at least 5 seconds, uploaded to YouTube. How to make each, including 4:5, with Sume.
Written by Sume