Speech to Text with Python: Turn Meeting Recordings and Voice Notes into Transcripts

A Hong Kong office generates a lot of audio every day: client calls, internal meetings, WhatsApp voice notes, interview recordings. Most of it ends up in a "listen later" folder that never gets opened, and the recordings pile up while the actual listening never happens. Typing a transcript by hand takes three to four hours for every hour of audio — and leaves you with sore eyes and tired hands.

That job — turning sound into text — is called Speech-to-Text (STT). OpenAI's open-source Whisper model handles Cantonese, Traditional Chinese and English, and it runs on your own computer, so no recording ever has to be uploaded to a cloud service. Below we use Python with faster-whisper to turn an entire folder of recordings into plain txt transcripts in one go.

What is Whisper, and why faster-whisper?

Whisper is a model trained on a very large amount of multilingual speech, so it does not need to be taught grammar word by word — it works out the difference between speech and background noise by itself. The original openai-whisper package needs a separate ffmpeg install, which is a hassle for colleagues who are not comfortable with computers. faster-whisper is an accelerated implementation of the same models built on CTranslate2: several times faster, lighter on memory, with audio decoding built in so you do not need ffmpeg at all. The same small model can run on CPU (no graphics card needed) or on CUDA.

Step 1: Install

Open Command Prompt and run:

pip install faster-whisper

The first run downloads the model you select (about 460MB for small) into your user folder, so later runs do not download it again.

Step 2: What does the script do?

  • Load the recordings — picks up every m4a, mp3 and wav file in the audio folder
  • Recognise the speech — hands each one to Whisper with the language set to Chinese
  • Write the output — saves each recording as a txt file of the same name, one sentence per line

Step 3: Write the script

Create a new folder, add transcribe.py inside it, make an audio folder beside it and drop your recordings in, then paste this code:

from faster_whisper import WhisperModel import glob, os model = WhisperModel("small", device="cpu", compute_type="int8") files = glob.glob("audio/*.m4a") + glob.glob("audio/*.mp3") + glob.glob("audio/*.wav") for path in files: segments, info = model.transcribe(path, language="zh", vad_filter=True) lines = [seg.text.strip() for seg in segments if seg.text.strip()] name = os.path.splitext(os.path.basename(path))[0] with open(name + ".txt", "w", encoding="utf-8") as f: f.write("\n".join(lines)) print("Done:", name, "| length", round(info.duration / 60, 1), "min |", len(lines), "lines")

Line by line

  • WhisperModel("small", ...) — loads the small model; change device to "cuda" to use a graphics card; compute_type="int8" is the most memory-friendly setting on CPU.
  • glob.glob(...) — finds files of all three formats at once and builds a single list.
  • model.transcribe(...) — the actual recognition: segments holds the text piece by piece, info holds metadata such as duration.
  • language="zh" — fixes the language to Chinese so the model does not guess; use "en" for English-only recordings for better accuracy.
  • vad_filter=True — detects where actual speech is and trims silence and noise, cutting empty lines and gibberish.
  • encoding="utf-8" — always specify it, otherwise the Windows default encoding turns Chinese into garbled characters.

Step 4: Run it

In Command Prompt, navigate to the folder and run python transcribe.py. When it finishes, each recording has a matching txt file sitting next to it — open it and the transcript is there.

Realistic speed and accuracy

On an ordinary office laptop with no graphics card, the small model needs roughly 15 to 25 minutes to transcribe one hour of meeting audio, depending on recording quality; with a dedicated GPU it is three to five times faster. On accuracy: in a quiet room with the microphone within a metre, Traditional Chinese transcripts are usually better than ninety percent correct in substance. Put several people around one phone with air-conditioning or street noise in the background, and errors climb noticeably. In practice, treat the transcript as a first draft — names, company names and amounts always need a human check.

Five tips to improve accuracy

  • Capture good audio first — a few-hundred-dollar USB microphone beats any software fix applied afterwards.
  • Step up one model size — if the machine can handle it, change small to medium; Cantonese and mixed Chinese-English sentences become far more accurate at roughly two to three times the runtime.
  • Supply proper nouns — pass initial_prompt="company name, product name, people's names" to transcribe and the model leans towards your spelling.
  • Split before transcribing — for files longer than two hours, cut them into 30-minute chunks; a bad chunk is easy to rerun without starting over.
  • Keep the timestamps — to match a line back to a minute, read seg.start and seg.end and export an srt subtitle file.

Where Hong Kong SMEs actually use this

Meeting minutes: a first draft exists the moment the meeting ends, so colleagues only edit and add the key points instead of relying on memory. Client calls: a salesperson records the enquiry, turns it into text and pastes it into the CRM so the whole team can follow. WhatsApp voice notes: long voice messages become text you can read without playing them out loud. Interviews and training: transcripts are the raw material for later articles and course materials. None of this work is difficult — it is simply time-consuming, and handing it to a script frees people up for judgement and follow-up.

Summary

Python Tutorial: with faster-whisper and a dozen lines of code, recordings become transcripts automatically — no cloud upload, no typing sentence by sentence. Three things matter: audio quality sets the ceiling, model size buys accuracy, and output must be written as utf-8. Start by running one or two hours of your own recordings to see whether the accuracy suits your situation, then decide whether to move up a model size or add proper-noun hints.