audio-speech

OpenAI

Batch speech-to-text with word timestamps, but a strict upload cap and weak multilingual performance make it a mixed fit for hard audio.

Visit OpenAI
25 MB upload capWord-level timestampsNo diarizationMixed-language tested
TL;DR — our verdictUpdated August 2026 · 6 test artifacts

Useful for simple batch transcription, but not a hard-audio default

Where it wins
  • You need a simple hosted batch STT API with word-level timestamps.
  • Your audio files are under 25 MB.
  • Your inputs are mostly English or jargon-heavy narration rather than heavily code-switched speech.
Main limitation
  • You need speaker diarization or confidence scores.
Pricing (verified plans)
whisper-1 $0.006/mingpt-4o-transcribe $0.006/mingpt-4o-mini-transcribe $0.003/mingpt-4o-transcribe-diarize $0.006/min
Strongest test artifacts

Feature scores on this page: 26.1/100 (1 scored feature)

Our take

Whisper-1 returned usable transcripts on the jargon-heavy and bilingual samples, with word-level timestamps and predictable list pricing. But this benchmark also found a hard 25 MB upload cap, no speaker labels or confidence fields, and weak Spanish recall on the code-switched clip, so it is a mixed fit for real-world multilingual or meeting-style audio.

Screen recording of the benchmark workflow for auditability.

In-Depth Review

Our detailed analysis of OpenAI — features, performance, and real-world testing.

AD
AI Demos Team
Expert Reviewer
Verified Review

Feature-by-Feature Breakdown

Batch Audio Transcription
Test Summary
Feature tested: Batch Audio Transcription
Result: Passed

Feature tested: Batch Audio Transcription

Result: Passed

Expected behavior: Transcribes uploaded audio files through a single multipart POST to `/v1/audio/transcriptions`, returning text output when the file is within the upload limit. It was exercised on the 8.58 MB medical-jargon clip and the 22.19 MB bilingual clip, with the 65.39 MB crosstalk file rejected by HTTP 413.

Test case: Audio file → Image

Input type: Audio file

Input used: Input artifact (Audio file): Input 1: Overlapping Speech / Crosstalk — 35:43 multi-speaker audio, 65.39 MB, used to test overlap and diarization. — crosstalk.wav

Observed output: Output artifact (Image): RESULT — 05-limit-evidence-3.png

Input artifact: Input artifact (Audio file): Input 1: Overlapping Speech / Crosstalk — 35:43 multi-speaker audio, 65.39 MB, used to test overlap and diarization. — crosstalk.wav

Output artifact: Output artifact (Image): RESULT — 05-limit-evidence-3.png

What changed: Audio file transformed into Image

Test case: Audio file → Text/code file

Input type: Audio file

Input used: Input artifact (Audio file): Input 2: Medical Jargon — 18:44 Gray's Anatomy narration, 8.58 MB, dense with technical terms. — medical_terms.mp3

Observed output: Output artifact (Text/code file): Successful transcript payload for the medical-jargon clip; the run scored 5.17% WER and returned 2,663 words. — raw-response.json

Input artifact: Input artifact (Audio file): Input 2: Medical Jargon — 18:44 Gray's Anatomy narration, 8.58 MB, dense with technical terms. — medical_terms.mp3

Output artifact: Output artifact (Text/code file): Successful transcript payload for the medical-jargon clip; the run scored 5.17% WER and returned 2,663 words. — raw-response.json

What changed: Audio file transformed into Text/code file

Test case: Audio file → Text/code file

Input type: Audio file

Input used: Input artifact (Audio file): Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation, 22.19 MB, mostly English. — mix_language.mp3

Observed output: Output artifact (Text/code file): Successful transcript payload for the bilingual clip; the run scored 26.12% WER and returned 5,702 words. — raw-response-3.json

Input artifact: Input artifact (Audio file): Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation, 22.19 MB, mostly English. — mix_language.mp3

Output artifact: Output artifact (Text/code file): Successful transcript payload for the bilingual clip; the run scored 26.12% WER and returned 5,702 words. — raw-response-3.json

What changed: Audio file transformed into Text/code file

Why it matters / Conclusion: Works as a simple hosted batch transcription endpoint, but the 25 MB ceiling is strict and blocks larger real-world audio.

Transcribes uploaded audio files through a single multipart POST to `/v1/audio/transcriptions`, returning text output when the file is within the upload limit. It was exercised on the 8.58 MB medical-jargon clip and the 22.19 MB bilingual clip, with the 65.39 MB crosstalk file rejected by HTTP 413.

audio
0:00 / 0:00
Loading audio...
Input 1: Overlapping Speech / Crosstalk — 35:43 multi-speaker audio, 65.39 MB, used to test overlap and diarization.
image
Output artifact for "Batch Audio Transcription" test: RESULT, 05-limit-evidence-3.png
audio
0:00 / 0:00
Loading audio...
Input 2: Medical Jargon — 18:44 Gray's Anatomy narration, 8.58 MB, dense with technical terms.
json
raw-response.json
Loading file...
Successful transcript payload for the medical-jargon clip; the run scored 5.17% WER and returned 2,663 words.
audio
0:00 / 0:00
Loading audio...
Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation, 22.19 MB, mostly English.
json
raw-response-3.json
Loading file...
Successful transcript payload for the bilingual clip; the run scored 26.12% WER and returned 5,702 words.
Bottom Line
Works as a simple hosted batch transcription endpoint, but the 25 MB ceiling is strict and blocks larger real-world audio.
Word-Level Timestamps
Test Summary
Feature tested: Word-Level Timestamps
Result: Passed

Feature tested: Word-Level Timestamps

Result: Passed

Expected behavior: Produces verbose JSON transcription output with per-word timing when `response_format=verbose_json` and `timestamp_granularities[]=word` are enabled. It was exercised on the medical-jargon clip and the bilingual clip, yielding timed token outputs.

Test case: Audio file → Text/code file

Input type: Audio file

Input used: Input artifact (Audio file): Input 2: Medical Jargon — same request with word timestamps enabled. — medical_terms.mp3

Observed output: Output artifact (Text/code file): Verbose JSON response showing a `words` array with start/end times for the medical-jargon clip. — raw-response.json

Input artifact: Input artifact (Audio file): Input 2: Medical Jargon — same request with word timestamps enabled. — medical_terms.mp3

Output artifact: Output artifact (Text/code file): Verbose JSON response showing a `words` array with start/end times for the medical-jargon clip. — raw-response.json

What changed: Audio file transformed into Text/code file

Test case: Audio file → Text/code file

Input type: Audio file

Input used: Input artifact (Audio file): Input 3: Bilingual Code-Switching — same request with word timestamps enabled. — mix_language.mp3

Observed output: Output artifact (Text/code file): Verbose JSON response showing a `words` array with start/end times for the bilingual clip. — raw-response-3.json

Input artifact: Input artifact (Audio file): Input 3: Bilingual Code-Switching — same request with word timestamps enabled. — mix_language.mp3

Output artifact: Output artifact (Text/code file): Verbose JSON response showing a `words` array with start/end times for the bilingual clip. — raw-response-3.json

What changed: Audio file transformed into Text/code file

Why it matters / Conclusion: Good for captions and search alignment, but the response still lacks confidence values and speaker labels.

Produces verbose JSON transcription output with per-word timing when `response_format=verbose_json` and `timestamp_granularities[]=word` are enabled. It was exercised on the medical-jargon clip and the bilingual clip, yielding timed token outputs.

audio
0:00 / 0:00
Loading audio...
Input 2: Medical Jargon — same request with word timestamps enabled.
json
raw-response.json
Loading file...
Verbose JSON response showing a `words` array with start/end times for the medical-jargon clip.
audio
0:00 / 0:00
Loading audio...
Input 3: Bilingual Code-Switching — same request with word timestamps enabled.
json
raw-response-3.json
Loading file...
Verbose JSON response showing a `words` array with start/end times for the bilingual clip.
Bottom Line
Good for captions and search alignment, but the response still lacks confidence values and speaker labels.
Code-Switching Transcription
Mixed results
26.12/100
Test Summary
Feature tested: Code-Switching Transcription
Result: Partial (26.12/100) — Mixed results

Feature tested: Code-Switching Transcription

Result: Partial (26.12/100)

Verdict: Mixed results

Expected behavior: Transcribes mixed-language speech, including Spanish-English audio, into a single transcript. It was exercised on the bilingual sample, which transcribed successfully but showed uneven Spanish recall.

Test case: Audio file → Text/code file

Input type: Audio file

Input used: Input artifact (Audio file): Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation; the benchmark notes the clip is about 95.5% English, so this is a weak balanced multilingual stress case. — mix_language.mp3

Observed output: Output artifact (Text/code file): Returned a mostly English transcript; the detail view shows a dropped Spanish token and the benchmark scored 26.12% WER with 46.2% Spanish token recall. — raw-response-3.json

Input artifact: Input artifact (Audio file): Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation; the benchmark notes the clip is about 95.5% English, so this is a weak balanced multilingual stress case. — mix_language.mp3

Output artifact: Output artifact (Text/code file): Returned a mostly English transcript; the detail view shows a dropped Spanish token and the benchmark scored 26.12% WER with 46.2% Spanish token recall. — raw-response-3.json

What changed: Audio file transformed into Text/code file

Why it matters / Conclusion: Use with caution for multilingual or code-switched speech; this benchmark does not support treating it as strong balanced multilingual transcription.

Transcribes mixed-language speech, including Spanish-English audio, into a single transcript. It was exercised on the bilingual sample, which transcribed successfully but showed uneven Spanish recall.

audio
0:00 / 0:00
Loading audio...
Input 3: Bilingual Code-Switching — 32:18 Spanish-English conversation; the benchmark notes the clip is about 95.5% English, so this is a weak balanced multilingual stress case.
json
raw-response-3.json
Loading file...
Returned a mostly English transcript; the detail view shows a dropped Spanish token and the benchmark scored 26.12% WER with 46.2% Spanish token recall.
Bottom Line
Use with caution for multilingual or code-switched speech; this benchmark does not support treating it as strong balanced multilingual transcription.

How it scored on the research's own criteria

The 4 evaluation dimensions from our hands-on research on OpenAI, each judged from recorded runs on 3 test inputs — the same verdicts the ranking page ranks on.

held up  partial  failed  not exercised by this input

CriterionVerdictWhat the runs showedPer inputProof
Output qualityMixed3/5One input was never transcribed, one was very accurate, and one broke down badly on bilingual speech. That is a genuinely mixed accuracy profile: strong on dense monolingual narration, but unreliable once the language switches.open proof ↗
Automation levelStrong5/5Every tested input was handled in one multipart request and completed without any manual follow-up. Even the rejected upload came back as a finished API interaction, so the integration path is as simple as it gets.
ExportMixed3/5When it does return text, the payload is only shallow: word timing is present, but richer metadata like confidence and speaker labels is absent. One input produced no payload at all, and another variant was cut off, so export is useful but incomplete overall.open proof ↗
Input handlingStrong4/5It successfully accepted and finished two of the three tested files with wall-clock, RTF, and list price reported, but it also hard-stopped the oversized meeting file at the documented upload cap. That makes the handling broadly good, but not universal.open proof ↗

Verdicts come verbatim from the study's recorded observations, never re-derived at render; a criterion with no recorded run shows Not exercised — this section cannot invent a score.

Transcription pricing

Vendor-published list prices for OpenAI speech-to-text models.

TESTED
whisper-1
$0.006/min ($0.36/hr)
Flat per-minute pricing; listed as Whisper on the pricing page; tested in this benchmark.
gpt-4o-transcribe
$0.006/min ($0.36/hr)
Token-billed model; vendor shows $2.50/1M input tokens and $10.00/1M output tokens.
gpt-4o-mini-transcribe
$0.003/min ($0.18/hr)
Cheapest 4o-family transcription model on the published page.
gpt-4o-transcribe-diarize
$0.006/min ($0.36/hr)
Diarization is included at the same rate; it is not a separate surcharge.
gpt-transcribe
$0.0045/min ($0.27/hr)
Newer non-4o transcription model; cheaper than gpt-4o-transcribe.
gpt-live-transcribe
$0.017/min
Live/streaming transcription.
gpt-realtime-whisper
$0.017/min
Live transcription.
gpt-realtime-translate
$0.034/min
Live translation.

No free tier or published volume discount is shown on the API pricing page. Batch API is not priced separately for transcription.

✓ Use This If
You need a simple hosted batch STT API with word-level timestamps.
Your audio files are under 25 MB.
Your inputs are mostly English or jargon-heavy narration rather than heavily code-switched speech.
✕ Skip This If
You need speaker diarization or confidence scores.
You need balanced multilingual or strong code-switching transcription.
Your audio files routinely exceed 25 MB.
audio-speechaudio-to-textspeechOther
Not in this benchmark. The responses had no native speaker labels, and the request config notes "No native diarization."
The benchmark hit a 25 MB upload cap. A 65.39 MB crosstalk file was rejected with HTTP 413, while the 8.58 MB and 22.19 MB files were accepted.
Yes. The requests used `response_format=verbose_json` with `timestamp_granularities[] = word`, and the successful runs returned timed word arrays.
It scored 5.17% WER on the medical-jargon clip, with 88.9% jargon recall. The highlighted miss was "trabeculae," which was transcribed incorrectly.
It scored 26.12% WER and 46.2% Spanish token recall. The transcript was mostly English, so this is weak evidence for balanced multilingual performance.
The published list price is $0.006 per minute, or $0.36 per audio-hour. The successful benchmark runs cost $0.1124 and $0.19385 at list price.

Banner Preview

How the embed badge will look on your site

OpenAI featured on AI Demos

Embed HTML

Copy this code to your website source

<a target="_blank" href="https://aidemos.com/tools/openai?utm_source=openai_embed" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> <img src="https://aidemos-website-images.s3.amazonaws.com/featured.png" alt="OpenAI | Featured on AI Demos" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> </a>

Quick Integration Guide

  • 1Copy the HTML code block above.
  • 2Paste it into your site's HTML or CMS editor.
  • 3Banner appears instantly on your page.
  • 4Links back to your tool profile here.
Similar Tools

Similar Tools

Discover more AI tools like OpenAI to enhance your workflow.

Comments (0)

Please Log in to join the discussion.

Built by FutureSmart AI — the team behind AI Demos

Need a custom AI solution for this use case?

If you are looking to build a custom speech-to-text, audio transcription, or word timestamping system for your business or internal workflow, email us at contact@futuresmart.ai.

Get a custom build

Found something inaccurate or missing? We try to keep our AI research accurate and useful. If you found outdated information, an issue, or have a suggestion, email us at collaborate@aidemos.com.

Back to Top