Transcribing Two Years of Voice Memos With whisper.cpp

Transcribing Two Years of Voice Memos With whisper.cpp

Tutorials local-ai mac productivity self-hosting whisper.cpp

I've had 340-something voice memos sitting on my phone for over two years. Half of them are just "call the plumber back" reminders I forgot to act on, but a good chunk are actual ideas: post drafts, arguments I had with myself on walks, a full ten minutes of me trying to explain a database schema to nobody while driving to pick up my daughter. I've been meaning to get them transcribed since basically forever, and this weekend I finally sat down and did it with whisper.cpp running locally on the Mac Mini in my closet.

I want to be upfront: I'm not doing this because local-first is some kind of moral stance for me. I just don't want 340 personal voice recordings sitting on someone else's transcription API, getting whatever gets done with audio data these days. Maybe nothing happens to it. Probably nothing happens to it. But I'd rather not find out, and running it myself costs me nothing but electricity and a Saturday afternoon.

the actual setup

If you haven't touched whisper.cpp recently, it's come a long way from when it was just a novelty port of OpenAI's Whisper model in C++. Cloning the repo and building it is still dead simple:

git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp
cmake -B build
cmake --build build --config Release

Then you grab a model. I used the medium.en ggml model (about 1.5GB) because my memos are all in English and I wanted something more accurate than the small model without waiting forever. On the base M2 Mac Mini I've had since 2023, a five-minute memo transcribes in something like 40-50 seconds using the Metal backend. Not instant, but I queued up all 340 files overnight with a dumb bash loop and woke up to a folder full of .txt files, which honestly felt like magic even though I know exactly how it works.

The command itself, once it's built, is about as plain as it gets:

./build/bin/whisper-cli -m models/ggml-medium.en.bin -f memo_0182.m4a -otxt

whisper.cpp wants WAV input by default, so I had to convert my m4a files first. ffmpeg handled that in one pass, another loop, another five minutes of my life I'll never get back but whatever, it's automated now so it doesn't matter.

what actually surprised me

The accuracy is genuinely good on clean audio: the ones recorded in a quiet room come out close to perfect, punctuation included. Where it falls apart is anything recorded in the car with the window cracked or while I was walking near traffic. There's one memo from a hike back in March that transcribed the word "ridge" as "fridge" four separate times in the same sentence, which now just makes me laugh every time I scroll past it. I'm not fixing it. It's staying "fridge" forever.

I also didn't expect how much reading through the transcripts would feel like going through old photos. There's a memo from eighteen months ago where I'm clearly annoyed about something at work that I cannot for the life of me remember now, and reading it back I have zero context and honestly zero interest in reconstructing it. Not everything you save is worth keeping just because you saved it. I deleted that one after transcribing it, which felt oddly satisfying — like the point was never the audio file, it was getting the idea out of my head and somewhere searchable.

One thing worth knowing if you try this: the base and small models are fine for anything where you just need the gist, and honestly for most people that's enough. I only went medium because I had disk space to spare and patience for the overnight run. If you're on an older Intel Mac without Metal support, budget for it taking three or four times as long — a coworker tried this on a 2019 MacBook Pro and gave up after one file took almost four minutes.

where the text goes now

I dumped everything into a single markdown file per month and threw it in my Obsidian vault, which is probably not the most sophisticated pipeline in the world but it means I can now actually search "database schema" across two years of rambling and find the memo instead of scrubbing through audio hoping I remember roughly when I recorded it. That alone was worth the Saturday.

If you've got a similar backlog sitting there mocking you, it's a genuinely low-effort project. A few hours of setup, run it while you sleep, and you go from an unsearchable pile of audio to a stack of plain text files that'll outlive whatever app you recorded them in anyway.