Whisper, GPT-4o, Gemini, Grok or Azure: which transcribes best?

Eight speech-to-text models, ten runs each, the same eight clips. The most accurate, the cheapest and the one that can build a timed SRT are not the same model.

By Parker Roan · · 9 min read

A few months ago I had to give a presentation at work, and I hate hearing my own voice. I went looking for a tool that would replace my audio, drop the filler words, and keep the timing exactly, so the mouse on screen still matched the narration. I did not find one that fit, so I had an AI write me a rough script that did, and the presentation went out in a voice that was not mine.

A few weeks later I turned that script into Recastr, partly to see how far I could get building a side project with Claude Code. The first thing that broke was transcription accuracy. Before committing to a provider I ran a benchmark, and this post is what it found. The harness, the fixtures and the raw results are in parkerroan/transcription-benchmark on GitHub, and there is a longer chapter-by-chapter writeup of the pipeline if you want to see how each number was produced. A shorter version of this post ran on Medium in August.

What was compared

Eight models from five vendors, in two families.

Dedicated speech-to-text models, built to transcribe:

General multimodal chat models, given the audio and a "transcribe this" prompt:

Every model id was checked against the vendor's live model list on 2026-08-13 rather than assumed. Two I had planned to include, gpt-4o-audio-preview and gemini-2.5-flash, had already been retired by then.

I needed two things from a transcript that a word error rate cannot tell you about: a timestamp on every word, so each subtitle cue can start where the speaker started it, and speaker labels, so a two-person recording can get two voices. Only three of the eight return word timestamps at all, and only one of those three also labels speakers natively.

ModelVendorWord timestampsNative diarizationStreamingSteerabilityMeasured $/min
whisper-1OpenAIYesNoNo (batch only)Vocabulary hint$0.0060
gpt-4o-transcribeOpenAINoNoYesVocabulary hint$0.0035
gpt-4o-mini-transcribeOpenAINoNoYesVocabulary hint$0.0018
gpt-4o-transcribe-diarizeOpenAINo (segment level)YesYesVocabulary hint$0.0192
gpt-audioOpenAINo (promptable, unreliable)PromptableText tokens onlyFull prompt$0.0214
gemini-3.7-flashGoogleNoPromptableSeparate Live APIFull prompt$0.0021
grok-sttxAIYesYesYesStructured params$0.0017
azure-fast-transcriptionMicrosoftYesYes (up to 35 speakers)Separate real-time tierStructured params$0.0060

Cost per minute is what the benchmark measured, not the list price. The two chat models are billed per token, so their rate moves with how much they say.

The clips

Eight fixtures, in two deliberately different groups.

Diagram of the eight fixtures: six synthetic clips with exact ground truth, and two real recordings from 1949 and 2026 with official transcripts.

The six synthetic clips were generated with OpenAI's tts-1, so the ground truth is exact by construction: clean narration, a clip dense with numbers and proper nouns, technical jargon, narration with white noise laid over it, and scripted two- and three-speaker dialogues. They answer the easy question, whether a model can transcribe at all.

The two real recordings answer the harder one. A two-minute excerpt from the Library of Congress's 1949 interview with Fountain Hughes, conducted by Hermond Norwood, and a five-minute excerpt from NASA's "Houston We Have a Podcast" episode 414, a modern studio interview with an official transcript. They are 77 years apart on purpose. If only the 1949 clip were hard, this would be an "old audio" story. It is not: every model degrades on both.

Both clips are public domain, so here they are as the models heard them.

0:000:00
The 1949 clip: Fountain Hughes interviewed by Hermond Norwood, Library of Congress American Folklife Center, AFS 09990A. Two speakers, 1:56, 317 words in the reference transcript.
0:000:00
The 2026 clip: NASA's Houston We Have a Podcast, episode 414, Science in Space. Two speakers, 4:54, 876 words in the official transcript.

A third real clip, a 1962 White House Dictabelt recording, was tried and dropped. One speaker was barely audible even to a person, which makes it a poor source of ground truth whatever a model does with it.

How each transcript is scored

Every clip goes to all eight models, and the whole pass repeats ten times before anything is averaged, because model output and API latency both vary call to call. That is 80 calls per model and 640 in all. Each transcript is aligned to the reference words in text order with jiwer, which gives the word error rate. The numbers-and-names and jargon clips also report a key-term miss rate, the share of the important words that came back wrong. Latency is wall-clock time per call.

Diarization needs one extra step. Provider speaker labels are arbitrary, xAI returns integers and the prompted models return strings like "Speaker 1", and none of them line up with the reference's A and B. The scorer tries every mapping between the two label sets and reports the best one, so a model is never penalised for calling the first speaker "2".

The results

Every number below is a mean over the ten runs. The table is sorted by synthetic word error rate, best first.

ModelSynthetic WER1949 interview2026 podcastLatency$/min
gpt-audio5.1%29.8%10.7%3.4 s$0.0214
azure-fast-transcription7.1%33.1%13.1%3.3 s$0.0060
gemini-3.7-flash7.2%33.9%20.3%11.6 s$0.0021
gpt-4o-transcribe7.2%33.7%22.0%3.2 s$0.0035
gpt-4o-mini-transcribe7.9%33.0%11.3%1.9 s$0.0018
whisper-18.5%30.9%12.2%4.0 s$0.0060
grok-stt8.9%35.6%23.3%0.9 s$0.0017
gpt-4o-transcribe-diarize15.4%33.9%15.7%22.1 s$0.0192

Three bar charts of word error rate per model on synthetic clips, the 1949 interview and the 2026 podcast. Every model is far worse on the real recordings.

Three things stand out.

gpt-audio, a chat model, is the most accurate transcriber in the set. It has the lowest error rate on every group of clips, 5.1% synthetic, 29.8% on the 1949 interview and 10.7% on the podcast. It wins outright, not on average. It also costs about six times what gpt-4o-transcribe costs per minute.

Real audio is two to four times harder than synthetic audio for every model, and the modern podcast is not exempt. gpt-4o-transcribe-diarize degrades the least, about 1.6x, and gpt-audio and gpt-4o-transcribe the most, about 4x. The 1949 interview is the hardest clip for all eight, usually by a wide margin.

gpt-4o-transcribe-diarize sits at the bottom of the synthetic column because of one clip. It scored 53.8% on the numbers-and-names fixture, the worst single result in the benchmark, while managing 3.5% on the two-speaker dialogue. If your audio is full of figures, that matters.

Scatter plot of cost per minute against word error rate on the 2026 podcast. Filled dots mark the three models that return word timestamps.

Cheap and fast is not the same as cheap and accurate. grok-stt is the cheapest model at $0.0017 a minute and the fastest by a factor of two, with a mean latency of 0.9 seconds. It also has the worst error rate of any model on both real recordings, 35.6% on the interview and 23.3% on the podcast. gpt-4o-mini-transcribe costs almost the same, $0.0018 a minute, and halves that podcast error rate to 11.3%. On accuracy per dollar it is the clear pick, as long as you do not need timestamps or speakers.

Diarization

Five of the eight models label speakers. Three never emit a label at all, whatever the audio.

ModelSynthetic dialogues1949 interview2026 podcast
azure-fast-transcription96.1%92.3%92.3%
gemini-3.7-flash100%85.6%91.9%
gpt-4o-transcribe-diarize99.8%85.2%84.6%
gpt-audio100%83.3%88.5%
grok-stt84.0%73.7%92.3%

Dot plots of diarization accuracy for the five models that label speakers, on synthetic dialogues, the 1949 interview and the 2026 podcast.

azure-fast-transcription is the most consistent diarizer, at 92.3% on both real clips with no swing between eras. grok-stt swings the widest, from 73.7% on the 1949 interview to 92.3% on the podcast, a 19-point gap. The two chat models are perfect on the clean scripted dialogues and drop into the mid-80s on the interview.

One result changed under repetition. A single run had put gpt-4o-transcribe-diarize among the worst on real audio. Averaged over ten, it lands mid-pack and is fairly consistent, about 85% on both clips. That is the argument for running a benchmark more than once before believing it.

Picking a model depends on what you need

There is no single best model here. Each row below is called strictly from the numbers above.

If you care most aboutPickWhy
Costgrok-stt$0.0017 a minute, cheapest by a clear margin
Accuracy, ignoring speakersgpt-audioLowest WER on every clip group
A timed SRT with speakersazure-fast-transcriptionWord timestamps and native diarization, and the flattest diarization across eras
Noisy audiogemini-3.7-flashTied at 0% WER on the white-noise clip with four others, and the cheapest of the five
Speakers on clean audiogpt-audio or gemini-3.7-flashBoth 100% on the scripted dialogues
Names, numbers and jargongemini-3.7-flash or gpt-4o-transcribeLowest key-term miss rate, 10.8%
Latencygrok-stt0.9 s mean, twice as fast as the next model and about 24x faster than gpt-4o-transcribe-diarize
Accuracy per dollargpt-4o-mini-transcribe$0.0018 a minute with 11.3% on the podcast, against grok-stt's 23.3%

What Recastr uses

Recastr turns a recording into a voiceover that lands on the original cues, so it needs a timestamp per word and a label per speaker. That narrows the field to one model, and it is also the steadiest diarizer in the set, so azure-fast-transcription is the primary. grok-stt and whisper-1 sit behind it as fallbacks, in that order, because they are the other two models that return word timestamps. If you want to see what that transcript becomes, the screen recording voiceover page walks through the transcribe, edit and re-voice steps, or you can drop a file into the studio.

Caveats

These numbers are a snapshot from 2026-08-13. Models get updated, prices change, and none of these models is deterministic, so a re-run will not reproduce them exactly. Ten runs smooth the noise; they do not remove it. gemini-3.7-flash failed two of its 80 calls outright and those calls are excluded from its means. The cost column is what the API charged for these clips, which for the token-billed chat models depends on the audio as much as on the price list.

Try it on your own file

10 free minutes · No credit card required