A free, fully offline transcriber for your recordings — Spanish, English, and Japanese — with speaker labels and timestamps. Powered by Whisper and pyannote, it runs entirely on your machine. No cloud, no accounts, no per-minute fees.
Drop in a recording and get back clean, speaker-labeled text — without sending a single second of audio to the cloud.
Every step — decoding, transcription, and diarization — runs locally. Your conversations never leave your machine, so sensitive recordings stay yours. No accounts, no telemetry, no per-minute cloud bill.
Transcribe in any of the three — or let Whisper auto-detect the language per file. Japanese comes out as natural, correctly spaced-free text, not forced word splits.
Built-in speaker diarization (pyannote) labels each turn — Speaker 1, Speaker 2, … — so conversations read like a script instead of one undifferentiated block of text.
Every segment is time-coded, so you can jump straight to a moment in the audio — and export subtitles that line up with the recording.
Export a readable txt, subtitle srt/vtt, or the full structured json (segments, words, speakers, confidence) — all rendered from one canonical transcript.
One reusable core, two ways to drive it: a scriptable command-line tool for batch jobs, and a PySide6 window to drop a file, transcribe, and export with a click.
Point it at a directory and let it transcribe every recording overnight. A failed file is reported and skipped — the batch keeps going.
Uses faster-whisper (CTranslate2) with int8 on CPU and float16 on GPU, auto-detected. Pick any model size from tiny to large-v3.
ffmpeg decodes it all — wav, mp3, m4a, flac, ogg, opus, even mp4/mkv — and resamples to what the models expect. No manual conversion first.
No projects to manage, no presets to configure — give it a file and choose how you want the text back.
Pick a file (or a whole folder) from the CLI or the GUI. ffmpeg handles any common audio or video format.
Spanish, English, Japanese, or auto-detect — and a Whisper model size that fits your hardware and accuracy needs.
Whisper turns speech into text while pyannote figures out who is speaking, then each segment is matched to a speaker.
Save a readable transcript, subtitles, or the full JSON — speaker-labeled and timestamped, ready to use.
Transcription quality and speed scale with the Whisper model you choose. Start with medium; reach for large-v3 for the best accuracy on Japanese and noisy audio.
| Whisper model | Relative speed | Accuracy | Good for |
|---|---|---|---|
| tiny / base | Fastest | Basic | Quick drafts, clean audio |
| small | Fast | Good | Everyday CPU use |
| medium | Moderate | Great | Default — balanced |
| large-v3 | Slowest | Best | Japanese, noisy / overlapping speech |
Languages: Spanish (es), English (en), Japanese (ja), or auto-detect. Engine: faster-whisper (CTranslate2), int8 on CPU / float16 on GPU. Diarization: pyannote speaker-diarization-3.1 (a one-time Hugging Face model download, then fully offline). Outputs: txt, srt, vtt, json.
Python 3.11+, Linux / macOS / Windows. You'll also need ffmpeg on your PATH.
Create a virtual environment and install the core (faster-whisper, pyannote, torch). Add PySide6 for the GUI.
Accept the pyannote model terms on Hugging Face and set HF_TOKEN. The weights download once, then diarization runs offline. Skip it with --no-diarize.
Run transcribe on a file or folder, or launch the GUI and drop a recording in.
# Clone the repository git clone https://github.com/mnavas/audio-transcriber.git cd audio-transcriber # Install (CPU wheels by default; see README for CUDA) python3 -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt pip install -e . # One-time: speaker labels need a Hugging Face token export HF_TOKEN=hf_xxxxxxxxxxxxxxxxx # Transcribe a file… transcribe interview.m4a --language ja --num-speakers 2 --format srt # …or a whole folder, every format at once transcribe ./recordings --format all --output-dir ./out # …or use the desktop app python -m gui.app
Full setup (ffmpeg, the Hugging Face step, CUDA, model-size guidance) is in the README, and the design is written up in docs/v0.0.0/plan.md.
audio-transcriber is open source and welcomes contributions of any size.
Something crash or mis-transcribe? Open an issue with steps to reproduce, the language, and your OS / Python version.
Open an issue →Want another language, live mic input, or a transcript editor? Open a feature request and describe it.
Request a feature →Fork, branch, and send a PR. Read docs/v0.0.0/analysis.md first — it explains the architecture and the hard parts.
Fork on GitHub →Docs are plain Markdown in the docs/ folder — easy to edit and submit.
audio-transcriber is built and maintained as a side project. It's free and open source — but development tools, time, and motivation all have a real cost.
If it saves you money and hassle transcribing your recordings, consider chipping in. Every contribution helps keep it maintained and improving.
All contributions go directly to the developer. No company, no VC behind this.
audio-transcriber is free to use, fork, and modify under the MIT license. No telemetry, no accounts, no cloud — everything runs on your machine.
View on GitHub →