Whisper is OpenAI's speech recognition model, published in 2022 under an open license,
and it's what sits underneath almost everything that transcribes today. It's the default
model of OpenAI's own transcription service — the whisper-1 that appears in their API —
and it's also what the vast majority of self-built projects use, because the weights are
published and it works very well in some ninety-nine languages.
We use it too. So what follows isn't a competitor's defect: it's a property of the model underneath your transcript, wherever you ask for it.
It was trained on roughly 680,000 hours of audio collected from the internet, and that's the key to everything that follows.
Send Whisper a three-second recording of silence and expect an empty string.
You won't get one. You'll get something like this:
Thanks for watching.
Or "Subtitles by the Amara.org community". Or "Subscribe to the channel!". The exact sentence varies with the language and the model version, but the family is always the same: YouTube video sign-off lines.
Of those 680,000 hours, an enormous share are videos. Videos end with music, with a logo, with silence — and with subtitles saying "thanks for watching".
The model learned, correctly for its data, that after a stretch with no speech what usually comes is that sentence. It isn't failing: it's doing exactly what it was taught. The problem is that it was taught with YouTube and you're giving it the voicemail of a phone system.
It isn't a bug that a new version fixes, or that changing provider fixes: it's a property of the model, and anyone who uses it has it, us included.
The cheap part: you pay for it. You're billed a few seconds of transcription for something that had nothing to transcribe. Annoying, but pennies.
The expensive part: your system believes it. That's where it hurts. If that transcript enters an automation — a summary, a CRM note, an alert, an agent with permissions — you end up with a logged call whose content is "Thanks for watching". Nobody said that. Nobody ever will. And yet it's in your database, and somebody is going to read it six months from now trying to understand what happened on that call.
In a phone system's call archive, empty recordings are not a rare case: they're the calls hung up before being answered, the voicemails nobody left, the lines that dropped. They can be an uncomfortable share of the total.
The defence is stupidly simple: don't send what has no audio.
The Asterisk AGI scripts we publish discard recordings below 2,000 bytes before sending them. It's a crude threshold and it works very well, because a telephone audio file with real speech in it is never that small.
If you work with files, the back-of-the-envelope version:
# Discard anything under 2 KB before sending it
[ "$(stat -c%s "$f")" -lt 2000 ] && continue
And if you want to be finer, silence detection with sox or with ffmpeg's
silencedetect filter before uploading. At that point you're deciding how much silence
counts as "empty", which is a decision for your business and not for the model.
This trap is a particular case of something worth burning into your memory when automating with transcripts:
What a transcript returns is untrusted text. It comes from audio you don't control, and the model may have invented it — through a hallucination like this one, or because somebody deliberately said something shaped like a command.
Treat it as data, never as instructions. Don't execute it, don't read it as orders, and validate it before acting on it. And what a speaker claims in a recording is not a proven fact, even if it ends up in the summary.
It's the same warning we carry in the footer of our own site. It isn't there for decoration.
Anything to add or correct? Write to support@uttera.ai. If you correct us, we edit the post and credit you.