Create SRT Captions Locally with Whisper: From Video Audio to Reviewed Subtitles

Extract audio from a video, generate an SRT with local Whisper, and review names, numbers and timecodes before publishing.

An internal training video needs captions before the team can share it. It contains client names, a quote and an unreleased product codename, so uploading it to a web captioning service may be inappropriate. Typing every line by hand is too slow. Instead, keep the audio on your computer, generate an SRT with open-source Whisper and spend your review time on the risky lines. This guide uses a fictional meeting about a Wednesday delivery and a budget of 150,000 yuan. It is for editors, researchers and operations staff who can use a terminal and work with internal interviews or course recordings.

“Local” does not mean fully offline. Installation and the first model download require internet access, and a synced folder might still upload files. Confirm permission to process and publish the recording first. The ability to transcribe a private conversation does not make it appropriate to turn that conversation into searchable text.

Choose the workflow before choosing the largest model

The official Whisper repository provides a command-line tool that can export SRT, VTT and plain text. Its code and model weights are MIT-licensed. The setup requires Python, FFmpeg and an initial model download; long audio can take a while on a CPU. For one public short video, automatic captions in CapCut may be simpler. A local workflow makes more sense for recordings that must not be uploaded, batch work or transcripts you need to audit later. Adobe Podcast focuses more on online audio enhancement; confirm upload permission before using it too.

Run a one-minute sample with the multilingual small model before considering medium. The official model table shows trade-offs in size, memory and speed, while real accuracy depends on accent, noise and recording quality. Do not use the English-only small.en model for Chinese speech. small is a starting point here, not an accuracy guarantee.

Check the environment before touching the real recording

Prepare a test video in a separate folder. Run python --version (or python3 on some systems) and ffmpeg -version. Whisper's official README documents pip install -U openai-whisper and requires the FFmpeg command-line tool. It lists Scoop or Chocolatey on Windows, Homebrew on macOS and distribution package managers on Linux. Reopen your terminal after installing FFmpeg and check its version again so that PATH changes have taken effect.

python -m venv .venv
# Windows PowerShell: call the virtual-environment programs directly
.\.venv\Scripts\python.exe -m pip install -U openai-whisper
.\.venv\Scripts\whisper.exe --help

On macOS or Linux, replace the last two executable paths with .venv/bin/python and .venv/bin/whisper. If Windows cannot find python, check its installation and PATH, or try py -m venv .venv. On failure, record your Python version and the first meaningful error. Avoid unknown “one-click” Whisper installers from search results.

Extract the correct audio track from MP4

A video may contain more than one language track. Inspect it with ffprobe -i meeting.mp4 first. In the following command, 0:a:0 selects the first audio stream, which may not be the Chinese one; change the index if necessary. This creates a mono, 16 kHz PCM WAV, which may use more disk space than compressed audio.

ffmpeg -i meeting.mp4 -map 0:a:0 -vn -ac 1 -ar 16000 -c:a pcm_s16le meeting.wav

Play short pieces of the WAV from the beginning, middle and end. Is speech present? Did you extract only background music? Is the audio out of sync with the picture? A larger recognition model cannot fix the wrong source track. Preserve the original video.

Export Chinese SRT captions with one command

# Windows PowerShell
.\.venv\Scripts\whisper.exe meeting.wav --model small --language zh --task transcribe --output_format srt --output_dir subtitles --fp16 False

# On macOS/Linux, use .venv/bin/whisper as the executable

--language zh specifies the main language rather than letting a short intro or English brand name confuse detection. transcribe keeps the source language; it is not translation. --output_format srt requests only captions, and --output_dir selects the destination. On a CPU, --fp16 False explicitly uses FP32 if an FP16 warning appears. The first run downloads a model; later runs generally reuse its cache. Open subtitles/meeting.srt and confirm it has content before importing it into an editor.

Do not change transcribe to translate and still call the result “Chinese captions.” Translation changes the language and needs another review of names and terminology. Whisper's documentation specifically warns that turbo is not suited to speech translation. This guide covers captions in the original language.

Listen for facts before polishing line breaks

Review amounts, percentages, dates, names, product terms and negations first. Imagine the speaker said, “We can deliver on Wednesday, but the budget must not exceed 150,000.” The transcript says “Thursday” and “may exceed 150,000.” Two small changes reverse the commitment. If a word is unclear, mark it for confirmation instead of guessing a number from context.

Then inspect timecodes at the beginning, around speaker changes, in the noisiest section and at the end. Do captions appear early or overcrowd the screen? Preserve sequence numbers, blank lines and the 00:00:01,000 --> 00:00:03,000 format while editing SRT. Cutting a section from the video may shift old captions, so realign them in the timeline. Correct words do not guarantee correct timing.

Ask AI for a listening queue, not a verdict

If authorization permits it, a trusted AI tool can scan caption text for risky lines. Keep sensitive text local when external upload is not allowed. A useful prompt is:

Here is an SRT from an authorized recording. Find only passages that need a human to listen again. Group them under amounts/dates/percentages, people or product names, negations that could reverse the meaning, and incomplete sentences. Include the timecode and original line. Do not rewrite, guess unclear words or claim to have heard the audio. When evidence is insufficient, say “needs listening confirmation.”

If a line says “the client agreed,” AI can flag agreed/disagreed for review, but it cannot know which was actually spoken. Keep both the original and reviewed SRT so corrections remain traceable.

Five common snags and a final handoff

  • FFmpeg not found: reopen the terminal, run ffmpeg -version and check PATH. Reinstalling Whisper repeatedly will not fix this.
  • Chinese becomes English: use a multilingual model and --language zh. For garbled text, open the SRT as UTF-8 without overwriting the original.
  • Speech appears in a quiet intro: compare with the recording and delete fabricated captions. Never present hallucinated words as an interview quote.
  • Slow processing or insufficient memory: try a smaller model and a one-minute sample. A GPU is not mandatory, but real-time performance is not guaranteed.
  • Words look right but playback is out of sync: check the audio track, video edits and timeline rather than only the text.

Before handoff, confirm processing rights, preserve the video and extracted WAV, record the model and command, listen again to high-risk words, spot-check timecodes and re-import the final SRT for a playback test. Escalate any line that remains uncertain to the material owner. An auditable deliverable is more useful than a promise of one-click, error-free captions.

Installation and parameters were checked against the official Whisper repository, its CLI source and the FFmpeg documentation. Software versions can change; check the official sources when installing.

Independently prepared by AI Islands using official product pages and public sources. Features and pricing may change; check official sites for current information.