In the final second of a recording that ran for almost two hours, a sentence appeared: “Subtitles by DimaTorzok.” No one had said it. There was no music, no title sequence, and no voice that could reasonably be mistaken for those words. There had been 86 seconds of near silence.
The model itself reported a 0.906 probability that no speech was present, yet printed a familiar phrase anyway. The final two words had zero duration. The independent speaker detector found no person there either. The absurd error exposed the real problem: a modern recognizer can decide that a passage is silent and still confidently tell us what it supposedly heard.
What began as one damaged transcript became a comparison of nearly twenty models and audio-processing paths. On an NVIDIA RTX 5060 Ti with 16 GB of memory, we tested short control clips, a continuous seven-minute passage, and, for the finalists, all six original files. Together they ran for 5 hours, 29 minutes, and 40 seconds.
A newer Whisper or a 2026 model was expected to beat large-v2 easily. It did not. New systems won individual passages, ran faster, or separated silence more cleanly. Large-v2 alone handled the central contradiction reasonably well: it had to hear voices near the noise floor without inventing a conversation where no voice existed.
A recording at the edge of audibility
The preserved seven-minute sample was mono, 48 kHz, 16-bit audio. Its average level was −52.3 dBFS. RMS troughs reached −63.5 dBFS, while the noise floor was about −70.3 dBFS. Speech sometimes stood only a few decibels above the background.
That is poor source material for a normal recording and an effective trap for a model. A generative recognizer may treat noise as the start of a likely sentence and continue it. A cautious recognizer leaves the passage blank, but may discard a real quiet reply with it.
We selected nine 20-second control windows. Around second 200 was a question about shoe covers. Seconds 390 to 410 contained a discussion of documents and consent. Around second 520, a surname, first name, and date of birth were spoken. Windows near seconds 290 and 490 were nearly empty and tested invention.
There was no manually verified transcript of every word, so we did not manufacture a precise error rate. We checked whether real quiet speech survived, whether known facts were recognized, whether text appeared in silence, and whether timestamps remained monotonic.
DimaTorzok, “To be continued,” subtitle-editor credits, dozens of “thank you” phrases, descriptions of nonexistent music, and loops of the same sentence were treated as evidence that a model had lost contact with the audio.
We began by testing Whisper against itself
The comparison started with official Whisper and its accelerated implementation, faster-whisper. Large-v3 was the obvious first candidate: it is newer, trained on more data, and often beats large-v2 in broad benchmarks. Its advantage vanished on this recording.
A standard large-v3 run produced 445 segments with a high probability of no speech. The transcript contained 70 instances of “thank you,” 13 of “To be continued,” and eight Dima variants. WhisperX voice detection removed some empty windows, but DimaTorzok remained. Forced alignment merely attached the invented phrase to noise and gave it a timestamp.
Large-v3-turbo finished faster but still printed “To be continued” and a subtitle-editor credit. Large-v2 was calmer: on the full main file it produced none of those three artifacts and returned 1,041 segments containing 6,348 words. Its main failure was around minute 38, where one phrase repeated about ten times over a −60 dB background.
We also ran official PyTorch large-v2 with checksum-verified weights. Seven minutes took 61.9 seconds with anti-loop settings and 104.4 seconds with defaults, peaking at 8.8 GB of GPU memory. The first mode stopped the final speech at 6:25 and lost the name and date. Defaults ran to 6:59 but invented “taking a shower” twice and also missed the facts. The original implementation was not more accurate than the accelerated one.
Numeric precision changed the transcript
We then held the model constant and changed only how its numbers were represented. “The same large-v2” turned out to describe materially different behavior.
| large-v2 mode | What happened over seven minutes | Decision |
|---|---|---|
| FP16 | Repeated “I do not know” eight times and changed 1995 to 1992 | Too many loops |
| INT8–FP16 | Invented “ominous music” and a door slam; lost the name and date | Quantization hurt |
| BF16 | No Dima, loops, or sound descriptions; correctly recovered 1995 | Best balance |
BF16 finished in 18.9 seconds. It captured fewer nearly inaudible words than FP16, but did not fill the gaps with repetition and preserved the control date. Here, a slightly longer transcript was worse because the additional words were not in the recording.
Runtime version mattered too. CTranslate2 4.6.1 lost the date and repeated “I do not know.” The documented upgrade to 4.8.1 reproduced the clean control result: 43 segments, 236 words, the correct 1995 date, and none of the marked artifacts.
New models faced the same evidence
After Whisper, every model first received the same windows containing silence, shoe covers, documents, the surname, and the date. Only models that made sense there advanced to the longer passage.
| Model | What it did well | Where it failed |
|---|---|---|
| Qwen3-ASR 1.7B | Official Russian mode and separate word aligner | Returned only 369 characters over seven minutes; omitted long passages and spoke in silence |
| Qwen3-ASR 0.6B | Left several silent windows empty in automatic mode | Misheard shoe covers and changed 1995 to 1919; long input exhausted GPU memory |
| NVIDIA Canary 1B v2 | Russian support and word timestamps | Looped one phrase on the long clip and damaged names |
| Microsoft VibeVoice-ASR 9B | Supports 51 languages, long recordings, and native speaker separation | Does not meet the 16 GB limit: its weights occupy about 17.3 GB, so speed with part of the model in system memory was not compared |
| GLM-ASR Nano | Often kept silence empty | Lost real speech and looped a corrupted surname |
| OmniASR CTC 1B and 3B | Fast, without long loops; 3B heard more conversation | Russian text was badly damaged and no ready word timestamps were returned |
| OmniASR LLM 1B and 3B | Accepted longer audio | Invented loops over weak background; 3B looped more than 1B |
| MOSS Transcribe Diarize 0.9B | Got the person and date right in one short window and found two speakers | Compressed quiet passages over seven minutes and returned one impossible timestamp |
| NVIDIA Nemotron 3.5 Streaming | Fast streaming, clean silence, correct shoe-cover phrase | Lost the surname, first name, and much quiet speech |
| Dolphin small 0.4B | Very fast with word times | Discarded most quiet speech and lost the name and date |
| Mistral Voxtral Realtime 4B | Clean silence and one exact control phrase | Returned empty text for consent, the name, and the date; no word timestamps |
| ESPnet OWSM-CTC v4 1B | No loops over seven minutes; finished in about 25 seconds | Returned only 39 words and omitted almost all quiet speech |
The most interesting challenger was MOSS-Transcribe-Diarize. In short clips it correctly heard the shoe-cover phrase, recovered the surname, name, and date, and separated two speakers. Over seven minutes it shortened quiet passages, degraded the key facts, and returned one timestamp whose end preceded its start. A strong 20-second result did not survive long-form audio.
A similar split appeared with Voxtral Realtime. It passed clean silence and transcribed one control sentence exactly. Three other windows containing real speech were blank. That caution can help a live captioner; in an archival conversation it removes evidence.
Three families of failure
The models divided into three broad groups. Generative systems such as Whisper and OmniASR’s language-model variants attempted the quietest speech but sometimes continued after the sound ended. That produced loops, DimaTorzok, and nonexistent subtitle credits.
Non-autoregressive systems such as OWSM-CTC rarely wrote long inventions. Their error was the opposite: silence. OWSM kept only 39 words from seven minutes. The page looked clean until it was compared with the recording.
Streaming Nemotron and Voxtral were fast and stable on clear signal, but had to decide without much future context. On extremely quiet archival audio, a cautious streaming recognizer chose an empty result more often.
Model size did not guarantee improvement. OmniASR 3B heard more than its 1B version but looped more severely. VibeVoice 9B weights occupy about 17.3 GB, so they could not fit on our GPU even before working memory was allocated. The official automatic placement moved part of the model to system memory. Its 2.5-minute result on a 20-second clip is therefore not a fair measure of VibeVoice speed on suitable hardware; it was excluded only because it cannot satisfy the 16 GB GPU-only requirement.
Voice detection was too good at deleting
The obvious defense against hallucinations was voice activity detection: separate speech from pauses before transcription. Silero removed DimaTorzok from one full file, but reduced the transcript from 3,524 words to 512. It deleted 3,012 real words along with one invention.
FireRedVAD correctly left two control windows empty. In the crucial window around second 520, however, it found no speech at all and would have removed the surname, first name, and date of birth.
Research confirms that speech-recognition hallucinations cluster around silence and degraded signals. Here, real speech also clustered near silence. A stricter threshold therefore exchanged invented words for missing ones. Voice detection is disabled in the final profile.
Speaker separation is a different question
Diarization asks who spoke when; recognition asks which words were spoken. If Whisper invents a sentence during a pause, a “Speaker 2” label does not make it real. If Whisper misses a whisper, diarization cannot recover the words.
Pyannote Community-1 detected five, six, four, five, four, and three speakers across the six files. Words were assigned only by maximum temporal overlap. Between 0.4 and 6.6 percent had no supported speaker interval and remained honestly labeled “Speaker unknown,” rather than being pushed to the nearest person.
WhisperX Russian alignment improved both MP4 files, reducing unknown words to zero. It worsened quiet WAV files; in one, unaligned words rose from 3.5 to 5.2 percent and false speaker switches increased. Alignment is therefore used for video but rejected for WAV.
The six complete recordings decided the result
Short windows eliminated unsuitable models quickly, but the winner was selected only after complete runs. Four WAV and two MP4 files were processed without compression or splitting, producing 2,184 segments and 22,370 words.
| Model and search | Words | “Thanks” | DimaTorzok | “To be continued” | Adjacent repeats |
|---|---|---|---|---|---|
| large-v2, width 5, temperature fallback | 22,359 | 22 | 1 | 0 | 17 |
| large-v2, width 5, temperature 0 | 25,575 | 69 | 1 | 0 | 69 |
| large-v2, width 1, temperature 0 | 25,421 | 163 | 0 | 1 | 50 |
| large-v3, width 5, temperature fallback | 17,608 | 131 | 32 | 31 | 71 |
| large-v3, width 5, temperature 0 | 17,377 | 134 | 29 | 32 | 77 |
| large-v3, width 1, temperature 0 | 17,707 | 141 | 29 | 30 | 82 |
Word count alone did not measure completeness because a zero-temperature run could inflate it through repetition. Large-v2 with search width 5 and the standard temperature fallback did not produce the longest text, but repeated fewer neighboring phrases and created almost none of the known inventions.
Large-v3 occasionally phrased short, clean MP4 passages better. It lost over the long WAV files: useful text fell, DimaTorzok appeared 32 times instead of once, and “To be continued” appeared 31 times instead of zero. Temperature and search width did not close the gap.
The system around the model also needed repair
Two roughly 650 MB files initially failed because of our synchronous upload route, while MP4 was mistakenly missing from the allowed formats. Neither was a Whisper limit. Uploads moved to an asynchronous queue with a 2 GB ceiling, and PyAV now reads MP4 audio directly. Both large files finished without compression or transcoding.
The final profile is explicit: faster-whisper 1.2.1, large-v2, BF16, CTranslate2 4.8.1, CUDA, search width 5, standard temperature fallback, word timestamps, previous-text conditioning disabled, and a two-second hallucination-silence threshold. Batch processing and preliminary voice detection are off. After the fixes, 34 API tests passed and one was skipped.
Why some models were not downloaded
Documentation excluded several candidates before weights were loaded. Fun-ASR-MLT-Nano, Cohere Transcribe, Xiaomi MiMo-ASR, ARK-ASR, IBM Granite Speech, Phi-4 Multimodal, and several Kyutai models did not claim Russian in the required mode. Parakeet TDT returned some Russian text, but its official card supports English only.
Meta MMS and SeamlessM4T knew Russian but their licenses did not allow the required commercial use and they lacked ready word timestamps. ElevenLabs, AssemblyAI, Speechmatics, and Azure were cloud services rather than local weights. Seed-ASR published research without a suitable production checkpoint.
We also deliberately excluded a Russian-specialized winner. GigaAM v3 beat many universal models on several clips, but the requirement was one multilingual model for future recordings. If the job is Russian-only, the finalist list may change.
The best open model for a 16 GB GPU
The experiment found faster-whisper large-v2 in BF16 to be the best open, general-purpose model for local transcription on a 16 GB GPU. It passed the short control clips, a continuous seven-minute passage, and the complete run of six recordings totaling 5 hours 29 minutes.
On long, quiet Russian speech, with required word timestamps and no homemade text cleanup, large-v2 produced the most accurate and stable result among the models tested. It misses some speech at the noise floor. Those omissions were less damaging than large-v3’s confident inventions and less extensive than the silence returned by streaming and non-autoregressive systems.
One DimaTorzok line remained. It was removed not by a word blacklist but because that exact interval had 86 seconds without recognized speech, a high silence probability, zero-duration words, and no voice in an independent model. One “Music” label was rejected by the same evidentiary rule.
A future challenger will have to follow the same route: nine control windows, seven continuous minutes, all six originals, artifact counts, and manual review after long silence. Until then, a version number is a promise. On these recordings, the older Whisper was not the newest system; it was the most cautious one that could still hear.