Skip to content
Workflow

Make subtitles with local AI, without uploading your footage

Buzz and AutoSubs are desktop apps that make subtitles on your computer [1][9]; whisper.cpp writes SRT and VTT files from the command line [10]. All three need model files downloaded first [8][9][11]. Check names by hand: Whisper-family models can invent text over music or silence [10][8].

Not yet tested by VloggingPro
Who it's for
Vloggers who want subtitle files without sending their audio to a cloud service.
You need
Your edited video or its audio; a Mac, Windows or Linux computer (current Buzz for macOS needs Apple silicon [1]); FFmpeg for the whisper.cpp route [2].
Skill
Some setup
Cost
Free. whisper.cpp, faster-whisper, Buzz and AutoSubs are MIT-licensed [3][4][5][6]; WhisperX is BSD 2-Clause [7]. Buzz's optional OpenAI mode needs your own OpenAI API key [8].

Tools in this workflow

ToolRole in this workflowCostRuns
Buzz transcriptionDesktop app: import a file, transcribe, export TXT, SRT or VTT [1].Free codeDesktop app, On your computer
Auto Subs (tmoroney)Subtitles from inside DaVinci Resolve, Premiere Pro or After Effects, or as a standalone app [9].Free codeOn your computer
whisper.cppCommand-line transcriber with -osrt and -ovtt subtitle output [10].Free codeOn your computer
FFmpeg / ffprobeConverts audio to the 16 kHz, 16-bit WAV that the whisper.cpp README asks for [2].Free codeOn your computer
faster-whisperPython library that returns a start and end time for every word [17].Free codeOn your computer
WhisperXWord alignment plus speaker labels through pyannote-audio [18].Free codeOn your computer
stable-tsWord-timestamp library for Whisper; archived by its owner in May 2026 [20].Free codeOn your computer

The result

SRT and VTT subtitle files for each video, made on your own computer [10][1].

Optionally, word-by-word timings from faster-whisper [17] or a transcript with speaker labels from WhisperX [18].

Before you start

  • Pick a route: an app (Buzz or AutoSubs), the terminal, a window where you type commands (whisper.cpp), or Python (faster-whisper or WhisperX).
  • Buzz for macOS needs Apple silicon; the last Intel version is 1.4.5 [1].
  • AutoSubs does not work with the Mac App Store version of DaVinci Resolve. Install Resolve from blackmagicdesign.com [9].
  • Homebrew's whisper.cpp comes without models [11]. Models run from 75 MiB (tiny) to 2.9 GiB (large-v3); .en models are English-only [14].

Steps

  1. No-code route: transcribe in Buzz

    Buzz transcribes and translates offline using OpenAI's Whisper [1]. It takes audio or video and exports TXT, SRT and VTT [12].

    Install from SourceForge on macOS and Windows, or with Flatpak, Snap or AppImage on Linux [1]. The Windows installer is unsigned: at the warning, choose More info, then Run anyway [1].

    Download models in Help > Preferences > Models; Buzz then works offline [8].

    Its FAQ says Large-V3 can invent words not in the audio, and the only way to choose a model is to test them in your language [8].

    Copied from the documentation · macOS · source [13]
    brew install --cask buzz
    Copied from the documentation · Linux · source [1]
    flatpak install flathub io.github.chidiwilliams.Buzz
  2. No-code route inside your editor: AutoSubs

    AutoSubs says it runs locally, with no subscription and no data leaving your machine [9]. It works standalone or inside DaVinci Resolve, Premiere Pro or After Effects [9].

    In Resolve, open Workspace > Scripts > AutoSubs, pick the timeline or audio source, click Transcribe, edit speakers and subtitles, and send styled subtitles back [9]. Premiere Pro gets caption tracks; After Effects gets a text layer per SRT entry [9].

    Models download on demand from the Model Manager and run on-device. Installers cover Apple silicon and Intel Macs, Windows and Linux [9].

    Copied from the documentation · macOS · source [9]
    brew install --cask auto-subs
  3. Command-line route: install whisper.cpp and a model

    whisper.cpp is an MIT-licensed C/C++ port of OpenAI's Whisper [11][3]. Homebrew's whisper.cpp formula (formerly whisper-cpp) installs whisper-cli [11].

    Get a model with the repository's script, or as a ready-made .bin file from Hugging Face [14].

    On Apple silicon it runs on the GPU through Metal [2]. Homebrew has builds for Apple silicon Macs and Linux [11]; elsewhere, including Windows, build from source with CMake [2].

    Copied from the documentation · macOS, Linux · source [11]
    brew install whisper.cpp
    Copied from the documentation · macOS, Linux · source [2]
    git clone https://github.com/ggml-org/whisper.cpp.git
    cd whisper.cpp
    sh ./models/download-ggml-model.sh base.en
    Copied from the documentation · Windows · source [2]
    .\models\download-ggml-model.cmd base
    Copied from the documentation · Build from source · source [2]
    cmake -B build
    cmake --build build -j --config Release
  4. Convert the audio and write SRT and VTT files

    whisper-cli only reads 16-bit WAV, so convert with FFmpeg first [2]. Replace input.mp3 with your file; FFmpeg reads a wide range of formats [15].

    -osrt writes SRT, -ovtt writes VTT, -of sets the output name without extension and -l sets the spoken language [10].

    The command is whisper-cli from Homebrew [16] or ./build/bin/whisper-cli from a source build [2].

    Copied from the documentation · source [2]
    ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
    Assembled from documented options, not printed in the docs · source [10]
    whisper-cli -m models/ggml-base.en.bin -f output.wav -l en -osrt -ovtt -of output
  5. Stop phantom text over music and silence

    Over mostly music or silence, whisper.cpp can print repeated lines or fluent text in the wrong language [10].

    Fixes: -l to pin the language, -sns to suppress non-speech tokens, -nf to turn off temperature fallback, and --vad with a voice activity detection (VAD) model so non-speech never reaches the decoder [10]. The Silero VAD model has its own download script [2].

    faster-whisper's vad_filter=True removes silence over 2 seconds by default [17]. WhisperX runs VAD first, which its README says reduces hallucination [18].

    Copied from the documentation · macOS, Linux · source [2]
    ./models/download-vad-model.sh silero-v6.2.0
    Assembled from documented options, not printed in the docs · source [10]
    whisper-cli -m models/ggml-base.en.bin -f output.wav -l en -sns -nf --vad -vm models/ggml-silero-v6.2.0.bin -osrt -ovtt -of output
  6. Python route: word-level timings with faster-whisper

    faster-whisper needs Python 3.9 or later. It decodes audio with PyAV, so FFmpeg is not needed [17].

    Its GPU instructions cover NVIDIA cards (CUDA 12, cuBLAS, cuDNN 9). Otherwise use device="cpu", compute_type="int8" [17].

    word_timestamps=True adds start and end times for every word [17]. The README has no SRT writer [17]: format the output yourself or ask a coding agent.

    segments is a generator: nothing is transcribed until you loop over it [17].

    Copied from the documentation · source [17]
    pip install faster-whisper
    Assembled from documented options, not printed in the docs · source [17]
    from faster_whisper import WhisperModel
    
    model = WhisperModel("large-v3", device="cpu", compute_type="int8")
    segments, _ = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
    
    for segment in segments:
        for word in segment.words:
            print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))
  7. Speaker labels with WhisperX

    WhisperX adds word timings through wav2vec2 alignment, and speaker labels (diarisation: splitting audio by who speaks) through pyannote-audio [18].

    For speaker labels, create a Hugging Face read token, accept the conditions for pyannote/speaker-diarization-community-1 and pass the token with --hf_token [18][19]. The model is CC-BY-4.0 [19].

    On a Mac use --compute_type int8 --device cpu. GPU use needs the CUDA 12.8 toolkit [18].

    Limits: diarisation 'is far from perfect', overlapping speech is handled poorly, and words such as '2014.' or '£13.60' get no timing [18].

    Copied from the documentation · source [18]
    pip install whisperx
    Copied from the documentation · source [18]
    whisperx path/to/audio.wav --model large-v2 --diarize --highlight_words True
    Assembled from documented options, not printed in the docs · macOS · source [18]
    whisperx path/to/audio.wav --model large-v2 --diarize --hf_token YOUR_HF_TOKEN --compute_type int8 --device cpu
  8. Check every name, then publish

    Read the SRT against the video. Large Whisper models can invent words [8], and WhisperX leaves words such as '£13.60' untimed [18].

    Fix drift after a re-edit with the SRT offset tool.

    You approve:Check every name, place, brand and product against the audio before publishing.

If you don't want to code

  • Buzz: TXT, SRT and VTT export [1], offline once models are downloaded [8], and a watch folder that transcribes new files automatically [1].
  • AutoSubs: transcribes inside DaVinci Resolve, Premiere Pro or After Effects and sends subtitles back to the timeline [9].

Common failures

  • Phantom lines over music or silence: in whisper.cpp use -l, -sns, -nf and --vad [10]; in faster-whisper set vad_filter=True [17].
  • Wrong language: on non-speech audio, auto-detection can pick one at random. Set -l [10].
  • .en model on other languages: .en models are English-only [14] and will not work [8].
  • Buzz crashes after a model download: the file may be incomplete or corrupt. Delete it in Help > Preferences > Models and download it again [8].
  • faster-whisper GPU errors: the latest ctranslate2 supports only CUDA 12 and cuDNN 9; the README lists older versions for other setups [17].
  • Wrong WhisperX speaker labels: set --min_speakers and --max_speakers [18].
  • stable-ts: archived by its owner on 30 May 2026, read-only [20]. Last PyPI release 2.19.1, 16 August 2025 [21].

Privacy, rights and permissions

  • Buzz says it transcribes offline [1], AutoSubs says its models run on-device [9], and the whisper.cpp README shows it running fully offline [2].
  • Buzz sends audio to OpenAI only if you add an OpenAI API key in Preferences [8].
  • Models download once: Buzz and AutoSubs in the app [8][9], whisper.cpp from its script or Hugging Face [14]. The WhisperX speaker model's gated Hugging Face repository asks for your contact details; pyannote documents running it offline after download [19].
  • Get and record permission before transcribing other people's voices.

What we will measure

  • Word error rate against a human reference on a fixed 5-minute noisy two-speaker English sample, recording model version, language and device.
  • Alignment drift: median absolute timing error on 50 sampled words against frame-accurate timecodes, with the 10 worst listed.
  • CPU and GPU time per tool on the same sample.
  • Outbound connections from each tool with the internet blocked.
  • Install success: a valid subtitle file from a clean machine within 30 minutes.

Sources

  1. raw.githubusercontent.com/chidiwilliams/buzz/main/README.md fetched 2 Nov 2026
  2. raw.githubusercontent.com/ggml-org/whisper.cpp/master/README.md fetched 2 Nov 2026
  3. raw.githubusercontent.com/ggml-org/whisper.cpp/master/LICENSE fetched 2 Nov 2026
  4. raw.githubusercontent.com/SYSTRAN/faster-whisper/master/LICENSE fetched 2 Nov 2026
  5. raw.githubusercontent.com/chidiwilliams/buzz/main/LICENSE fetched 2 Nov 2026
  6. raw.githubusercontent.com/tmoroney/auto-subs/main/LICENSE fetched 2 Nov 2026
  7. raw.githubusercontent.com/m-bain/whisperX/main/LICENSE fetched 2 Nov 2026
  8. FAQ | Buzz fetched 2 Nov 2026
  9. raw.githubusercontent.com/tmoroney/auto-subs/main/README.md fetched 2 Nov 2026
  10. raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli/README.md fetched 2 Nov 2026
  11. Homebrew Formulae: whisper.cpp fetched 2 Nov 2026
  12. Introduction | Buzz fetched 2 Nov 2026
  13. Homebrew Formulae: buzz fetched 2 Nov 2026
  14. raw.githubusercontent.com/ggml-org/whisper.cpp/master/models/README.md fetched 2 Nov 2026
  15. ffmpeg Documentation fetched 2 Nov 2026
  16. raw.githubusercontent.com/Homebrew/homebrew-core/HEAD/Formula/w/whisper.cpp.rb fetched 2 Nov 2026
  17. raw.githubusercontent.com/SYSTRAN/faster-whisper/master/README.md fetched 2 Nov 2026
  18. raw.githubusercontent.com/m-bain/whisperX/main/README.md fetched 2 Nov 2026
  19. pyannote/speaker-diarization-community-1 · Hugging Face fetched 2 Nov 2026
  20. GitHub - jianfch/stable-ts: Transcription, forced alignment, and audio indexing with OpenAI's Whisper · GitHub fetched 2 Nov 2026
  21. stable-ts · PyPI fetched 2 Nov 2026