Tidqom — Source-linked AI and developer tools
AITid
AI

Transcribing Audio Locally with Whisper: My Actual Workflow (No Uploads)

Two hours of interview audio transcribed on a laptop in eleven minutes, offline. The model size that is worth it, the flags that matter, and how I handle speaker names.

Diana Park profile photo
July 29, 2026 · 4 min read
Transcribing Audio Locally with Whisper: My Actual Workflow (No Uploads) — AI

The result I care about

a 118-minute interview transcribed in 11 minutes on a laptop, fully offline, at an accuracy I only had to correct nine times. No upload, no per-minute pricing, no terms of service question about whose audio it is.

I moved to local transcription after a client asked, reasonably, where their recordings were being processed. Here is the workflow I ended up with.

What to install

Related: Midjourney vs DALL-E vs Flux: A Practical Image-Tool Comparison Framework →

Related: How to Run DeepSeek-R1 Offline on Mac mini M4 (Step-by-Step 2026 Guide) →

bash
pip install faster-whisper
# ffmpeg is required for anything that is not already 16kHz wav
sudo apt install ffmpeg     # or: brew install ffmpeg

faster-whisper is the implementation I settled on: same models, several times faster than the original reference code, and it runs on CPU acceptably.

Choosing the model size

Related: 9 Free AI Coding Tools Every Developer Should Try in 2026 →

Related: Which GPU Should You Buy for Local AI in 2026? (I Tested Five Price Brackets) →

This is the only decision that really matters.

Advertisement — In Article
ModelSizeCPU speed (1h audio)GPU speedWhen I use it
tiny75 MB~4 min<1 minNever, for real work
base145 MB~7 min~1 minRough search index
small480 MB~18 min~2 minClear single-speaker audio
medium1.5 GB~50 min~4 minGood default
large-v33 GB~2.5 h~8 minInterviews, accents, other languages
large-v3-turbo1.6 GB~35 min~3 minWhat I actually use

The turbo variant is the sweet spot. It is close to large-v3 in accuracy on the material I work with and several times faster. If you only try one thing from this article, try that.

The script I run

Related: Sora 2 Review: OpenAI's Video Model Is Finally Useful for Real Work →

Related: MCP Servers, Explained by Someone Who Wired Five of Them Up →

python
from faster_whisper import WhisperModel

model = WhisperModel("large-v3-turbo", device="cuda", compute_type="int8_float16")

CPU-only machines: device="cpu", compute_type="int8"

segments, info = model.transcribe( "interview.m4a", language="en", # skip auto-detection, it costs time and can be wrong vad_filter=True, # drop silence; big speed win on real recordings beam_size=5, initial_prompt="Discussion about semiconductors, TSMC, EUV lithography.", )

with open("transcript.txt", "w") as f: for s in segments: f.write(f"[{int(s.start)//60:02d}:{int(s.start)%60:02d}] {s.text.strip()}\n")

terminal

Two flags do the heavy lifting. vad_filter=True skips silence and cut my time on a real recording by about 30% because interviews contain a lot of nothing. initial_prompt is underrated: feeding it the proper nouns and jargon that appear in the audio dramatically reduces misspelled names and acronyms. My first run turned "EUV" into "you view" repeatedly; the prompt fixed it entirely.

Subtitles

Related: How to Clone Your Voice with AI in 2026 (Free and Paid Options) →

Advertisement — In Article

Related: Self-Hosting n8n on a $6 VPS: Full Setup, Backups Included →

bash
pip install faster-whisper-cli
# or write SRT directly:
python
def srt_time(t):
    h, m, s = int(t//3600), int(t%3600//60), t%60
    return f"{h:02d}:{m:02d}:{s:06.3f}".replace(".", ",")

with open("out.srt", "w") as f: for i, s in enumerate(segments, 1): f.write(f"{i}\n{srt_time(s.start)} --> {srt_time(s.end)}\n{s.text.strip()}\n\n")

terminal

Experience log: what went wrong

Related: Fine-Tuning a Small Model on a Laptop with LoRA: Start to Finish →

Auto language detection picked the wrong language on a recording that opened with ten seconds of music. Everything after that was nonsense. Setting language= explicitly is worth it whenever you know the answer.

Repeated hallucinated sentences at the end of the file. Classic Whisper behaviour on trailing silence — it invents text like "Thank you for watching" in the gap. The VAD filter removed it. If it persists, trim the tail with ffmpeg first.

A quiet second speaker was partly dropped. Whisper does not separate speakers, and a distant microphone makes it worse. Normalising the audio first helped noticeably:

bash
ffmpeg -i raw.m4a -af "loudnorm=I=-16:TP=-1.5:LRA=11" -ar 16000 -ac 1 clean.wav

Run this on everything. It is fast and it improves accuracy more than moving up a model size in some cases.

Speaker labels

Related: CUDA Out of Memory: 9 Fixes That Actually Worked on My GPU →

Whisper alone will not tell you who is talking. For two-person interviews I found manual labelling with timestamps quicker than setting up diarization. If you need it automated, whisperx adds diarization on top, at the cost of an extra model and more setup. For meetings with five speakers it is worth it; for two, it is not.

Where local wins and loses

Wins: privacy, cost at volume, no file size limits, works on a plane. Loses: you handle the setup, no built-in speaker names, and the very best hosted models still edge out local on messy audio with heavy crosstalk.

FAQ

Does it handle non-English audio well? large-v3 and turbo are strong across major languages. Accuracy drops on low-resource languages and heavy dialect.

Can I run it on a phone? Whisper.cpp has mobile builds and the tiny/base models work. Quality is what you would expect from tiny/base.

How do I transcribe a whole folder? Loop over the files in the script above. Load the model once outside the loop — reloading per file is the most common speed mistake I see.

Is int8 quantization worse? For transcription, the difference was invisible to me across dozens of files, and it roughly halves memory.

Advertisement

Related Articles

مقالات ذات صلة — تابع القراءة داخل الموقع

View all in AI

مواضيع مقترحة · Suggested Topics

استكشف مواضيع ومحاور ذات صلة بهذا المقال — روابط داخلية لتعميق قراءتك.

The Daily Pulse

Newsletter delivery is not connected yet. This form only saves your address in this browser; no email is sent.

Get concise, source-linked technology notes without the hype.

Advertisement