Skip to main content

[PoC Proposal] Development of an Ultra-High-Speed, Ultra-High-Quality Multilingual AI Subtitling System

1. Overview

1.1 Objective

A Proof of Concept for comparing STT (Speech-to-Text) systems to automatically generate multilingual subtitles for video content.

Key Question: For Korean video content across various domains, which open-source STT system is best suited for subtitle production?

Systems Under Comparison

SystemModelRemarks
WhisperSystran/faster-whisper-large-v3CTranslate2 conversion of OpenAI Whisper large-v3 (faster-whisper backend)
QwenQwen3-ASR-1.7B + Qwen3-ForcedAligner-0.6BAlibaba, ASR + separate word timestamps

Initially, Gemini STT was also included in the comparison, but it was deemed unsuitable for subtitling due to an issue where timestamp accuracy drifted by minutes and was subsequently excluded. Gemini is used solely in the role of a judge.

Evaluation Method

  • Gemini 3.5 Flash compares the audio with the STT output segments from each system and assigns a score between -3 and 3 points
  • Aggregates score distributions by content/system + subtitle usability rate (≥0 points)
  • Derives system recommendations by domain

Deliverables

  • Content × System Comparison Report (output/report.csv )
  • Configuration of hallucination/misrecognition handling gates (5 types on the Whisper side)
  • Recommended architecture for the production phase

1.2 Scope

Included (Scope of this POC)

  • Mono WAV input → Subtitle segments (text + time interval + language code)
  • Noise removal (DeepFilterNet v3, atten_lim_db = -30)
  • Speech segment detection (Silero VAD)
  • Multilingual automatic detection (Whisper LID)
  • Multilingual ASR (Whisper / Qwen, 28 / 11 languages)
  • Hallucination handling gate (see Chapter 5 for details)
  • Gemini Judge evaluation + score aggregation report

Not Included (Production-Stage Tasks)

ItemReason / Future Action
Video → WAV ExtractionAssumed to be handled via external preprocessing. Outside the scope of this POC
Speaker Segmentation (diarize)Can be integrated separately via PyAnnote (common audio → single call followed by segment matching). Currently speaker = None
SRT / VTT Output FormatOnly internal transcript_md format. Conversion is simple
Gemini Correction StageEvaluation only. Correction follows production diagram (see Chapter 8)
FastAPI / HTTP APIBatch processing only (direct execution of main.py / main_qwen.py)
Job queue (asyncio.Queue, etc.)Single-process sequential processing
Concurrent requests / Multiple clientsResolved via dynamic batching in the production diagram (Chapter 8)

1.3 Evaluation Content Set

We used six types of Korean video content (one title per genre). Pre-processed 16kHz mono WAV files, duration 30 minutes to 2 hours, no ground truth labels (using the match rate proxy method in Section 2.3).

Although Korean is the primary language, the presence of foreign languages and background noise varies by genre.

CategoryBroadcastDurationCharacteristicsURL
NewsKBS 9 News48:30Fast speech, loud BGM/audience cheering, longest contenthttps://www.youtube.com/watch?v=rX1P-jOoNmM
DocumentarySuperfish Part 158:40Calm narration, some foreign-language interviewshttps://www.youtube.com/watch?v=iNbWqC1iqKw
DramaKBS Winter Sonata1:04:52Standard dialogue, background musichttps://www.youtube.com/watch?v=irVKEhb9g8M
Historical DramaTaejo Wang Geon54:10Multiple speakers, subtitles, sound effects, rapid tone changeshttps://www.youtube.com/watch?v=nmlE2iPWLGM
VarietyBusiness Trip 15 Days X Starship National Sports Festival Full Version1:00:06Formal language/archaic expressions, high frequency of Sino-Korean termshttps://www.youtube.com/watch?v=6wJGpi1nkCg
Sports2009 KBO League Korean Series Game 71:55:22Clear pronunciation, mixed with foreign-language interviews/reportshttps://www.youtube.com/watch?v=fP1QEs1Uj5U

Summary of Challenges by Content Type

  • baseball — Highest risk of hallucinations (BGM/crowd cheers), frequent short interjections
  • docu / news — Foreign-language interviews → Risk of misidentifying LID in short utterances
  • hist_drama — Sino-Korean terms/formal language → Models tend to hallucinate Chinese/Japanese tokens
  • drama / entertain — Multiple speakers + BGM → Risk of false positives in normal speech

Project Overview:

Validation of a subtitling pipeline tailored to complex media audio environments such as broadcasts, movies, variety shows, and sports

Validation Environment:

Base accelerated environment based on a single NVIDIA RTX 4090 (24GB)


2. Pipeline Architecture

2.1 Overall Flow

Original WAV (mono, 16 kHz)


[1] denoise — DeepFilterNet v3
│ ↳ output/1_denoise/<stem>.wav (Cache, shared by both systems)

[2] Transcribe — By system (Whisper / Qwen)
│ ↳ output/{system}/2_transcribe/<stem>.md

[3] evaluate — Gemini judge
│ ↳ output/{system}/evaluate/<stem>.csv

[4] Report — System Comparison Summary
↳ output/report.csv

Entry point:

StepCommand
transcribe — Whisper.venv/bin/python main.py
transcribe — Qwen.venv-qwen/bin/python main_qwen.py
evaluate.venv/bin/python evaluate.py [whisper|qwen|all]
report.venv/bin/python report.py

2.2 Directory / Output Structure

output/
├── 1_denoise/<stem>.wav # DF results (shared by both, cached)
├── whisper/
│ ├── 2_transcribe/<stem>.md # STT results
│ ├── evaluate/<stem>.csv # Gemini scoring
│ └── timings.csv # duration / transcribe time / RTF
├── qwen/
│ └── (same structure)
└── report.csv # Comprehensive Comparison of Systems and Content

transcribe MD — 1 line = 1 segment, custom format:

[00:02:57.1~00:02:58.4|S???|ko] 넌 가가멜이 무섭지도 않아?

S??? is the speaker (currently an unintegrated placeholder). lang is ISO 639-1.


3. Core Components

Composed of 5 components. All use GPU (cuda:0). Warm-up runs once at system startup.

ComponentRoleLibrary / Model
DenoiseBGM/noise removalDeepFilterNet v3
VADSpeech Segment DetectionSilero VAD
LIDAutomatic Language DetectionWhisper detect_language (large-v3)
ASR (Whisper)Korean/Multilingual Transcriptionfaster-whisper large-v3 (Systran)
ASR (Qwen)Korean/Multilingual Transcription + Word TimestampQwen3-ASR-1.7B + ForcedAligner-0.6B
JudgeAccuracy Scoring (-3 to 3)Gemini 3.5 Flash

3.1 Denoise — DeepFilterNet v3

ItemValue
ModelDeepFilterNet v3 (built-in in pip package)
Input/Output Sample RateInput: Any → Output: 48 kHz int16
atten_lim_db-30 (Intensity reduction — Preserves singing/general speech)
Chunk processingDivided into 30-second segments (to avoid VRAM OOM when processing long audio spectrograms)
Cacheoutput/1_denoise/<stem>.wav — Shared between both systems; reused when re-executing the same stem

Why atten_lim_db = -30?
At full power (None ), singing or soft speech is cut off as noise, causing ASR omissions. Limiting intensity to -30dB = ↑ speech preservation.


3.2 VAD — Silero VAD

ItemValue
ModelSilero VAD (snakers4/silero-vad , torch.hub)
Inputraw audio (Method 2 — to avoid the impact of denoising variations)
OutputList of utterance segments [(start_s, end_s), ...]
Environment SharingSame venv for both Whisper and Qwen

Role — The first line of defense against hallucination. Simply preventing silence/BGM segments from being sent to ASR significantly reduces hallucinations (industry standard practice).


3.3 LID — Whisper detect_language

ItemValue
ModelWhisper large-v3 (multilingual, mobiuslabsgmbh/faster-whisper-large-v3-turbo )
Inputraw audio chunk (speech units segmented by VAD)
Output(lang_code, prob, all_probs) — Top language + probability + probability dictionary for all languages
Invocation frequencyOnce per utterance chunk (not the entire audio)

POC Accuracy Comparison

LID Methodrawdenoised
Whisper detect_language95.2%93.4%
VoxLingua10788.9%87.0%

Adopted Whisper LID. Requires ~1.5GB of additional VRAM, but since it only calls detect_language (encoder forward + decoder 1 step), it is lightweight.

Qwen also uses the same LID — more accurate than Voxlingua107.


3.4 ASR

3.4.1 Whisper — faster-whisper large-v3

ItemValue
ModelSystran/faster-whisper-large-v3 (CT2 conversion of OpenAI Whisper large-v3)
Backendfaster-whisper (CTranslate2)
Supported languagesOnly Tier 1+2+3 (28) out of 99 allowed — others are skipped
Inputdenoised audio chunk
Invocation optionsbeam_size=5 , condition_on_previous_text=False , repetition_penalty=1.2 , no_repeat_ngram_size=3
Hallucination post-processing5 types of gates (see Figure 5)

Use non-turbo (32-layer) instead of turbo (4-layer decoder). Accuracy ↑, speed 2–3x ↓. Prioritize accuracy at the POC stage.

3.4.2 Qwen Side — Qwen3-ASR-1.7B + ForcedAligner-0.6B

ItemValue
ASR ModelQwen3-ASR-1.7B
Timestamp ModelQwen3-ForcedAligner-0.6B — word-level timestamp separation
Backendqwen-asr (transformers 4.57, torch 2.8)
Supported LangsALIGNER_LANGS (11) — ko/en/ja/zh/yue/it/es/fr/de/pt/ru
Inputdenoised audio chunk
LIDWhisper detect_language (does not use custom LID — more accurate than Voxlingua107 at 88.9%)
Short utterance handlingmain_lang = "ko" Hardcoded + short utterance adjacent lang override

Separated into venv to avoid dependency conflicts between Whisper and Qwen (.venv / .venv-qwen ).


3.5 Judge — Gemini 3.5 Flash

ItemValue
Modelgemini-3.5-flash
ReferenceDirect audio (system-independent)
Scoring System-3 to 3 (based on correctability — see Chapter 6)
Audio ProcessingSingle upload + caching (TTL 1 hour, 75% cost reduction)
Chunk Size20 segments per call (to avoid response token limits)
Retry1 retry if response segment count mismatches (to compensate for missing end of Flash response)
Response schemalist[ScoreItem] (TypedDict) — JSON schema enforced
Cost estimate6 content items × 2 systems ≈ $1–2

Why use Gemini as the judge?

  • Ensuring objectivity in system comparisons — The same evaluator (Gemini) listens to the same audio and scores the STT results from both systems
  • Meaning-based scoring is closer to subtitle usability than text matching (e.g., WER)
  • Audio is the ground truth — Evaluation is possible even if segment segmentation differs across STT systems

4. System Design + Hallucination Handling

The key trial-and-error in the POC was mostly on the Whisper side regarding hallucination handling. The Qwen side focused mainly on language correction patterns.

4.1 Whisper Side

Model / Basic Settings

ItemValue
ModelSystran/faster-whisper-large-v3 (single multilingual)
Supported language gateALLOWED_LANGS — Tier 1+2+3 (28 languages), others skipped
Korean fine-tune branchRemoved — Confirmed low accuracy in the documentation domain
Decode optionsbeam_size=5 , condition_on_previous_text=False , repetition_penalty=1.2 , no_repeat_ngram_size=3

Supported Languages (Tier Classification)

Since Whisper is trained on different amounts of data for each language, lower tiers exhibit more severe hallucinations. At Tier 4, translation is nearly impossible, so this tier should be skipped

  • Tier-1 (Word Error Rate < 5%)

    • English, Spanish, Italian, French, German, Portuguese
  • Tier-2 (WER <5-8%)

    • Korean, Japanese, Chinese, Russian, Polish, Dutch, Turkish, Catalan, Ukrainian
  • Tier-3 (WER < 10–20%)

    • Arabic (significant variation by dialect), Hebrew, Hindi, Indonesian, Malay, Vietnamese (weak tones), Greek, Hungarian, Czech, Finnish, Swedish, Danish, Norwegian
  • Tier-4 (DROP)

    • Thai, Lao, Khmer, Luxembourgish, Maltese, etc.

Three Hallucinations Patterns Identified

Gate 1 — VAD pre-filter
AbbreviationVAD = Voice Activity Detection
ToolSilero VAD (snakers4/silero-vad, torch.hub)
Inputraw audio (full)
OutputSpeech segment [(start_s, end_s), ...]
ActionNon-speech segments (silence/BGM/sound effects) are not sent to ASR

Why is this effective? — The primary cause of Whisper hallucinations is generating subtitle patterns learned from silence/BGM segments (ご視聴ありがとうございました, Thanks for watching, etc.). This problem disappears entirely when only speech segments are input. Industry-standard tools like WhisperX and stable-ts follow the same pattern.

Gate 2 — MIN_LOGPROB (-1.0)

Definitionavg_logprob = Average log probability of each transcribed token (per segment)
MeaningThe closer to 0, the more confident the model; the further into negative values, the less confident
Threshold< -1.0 → segment drop
Cases detectedHallucination catch-all (final line of defense against hallucinations not caught by gates 1/3/4)

Meaning of threshold -1.0 — Converted to log probability:

avg_logprobAverage token probabilityInterpretation
-0.374%Normal utterance (certain)
-0.561%Normal utterance
-0.750%Guesswork
-1.037%Hallucination region ← Threshold
-1.522%Almost certain hallucination
  • Less than 1.0 = Average probability per token below 37% = Model generates tokens in an uncertain state = Risk of hallucination.

Unlike the deprecated gate no_speech_prob, avg_logprob is less sensitive to BGM/denoise residuals → fewer false positives.

Gate 3 — LID_TRUST_PROB (0.5)

AbbreviationLID = Language Identification (automatic language detection)
FunctionWhisper detect_language() → (lang_code, prob, all_probs) Return
Thresholdprob < 0.5 + If the detected language MAIN_LANG (ko) is not
Actionlang_code to MAIN_LANG (ko) . Subsequently, transcribe as a single ko

Why 0.5? — Cases like LID probability 0.23 = "sounds similar to ko/de/ja/zh" = LID itself is unreliable. Assuming Korean content → assuming ko is natural.

Example — Actual baseball.wav log

[01:18:43.3~01:18:44.4] LID de=0.23 → pass
LID de=0.23 < 0.5 → ko forced ← Gate 3 activated

If we had used the original LID result as-is, it would have transcribed as German → hallucination. Forced normalization to ko.


Gate 4 — dual transcribe + MIN_DUAL_LOGPROB (-0.6)

ConditionsSpeech length < 3초 + LID is non-ko (after passing Gate 3)
Action 1Transcribe both ko and LID lang twice → respectively avg_logprob Calculation
Action 2max(lp_ko, lp_lid) Adopt the larger (more certain) lang
Action 3 (drop condition)Both lp < -0.6 → Both suspected hallucinations → drop
Cases where it is capturedja/zh short hallucinations (1–2 second LID misclassification cases)

Why -0.6? — Log probability around 50%. If both are below 50%, the model is unsure of either language = higher probability that the short audio is garbled or noise.

Example — Actual baseball.wav log

dual [00:15:26.8~00:15:27.9|1.1s] lp(ko)=-0.89, lp(zh)=-0.71 → 양쪽 약함, drop

max(-0.71, -0.89) = -0.71 < -0.6 → drop. A case where, if the original LID had been zh, it would have resulted in a hallucination like 一观测者来交换.


Gate 5 — Korean character ratio gate (30%)

Conditionschosen_lang == "ko" + Korean character ratio in the output text < 30%
BehaviorSegment drop
Cases where it triggersko Forced transcription resulted in Japanese tokens (Whisper limitation)

Why 30%? — Normal Korean speech typically has a Korean character ratio of 70%+ (even when mixed with numbers or English abbreviations). Less than 30% = effectively hallucinated Japanese/Kanji tokens.

Calculating Hangul Ratio — The ratio of Hangul syllables (ga-hit) among characters and numbers, excluding spaces and punctuation.

textHangul RatioResult
生涯ゲスト0%drop
ちょうちょだが。0%drop
투수는 이승호, 오늘 투런홈런100%pass
FA컵 결승33% (FA=2, Cup Final=3)pass (3% margin)
MVP 수상40%pass

The hallucinations caught by this gate = the inherent limitations of the Whisper model itself. The closest method to prevent this using external code (drop only, cannot be corrected).

Drop Policy (Cases that cannot be salvaged)

Case — The audio is in Korean, but Whisper outputs Japanese tokens even in Korean mode
Principle — "Better to drop than to have incorrect subtitles" → drop


Final Flow

audio_raw + audio_denoised

▼ 16kHz resample

[VAD Gate] raw audio → speech segments [(start, end), ...]

▼ For each speech chunk
[LID] Whisper.detect_language(raw chunk) → (lang, prob)

▼ ALLOWED_LANGS gate (Skip Tier 1, 2, and 3)

[LID_TRUST_PROB] prob < 0.5 + non-ko → ko forced


[transcribe branch]
├─ Short (<3s) + non-ko → dual (ko + lid)
│ └─ Adopted max LP. Both sides < -0.6 → drop
└─ Others → single (with lid)

▼ Result: segment loop
[Post-Processing Gate]
├─ avg_logprob < -1.0 → drop
├─ duration < 0.2s → drop
└─ chosen=ko + Korean < 30% → drop


Save segment (transcribe MD)

4.2 Qwen Side

Model / Default Settings

ItemValue
ASR ModelQwen3-ASR-1.7B
Timestamp ModelQwen3-ForcedAligner-0.6B
Supported LanguagesALIGNER_LANGS (11) — ko/en/ja/zh/yue/it/es/fr/de/pt/ru
LIDWhisper LID adopted  (POC 95.2% vs Voxlingua107 88.9%)
Batchmax_inference_batch_size=8 (4090 safety margin)

Supported Languages

Qwen supports approximately 30 languages, but Qwen3-ForcedAligner, can only distinguish 11 languages which supports timestamps

  • Korean, Japanese, Chinese (Mandarin), Cantonese, English, Italian, Spanish, French, German, Portuguese, Russian

main_lang hardcoding + short utterance override

ItemBehavior
MAIN_LANG = "ko"Hardcoded (for consistency with Whisper). Main content in foreign languages can be reverted to majority decision during production
Short utterance (< 3s) overrideIf LID is inaccurate → Use the same language as the preceding/following utterance; otherwise, use MAIN_LANG
ALIGNER_LANGS gateLanguages other than the 11 → skip (timestamp not possible)

Script-based automatic language correction

Post-processing language correction based on character types in transcribed text— Corrects language errors in LID/Qwen.

Detected scriptCorrected language
Hangul (가-힣)ko
Kana (Hiragana/Katakana)ja
Cyrillicru
Hanja only (no Kana/Hangul)zh
Latin only + original Latin langKeep as is
Latin only + original ko/ja/zh/ruen
No script detected (numbers/symbols)Keep original lang

→ Similar concept to Whisper’s “Hangul character ratio gate,” but correction instead of dropping (Qwen does not forcefully handle LID errors as ko; it simply corrects the lang).


5. Evaluation Method

Gemini 3.5 Flash compares the audio (ground truth) with the STT output segments to score them. System-independent (Whisper and Qwen are each evaluated using the same audio).

5.1 Scoring System (-3 to 3, based on correctability)

Rather than simple match/mismatch, the score reflects whether "this segment can be salvaged in a subsequent correction stage (e.g., Gemini Correct)".

ScoreNameDescriptionExample
3OKSame meaning, minor differences (spacing/typos/slight differences in particles)"Aren't you even scared of Gagamel?" Matches correct answer
2Same MeaningSame meaning, different expression (synonyms/word order changes)Correct answer "went" → STT "went"
1Half/FillerHalf the core meaning, or short filler (1-2 characters, harmless)"Uh," "Hmm," "Ah" / 50%+ chance of correction
0CorrectableSentence is incorrect but 20%+ chance of future correctionMisrecognition like "pitcher" → "sister-in-law" — can be restored via context
-1Partially CorrectOnly some words are correct, meaning mostly different (Difficult to correct)
-2HallucinationGenerates text that looks like subtitles but has no corresponding audioSilence + "Thank you for watching" / Arabic subtitle credits
-3Completely DifferentAudio speech exists but is completely unrelated to the textJapanese interview but garbled Korean text

Difference Between -2 and -3

CategoryPresence of Audio SpeechText
-2 Hallucination❌ No speech (silence/BGM)Generates natural sentences resembling subtitles
-3 Completely Different✅ Speech presentText completely different from spoken content

5.2 Foreign Language +1 Adjustment

For segments in languages other than Korean (lang ≠ ko), add +1 point to the score (max 3 points).

Before adjustmentAfter adjustment (Foreign Language)
2 points3 points
1 point2 points
0 points1 point
-1 point0 points
-2 points-1 point
-3 points-2 points

Reason

  • The ASR system’s accuracy for foreign languages is lower than for Korean — our system’s foreign language processing (assuming Korean content) is best-effort
  • English interviews may have some missing words or minor awkwardness → but viewers can still understand via subtitles
  • Applying the same standards used for Korean subtitles to foreign languages would be too harsh

Example

audio: "I go to school"
STT: "I go to school" ← Added a minor word
Original score: 2 (Same meaning, different wording)
After adjustment: 3 (Foreign language +1)

5.3 Subtitle Usability Rate (≥0 points)

Criterion — If a segment score is 0 or higher, "usable as subtitles"

ScoreSubtitle Processing (during production)
3, 2✅ Use as-is
1✅ Refine using Gemini correction
0✅ Attempt to correct with Gemini (20%+ probability)
-1, -2, -3❌ Drop (better to omit than to use incorrect subtitles)

Quantitative Metrics

자막 사용 가능률 = (점수 ≥ 0 인 segment 수) / 전체 segment 수 × 100%

POC results (see Chapter 7) show that all system × content combinations achieved 90%+. = This suggests that our hallucination gate effectively preemptively blocked cases rated -1 to -3.

Why a 0-point threshold?

  • Accepted subtitle candidates up to "incorrect but correctable (20%+ probability)"
  • During production, attempted to actually retain segments with 20%+ probability at the Gemini correct stage
  • For scores below 0, correction cost > value → drop

6. Results

Execution source: https://github.com/SceneMakerAI/poc-stt-bench

6.1 Execution Commands

cd /usr/service/source/scenemaker/poc/poc-stt-bench

# (If necessary) Summarize existing results — Keep the denoise cache
\rm -rf output/whisper/2_transcribe output/whisper/evaluate output/whisper/timings.csv
\rm -rf output/qwen/2_transcribe output/qwen/evaluate output/qwen/timings.csv

# 1. Whisper STT
.venv/bin/python main.py

# 2. Qwen STT (separate venv)
.venv-qwen/bin/python main_qwen.py

# 3. Gemini Judge Evaluation (Whisper + Qwen)
.venv/bin/python evaluate.py all

# 4. Comprehensive Comparison Report
.venv/bin/python report.py

Output by processing stage

StageOutput
(1) Whisperoutput/whisper/2_transcribe/*.md + timings.csv
(2) Qwenoutput/qwen/2_transcribe/*.md + timings.csv
(3) evaluateoutput/{whisper,qwen}/evaluate/*.csv
(4) reportoutput/report.csv

6.2 Comparison of Processing Times

6.2.1 Transcription Times by Content (excluding denoising)

ContentLengthWhisper (RTF)Qwen (RTF)Qwen Speed Comparison
baseball1h 55m345.9s (0.050)309.0s (0.045)1.12× ↑
docu58m118.2s (0.034)54.4s (0.015)2.17× ↑
drama1h 5m88.3s (0.023)49.1s (0.013)1.80× ↑
entertainment1h159.8s (0.044)193.9s (0.054)0.82× (Whisper dominates)
historical_drama54m111.5s (0.034)54.1s (0.017)2.06× ↑
news48m149.5s (0.051)80.5s (0.028)1.86× ↑

6.2.2 Observations

  • Qwen is generally 1.8 to 2.2 times faster — Qwen3-ASR processes chunks in batches (max_inference_batch_size=8 )
  • entertain is the only category where Whisper outperforms — Qwen’s ForcedAligner produces inaccurate word timestamps in content with many sound effects/interjections → estimated increased reprocessing cost
  • Baseball shows similar performance for both systems — Whisper has 1.6 times more segments than Qwen, distributing the processing load (1983 vs. 1250)
  • RTF < 0.06 → Both are more than 20 times faster than real-time  (ample headroom for production throughput)

6.3 Comparison of vRAM Usage

ComponentWhisperQwenNotes
ASR Model3 GB
(Systran/faster-whisper-large-v3, CT2 float16)
3.5 GB
(Qwen3-ASR-1.7B, bfloat16, batch=8)
Timestamp Model— (Included in ASR)1.5 GB
(Qwen3-ForcedAligner-0.6B )
Word-level timestamp
LID Model— (Reuses same instance as ASR)1.5 GB
(large-v3-turbo , float16)
Whisper side uses ASR model to process up to LID
Denoise0.5 GB (DeepFilterNet v3)0.5 GB (DeepFilterNet v3)Common to both
VAD10 MB (Silero VAD)10 MB (Silero VAD)Common to both
Total~3.5 GB~7 GB
GPU Usage (4090 24GB)15%30%

6.4 Comparison of Quality Results

Summary Table

ContentWhisper (avg / % used / -3%)Qwen (avg / % used / -3%)Winner
baseball2.72 / 98.6% / 0.7%2.74 / 99.4% / 0.2%Qwen (slight)
docu2.73 / 97.6% / 1.6%2.41 / 92.3% / 6.0%🏆 Whisper (Significant Difference)
drama2.69 / 98.0% / 1.5%2.69 / 98.5% / 1.2%Tie
entertain2.64 / 97.1% / 1.7%2.55 / 97.3% / 1.3%Whisper (Slight)
historical_drama2.58 / 96.1% / 2.4%2.52 / 96.1% / 1.1%Tied
news2.92 / 99.5% / 0.4%2.85 / 98.7% / 0.8%Whisper (Minor)

Comparison of Segment Counts

ContentWhisperQwenWhisper / Qwen
baseball198312501.59×
docu3714010.93×
drama4023361.20×
entertain11508481.36×
hist_drama4604591.00×
news7314711.55×

6.5 Overall Evaluation

  1. When selecting a single system → Whisper recommended

    • Stable accuracy (superior or on par in 5 out of 6 content categories)

    • Half the VRAM (3.5 GB vs. 7 GB)

    • Production-ready with 5 hallucination gates

    • Clear advantage in risky content like documentaries

  2. Qwen’s Strengths

    • Speed — 1.8–2.2 times faster than Whisper (batch processing) (Note: Whisper also supports some batch processing)

    • Fast-paced content with strong background noise, such as baseball

Decision Matrix

PriorityChoice
Accuracy + SimplicityWhisper alone
Maximum throughput + Good accuracyQwen alone + batch tuning
Minimum cost (single GPU, small model)Consider Whisper Turbo as well (accuracy trade-off)