To transcribe a video file privately, run an open-source Whisper tool on your own computer. The easiest route is a desktop app such as Vibe or Buzz, which take MP4 and MOV files directly and export text or subtitles. If you prefer the command line, use FFmpeg to pull out the audio and OpenAI’s Whisper or whisper.cpp to transcribe it. None of these upload anything, and all of them are free.
Which open source tool should you use? #
| Tool | Interface | Takes video directly | Speaker labels | Output |
|---|---|---|---|---|
| Vibe | Desktop app | Yes | Yes | SRT, VTT, TXT, HTML, PDF, JSON, DOCX |
| Buzz | Desktop app | Yes | Yes | TXT, SRT, VTT |
| OpenAI Whisper | Command line (Python) | Yes, via FFmpeg | No | Text and subtitle files |
| whisper.cpp | Command line (C/C++) | 16-bit WAV by default | No | Text, subtitles and more |
| WhisperX | Command line (Python) | Yes, via FFmpeg | Yes | Word-level timestamps |
| FFmpeg | Command line | Converts anything | n/a | Audio extraction, burning in subtitles |
All run offline once installed and once the model is downloaded. Vibe, Buzz and whisper.cpp are MIT-licensed.
Method 1: Vibe or Buzz (no command line) #
Vibe runs on Windows, Mac and Linux and describes itself as “fully offline transcription, no data ever leaves your device.”
- Download and install Vibe from its GitHub page.
- Open it and let it download a Whisper model the first time.
- Drop in your video file, or several at once for a batch.
- Set the language and start.
- Export as SRT or VTT for subtitles, or TXT, DOCX or PDF for reading.
Buzz works the same way with a simpler export list (TXT, SRT, VTT). It can be installed from Flathub or Snap on Linux. Current Mac builds need Apple silicon.
Method 2: FFmpeg and whisper.cpp #
whisper.cpp is a lightweight C/C++ port of Whisper. It runs well on CPUs and uses much less memory than the Python version. Per its README, the command-line tool is whisper-cli and expects 16-bit WAV input. So convert first:
ffmpeg -i lecture.mp4 -ar 16000 -ac 1 -c:a pcm_s16le lecture.wavThen build whisper.cpp, fetch a model and transcribe:
git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp
cmake -B build
cmake --build build -j --config Release
sh ./models/download-ggml-model.sh base.en
./build/bin/whisper-cli -m models/ggml-base.en.bin -f lecture.wav -osrt -otxtThat writes an SRT subtitle file and a plain text file next to the audio. Swap base.en for a larger model, such as medium or large-v3-turbo, when accuracy matters more than speed. Use a multilingual model for non-English video.
Method 3: OpenAI’s Whisper command line #
The reference Python tool reads video directly, because it uses FFmpeg under the hood. From the Whisper README:
pip install -U openai-whisper
whisper talk.mp4 --model turbo --language EnglishIt writes the transcript in several formats, including plain text and subtitle files, in the current folder. The turbo model needs about 6 GB of video memory, and large needs about 10 GB. On a machine without a good GPU, small or medium is more practical.
To transcribe a whole folder of videos:
for f in *.mp4; do whisper "$f" --model small --language English; doneHow to get speaker labels and word-level timing #
Plain Whisper doesn’t know who is speaking, and its timestamps are per phrase rather than per word. WhisperX adds both. It aligns each word to the audio and uses pyannote for speaker diarization. Install it with pip install whisperx. For diarization you’ll need a free Hugging Face access token and to accept the diarization model’s user agreement. Vibe and Buzz offer speaker labels without any of that setup.
Tips for accurate video transcripts #
- Set the language. Auto-detection can be thrown off by music at the start of a video.
- Watch the music and silent stretches. Whisper-family models sometimes invent text during long silence or music. Trim intros and outros, or check those parts carefully.
- Use a bigger model for accents and noise. The accuracy gain is usually worth the extra time.
- Proofread subtitles by watching them. Timing and line breaks that look fine in a text file can be awkward on screen.
To put finished subtitles permanently into the picture, FFmpeg’s subtitles filter does it: ffmpeg -i talk.mp4 -vf subtitles=talk.srt talk-subtitled.mp4.
For more on audio-only work, see how to transcribe podcasts privately. For interview recordings on Linux, see how to transcribe interviews offline on Linux.
A phone option for lecture and meeting videos #
Not every video is on a computer. Recorded lectures, screen recordings and meeting videos often sit on a phone. Private Transcribe is an iPhone and Android app built on whisper.cpp. It imports mp4 and mov files from Files or Photos, transcribes the audio track on the phone, and never uploads anything. Files can be up to 90 minutes. The one-time Pro purchase adds .srt export with timestamps, so you can make subtitles on the phone too. It doesn’t label speakers and isn’t open source itself, so the desktop tools above remain the choice for large or multi-speaker jobs.
For a walkthrough of transcribing lecture recordings on a phone, see how to transcribe lectures offline on Android.
Frequently asked questions #
Do I need to extract the audio before transcribing a video? #
Not with Vibe, Buzz, OpenAI’s Whisper or WhisperX. They read video files directly through FFmpeg. whisper.cpp’s command-line tool expects 16-bit WAV by default, so convert with FFmpeg first, or build it with its optional FFmpeg support.
Which open source transcription tool is the most accurate? #
They mostly run the same Whisper models, so accuracy depends more on the model size you pick than on the tool. Large-v3 and large-v3-turbo are the most accurate. The tools differ in speed, memory use, speaker labels and export formats.
Can I transcribe video without a GPU? #
Yes. whisper.cpp is designed to run well on CPUs, and small or medium models are practical on most recent laptops. Large models without a GPU are slow, so run them overnight for long videos.
Are open source transcription tools really private? #
The transcription itself happens on your machine, so your audio isn’t sent anywhere. They do download models the first time, usually from Hugging Face or GitHub. After that you can run them with the network off to be sure.