Try it with fictional data first.
Read the complete sample input
Record your own voice, with a brief pause between sentences. Export as practice.m4a. Welcome to the repair workshop. Bring one small item and arrive ten minutes early. The session starts at nine thirty, not nine thirteen.
Documentation-based terminal recipe. No audio recording, model download, inference, accuracy or speed test was performed. The SRT is an explicitly illustrative format fixture.
Know what you need.
Whisper small.en is an explicit English-only baseline with a smaller memory footprint than the large models. The project lists roughly 466 MiB on disk and 852 MB memory for small, not a measured speed or error rate. For other languages use multilingual small, not small.en.
- A recording you have permission to process
- Git, CMake, a C/C++ compiler, FFmpeg and disk space
- macOS/Linux or a configured WSL shell for these commands. Native Windows executable paths differ.
Local inference has no per-minute cloud service fee. Your hardware and review time still cost something. Code and model weights have their own stated licenses.
From input to something usable.
Record a known test first
Read the three supplied sentences yourself, pause between them and export practice.m4a. Keep "nine thirty, not nine thirteen"; it is deliberately easy to mishear. No audio or video fixture is supplied, and no recording needs to be uploaded.
Build and download once
Use the official project, build it and download small.en. These setup steps need internet. Save the revision beside your outputs so the workflow can be reproduced.
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
git rev-parse HEAD > workflow-version.txt
cmake -B build
cmake --build build -j --config Release
sh ./models/download-ggml-model.sh small.enNormalize the input container
Copy practice.m4a into that directory. Convert it to mono 16 kHz 16-bit PCM WAV rather than depending on optional codec support in a particular build.
ffmpeg -i practice.m4a -ar 16000 -ac 1 -c:a pcm_s16le practice-16k.wavProduce all three formats together
Run the command below from the repository directory. -of is the output basename; do not append .srt. Check whisper-cli -h against your installed build if a flag differs.
./build/bin/whisper-cli \
-m models/ggml-small.en.bin \
-f practice-16k.wav -l en \
-otxt -osrt -ovtt -of practice-captionsValidate text and cue times against audio
After setup, disconnect networking and repeat with a new output basename to check local operation. Open the SRT in a text editor and play the recording in your audio player. Listen to every cue, correcting the exact words and cue boundaries, especially the two numbers. Check start/end offsets and long lines. This is an audio-to-subtitle recipe; it does not create or imply a captioned video.
Start with an explicit request.
./build/bin/whisper-cli \
-m models/ggml-small.en.bin \
-f practice-16k.wav -l en \
-otxt -osrt -ovtt -of practice-captionsCheck this before calling it done.
Illustrative expected output, not output observed from a model run.
| Output | Purpose | What to inspect |
|---|---|---|
| practice-captions.txt | Raw transcript | All known words and both numbers |
| practice-captions.srt | Editable numbered cues | Timestamps and line breaks against your recording |
| practice-captions.vtt | Web subtitle format | WEBVTT header and matching cue content |
The downloadable SRT demonstrates structure only. Its timings are illustrative, not measured from a recording. Do not use them as timing evidence for your own audio.
- Listen to every cue; nine thirty and nine thirteen remain distinct
- Timestamps follow the recording with no start/end offset or drift
- Keep both the raw transcript and the edited delivery subtitles
Fix the failure, not the wording.
No executable
Resolve the compiler/CMake error before downloading more models.
File not found
Run from the repository directory or provide explicit paths.
Wrong language
Use a multilingual model and set -l to the recording language.
Words invented in silence
Listen and remove those cues. Do not infer a named speaker from voice alone; this command is not reliable speaker diarization.
When another approach is better
A familiar editor’s caption tool is simpler when cloud processing is allowed. A human transcriber remains appropriate when exact wording is critical. Importing into a video editor is a separate workflow with a real video source.
Sources & what was checked.
Documentation-based terminal recipe. No audio recording, model download, inference, accuracy or speed test was performed. The SRT is an explicitly illustrative format fixture.
Setup and model sizesCLI output flagswhisper.cpp licenseWhisper license