GPT-4o Transcribe vs Whisper v1
Which one, when
These bill in different units - whisper-1 at $0.006 per audio minute, gpt-4o-transcribe at $6 per million audio input tokens plus $2.5 and $10 per million text tokens - so no single conversion between them is honest. whisper-1 is the one with word- and segment-level timestamps, srt/vtt output and the translations endpoint, but it does not stream; gpt-4o-transcribe streams, including realtime transcription sessions, and returns json or text only. Pick whisper-1 for subtitles and translation, gpt-4o-transcribe for live transcripts.
Benchmarks
Whisper v1: the vendor has not published benchmark scores.
Vendor-published: Alibaba (Qwen) ByteDance Google OpenAI
Pricing
| GPT-4o Transcribe | Whisper v1 | Δ | |
|---|---|---|---|
| Per audio minute | - | $0.006 | - |
| Audio input / 1M tokens | $6 | - | - |
| Text output / 1M tokens | $10 | - | - |
These two models bill in different units, so no Δ is shown. Converting between them would require an assumption we have not measured. Each rate card is listed in its own unit above.
Capabilities
| GPT-4o Transcribe | Whisper v1 | |
|---|---|---|
| Speaker diarization | no | no |
| Streaming | yes | no |
| Timestamps | no | yes |
Specs
| GPT-4o Transcribe | Whisper v1 | |
|---|---|---|
| Input modalities | text audio | audio |
| Output modalities | text | text |
| Released | 2025-03-20 | 2023-03-01 |
| Knowledge cutoff | 2024-06 | - |
| Limits | mp3/mp4/mpeg/mpga/m4a/wav/webm, up to 25MB streaming transcription supported (incl. Realtime transcription sessions) json/text output only no word timestamps or diarization | mp3/mp4/mpeg/mpga/m4a/wav/webm, up to 25MB word- and segment-level timestamps (verbose_json), srt/vtt output no streaming only model supported on the translations endpoint (to English) |
| Languages | 57 languages listed for the transcriptions endpoint (one shared list for all transcription models) ISO 639-1 / 639-3 codes accepted for GPT-4o-based models | Trained on 98 languages 57 listed as supported, the languages that met OpenAI's under-50% word-error-rate threshold across the transcriptions and translations endpoints |
| Max output | 2K | - |
Specs are transcribed from each vendor’s documentation; a row a vendor does not publish is left out rather than inferred. Full sources: GPT-4o Transcribe · Whisper v1
Switch between them with one line
Both ids are in every tab below; the highlighted pair of lines is the only edit. Same endpoint, same key, same request shape.
from openai import OpenAI
client = OpenAI(
base_url="https://synthorai.io/v1",
api_key="sk-syn-...",
)
resp = client.audio.transcriptions.create(
model="gpt-4o-transcribe",
# model="whisper-1", # uncomment this line, comment the one above
file=open("meeting.mp3", "rb"),
language="en",
)
print(resp.text)import OpenAI from "openai";
import fs from "node:fs";
const client = new OpenAI({
baseURL: "https://synthorai.io/v1",
apiKey: "sk-syn-...",
});
const resp = await client.audio.transcriptions.create({
model: "gpt-4o-transcribe",
// model: "whisper-1", // uncomment this line, comment the one above
file: fs.createReadStream("meeting.mp3"),
});
console.log(resp.text);curl https://synthorai.io/v1/audio/transcriptions \
-H "Authorization: Bearer sk-syn-..." \
-F model="gpt-4o-transcribe" \
# -F model="whisper-1" \ # uncomment this line, comment the one above
-F file=@meeting.mp3package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithBaseURL("https://synthorai.io/v1"),
option.WithAPIKey("sk-syn-..."),
)
f, _ := os.Open("meeting.mp3")
resp, _ := client.Audio.Transcriptions.New(context.TODO(), openai.AudioTranscriptionNewParams{
Model: "gpt-4o-transcribe",
// Model: "whisper-1", // uncomment this line, comment the one above
File: f,
})
fmt.Println(resp.Text)
}import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.audio.transcriptions.*;
import java.nio.file.Paths;
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://synthorai.io/v1")
.apiKey("sk-syn-...")
.build();
Transcription resp = client.audio().transcriptions().create(
TranscriptionCreateParams.builder()
.model("gpt-4o-transcribe")
// .model("whisper-1") // uncomment this line, comment the one above
.file(Paths.get("meeting.mp3"))
.build()).asTranscription();
System.out.println(resp.text());FAQ
Which is cheaper, GPT-4o Transcribe or Whisper v1?
They bill in different units, so there is no single honest number: GPT-4o Transcribe and Whisper v1 each appear in their own unit in the table above. Compare them on your own workload; the practical trade-off is described in the verdict at the top of this page.
Can I A/B test GPT-4o Transcribe against Whisper v1 without two integrations?
Yes. Both are served through the same OpenAI-compatible endpoint with one API key. Switching is a one-line change to the model id, so you can route a fraction of traffic to each and compare bills directly.
Do GPT-4o Transcribe and Whisper v1 support speaker diarization?
The capability table above answers this per model, straight from each vendor’s documentation. Diarization, streaming and timestamps are listed separately because models differ on all three.