Whisper API keeps returning empty transcript for videos longer than 30 minutes — stuck in production

Hey everyone,

Running into a consistent issue with Whisper API and longer recordings and not sure what the right fix is.

My setup right now:

  • Pull the Zoom recording → convert to MP3 with FFmpeg → compress under 25MB → send to Whisper API

Works fine for anything under 20 minutes. The moment I go past 30 minutes the transcript either comes back empty or just cuts off mid-sentence with no error message. Whisper just returns 200 with partial or no content.

Already tried a few things:

Splitting into chunks — works but the speaker attribution gets completely lost between chunks and stitching the context back together is messy.

Lowering the bitrate more — quality drops so much that Whisper starts misidentifying words, especially with any background noise or non-native accents.

Switching to gpt-4o-transcribe — hit the 1500 second limit which is actually worse than Whisper for longer calls.

The real frustration is the entire pipeline assumes you have a small local file. For any real meeting or interview recording that is just not realistic without seriously degrading the audio.

Has anyone figured out a solid approach for this? Ideally something that:

  • Takes the recording URL directly without needing to download and re-encode
  • Handles 60-90 minute recordings reliably
  • Keeps speaker labels intact

Open to completely different approaches if Whisper just isn’t the right tool for this use case.

The 25MB limit on the OpenAI Whisper API is the main bottleneck here. Compressing a 90-minute recording to fit that size kills the audio quality (hence the hallucinations or empty transcripts).

Since you’re looking for a production-ready solution that handles 60+ minutes and speaker labels, here are three solid approaches:

  1. Deepgram API: It’s often the go-to for long-form audio. It accepts URLs directly, doesn’t have that strict 25MB limit, and has excellent diarization (speaker labels) that stays consistent throughout the entire recording.

  2. AssemblyAI: Similar to Deepgram, it’s built for long files and handles speaker diarization much better than ‘stitching’ Whisper chunks together.

  3. Self-hosted Whisper (Faster-Whisper): If you have the infra (or use a GPU cloud like RunPod), you can run faster-whisper. You won’t have file size limits, and you can use pyannote-audio for speaker labeling, though it requires more setup.

Sticking with OpenAI’s Whisper for 90-minute files will always feel like a hack because of the chunking/compression trade-off.The 25MB limit on the OpenAI Whisper API is the main bottleneck here. Compressing a 90-minute recording to fit that size kills the audio quality (hence the hallucinations or empty transcripts).

Since you’re looking for a production-ready solution that handles 60+ minutes and speaker labels, here are three solid approaches:

  1. Deepgram API: It’s often the go-to for long-form audio. It accepts URLs directly, doesn’t have that strict 25MB limit, and has excellent diarization (speaker labels) that stays consistent throughout the entire recording.

  2. AssemblyAI: Similar to Deepgram, it’s built for long files and handles speaker diarization much better than ‘stitching’ Whisper chunks together.

  3. Self-hosted Whisper (Faster-Whisper): If you have the infra (or use a GPU cloud like RunPod), you can run faster-whisper. You won’t have file size limits, and you can use pyannote-audio for speaker labeling, though it requires more setup.

Sticking with OpenAI’s Whisper for 90-minute files will always feel like a hack because of the chunking/compression trade-off.