AI & IT toolsAI Tools

Checking AI narration with faster-whisper: make SRT subtitles and compare them with the script

Transcribe 60 seconds of Korean AI narration with faster-whisper's small and medium models, write an SRT subtitle file, and compare each line with the script to find words the voice may have read wrong. Real results and timings included.

AZTechnology12 min read

한국어English

Based on: faster-whisper 1.2.1 (Windows, CPU), the official README, and the YouTube Help page on subtitle file formats. Checked on November 4, 2026. Figures 1 and 2 are charts made from results we ran ourselves, Figure 3 is a made-up example of the file format, and Figure 4 is a screenshot of the official page. The example narration is in Korean and belongs to a video not yet released, so its script text is not shown.

AI voices make narration much faster than recording it yourself, but one job is left: checking that the AI read the script correctly. It sometimes reads a number oddly, or says a word so that it sounds like a different word. Listening to ten minutes of narration from start to finish just to catch these is hard.

In this guide you turn the narration into text with faster-whisper, a free speech-to-text tool, then compare it with the script line by line and only listen to the lines that look wrong. The result is also a ready-made subtitle file (SRT) you can upload to YouTube. The example is the first 60 seconds of a Korean narration made with an AI voice.

By the end of this guide you can:

  1. Transcribe an audio file with faster-whisper and write an SRT subtitle file.
  2. Tell the difference in accuracy and speed between the small and medium models.
  3. Compare the transcript with the script to find misread words.
  4. Fix misread lines on the script side.

1. Why check with a transcript

Transcription (speech-to-text) means listening to sound and writing it down. It is like a dictation test. The teacher (the AI voice) reads a sentence, the student (the transcription tool) writes it down, and we mark it against the answer sheet (the script).

This works because mistakes show up as text differences. If the transcript says a different word than the script, the voice may not have said that word clearly. Instead of listening to all ten minutes, you only listen to the few places where the text differs.

The transcription tool also makes mistakes, though. A different word does not always mean the voice was wrong. So the order is always: use the text to find suspects, then use your ears to decide.

2. faster-whisper: a faster way to run Whisper

Whisper is a speech-recognition model released by OpenAI. faster-whisper is a version rebuilt on an inference engine called CTranslate2. Its README says it is up to 4 times faster than the original for the same accuracy, and uses less memory (Figure 4). Think of the same recipe cooked with better kitchen tools: the taste (accuracy) stays, the time drops.

The faster-whisper GitHub repository home page. Repository name, file list, and the About box: Faster Whisper transcription with CTranslate2 Figure 4. The official faster-whisper repository (GitHub screenshot)

ItemDetails
PriceFree (open source, MIT license)
Installpip install faster-whisper in Python
Runs onCPU or NVIDIA GPU. The GPU needs cuBLAS for CUDA 12 and cuDNN 9 installed separately
Model sizestiny, base, small, medium, large-v3 and more. Bigger is more accurate and slower
OutputStart time, end time and text for each segment. Per-word times are also available

Having a GPU is not enough without those libraries. My PC has an NVIDIA graphics card, but the GPU run failed with an error saying the cuBLAS file (cublas64_12.dll) could not be found, so all tests below ran on the CPU. On a CPU, compute_type="int8" makes it faster by using smaller numbers. It is like rounding numbers for mental math: very slightly less precise, but quicker.

3. The transcription script

Before you start: on a PC with Python, run pip install faster-whisper in a terminal. The free tool ffmpeg is handy for cutting audio.

Follow along:

  1. Cut the first 60 seconds of the narration into a test file. Running a long file first means a long wait for results.

    ffmpeg -i narration.mp3 -t 60 -ac 1 -ar 16000 clip60.wav
    

    -t 60 keeps 60 seconds, -ac 1 makes it mono, and -ar 16000 sets 16,000 samples per second. Whisper works with 16 kHz audio, so matching it first keeps things simple.

  2. Save the following as fw.py. It takes a model name, an audio file and an output name, and writes an SRT file.

    import sys, time
    from faster_whisper import WhisperModel
    
    size, src, out = sys.argv[1], sys.argv[2], sys.argv[3]
    t0 = time.time()
    model = WhisperModel(size, device="cpu", compute_type="int8")
    t1 = time.time()
    segments, info = model.transcribe(src, language="ko", word_timestamps=True)
    segments = list(segments)
    t2 = time.time()
    
    def ts(s):
        h, m, sec = int(s // 3600), int(s % 3600 // 60), s % 60
        return f"{h:02d}:{m:02d}:{int(sec):02d},{int(round((sec - int(sec)) * 1000)):03d}"
    
    with open(out + ".srt", "w", encoding="utf-8") as f:
        for i, s in enumerate(segments, 1):
            f.write(f"{i}\n{ts(s.start)} --> {ts(s.end)}\n{s.text.strip()}\n\n")
    print(size, "load", round(t1 - t0, 1), "transcribe", round(t2 - t1, 1))
    
  3. Run the small model first.

    python fw.py small clip60.wav narration_small
    
  4. Run the same file again with the medium model.

    python fw.py medium clip60.wav narration_medium
    

The first run downloads the model, so it takes longer. Later runs reuse the downloaded file.

language="ko" tells it the audio is Korean; use the code for your language. Without it, Whisper guesses the language from the start of the audio, and short files can be guessed wrong. word_timestamps=True asks for a time for every word. Subtitles only use segment times, but word times are useful later if you want to cut video exactly at the end of a word.

4. Results: small vs medium

Figure 1 checks both results against the script line by line and lists only how many places differ in meaning or spelling, and what kind of mistake each was. Differences only in how numbers are written (a digit vs. the word) or in spacing are not counted.

Table of places per line where the transcript differs from the script. 13 lines; small has 1 at A0_04, 2 at A1_02 (two numbers off by 0.1), 1 each at A1_08 and A1_09, 5 in total; medium has 1 each at A1_03, A1_04 and A1_09, 3 in total Figure 1. How many places and what kind of differences, per line, in the first 60 seconds (13 lines). Red cells are differences (chart)

ModelWords that differNumbersWhat stands out
small5 placesWrong (two decimal numbers off by 0.1)A different noun with a similar sound, a technical term split into a number and a word, a different spelling of the same sound
medium3 placesAll correctTwo Korean particles swapped (they sound the same) twice, one vowel that sounds the same

The two models tell us something. Every one of the five places small got wrong, medium got right. So small's mistakes were transcription mistakes, not the voice's. Getting numbers wrong is the dangerous part: if you check a script with small, you might doubt a number that was read correctly, or put a wrong number into your subtitles.

The three places medium wrote differently are sounds that are nearly identical in Korean. The voice probably did nothing wrong; the sound alone just cannot separate them. Listen once and move on.

5. Time taken

Bar chart. Audio length 60 s, small 48.0 s, medium 231.3 s Figure 2. Time to transcribe 60 seconds of audio. Measured on my PC (Intel Core i9-14900HX, CPU int8), not counting model loading (chart)

On my PC, small transcribed 60 seconds of audio in 48.0 seconds and medium in 231.3 seconds. Medium is about 4.8 times slower. Loading the model took another 8.2 seconds for small and 21.3 seconds for medium.

At that rate, a 10-minute narration takes close to 40 minutes with medium on a CPU. You can do other work while it runs, so for checks where accuracy matters, use medium. Use small only for a quick rough look. Timing depends on the CPU, the audio length and the speaking speed, so the best estimate is to time a short file on your own PC first.

6. Reading an SRT file

Open narration_medium.srt in Notepad and it has the same shape as Figure 3. Figure 3 is an example made with made-up sentences to show the format.

Text on a dark background. Three blocks such as number 1, 00:00:00,000 --> 00:00:02,400, then a line of made-up Korean text, separated by blank lines Figure 3. The shape of an SRT file: three cues of made-up example sentences (chart)

SRT (SubRip) is the simplest subtitle format. Like a cinema timetable, it only says what starts when and ends when.

LineExampleMeaning
11Cue number
200:00:00,000 --> 00:00:02,400Start --> end. Hours:minutes:seconds,milliseconds
3(text)What appears on screen
4(blank line)End of the cue

YouTube Help lists SubRip (.srt) as a basic supported format. Styling is ignored, and the file must be saved as UTF-8. The script above saves with encoding="utf-8", so non-English text does not break. When you edit and save in Notepad, check that the encoding is UTF-8.

If you upload the transcript as it is, the subtitle text will differ slightly from the script (like the swapped particles in Figure 1). Fix the text against the script before uploading: keep the timing from the transcript and the words from the script.

7. Fixing misread lines

Once the text has found the suspects, listen to only those lines and decide. If the voice really did read a line wrong, the thing to change is the text you send to the AI voice. When we transcribed all 105 lines of the same narration with medium, 7 lines were remade. The kinds of mistakes and the fixes:

Kind of mistakeWhat we changed in the voice textResult
Two joined words heard as one unrelated wordPut a space between themFixed first try
Two words blurred into one lumpAdded one particleFixed first try
Ran into the word before and sounded like another verbAdded a comma and a word before itFixed first try
A foreign proper name heard as a similar Korean wordAdded the country and a type wordFixed on the second try
A number and its unit blurred togetherAdded a space and a word after itSecond version kept after listening
Vowel stretched after a commaRemoved the commaSounded like another word, so the first version was kept
Letters with the same soundAdded a spaceNo change, so the first version was kept

Of the 7 lines, 3 were fixed on the first try, 2 used the second version, and 2 did not improve, so the first version was kept.

Three tips:

  • Add a space or a comma to make word boundaries clear. It stops sounds from blurring into a different word.
  • Add one word or particle to make the meaning clear. The on-screen subtitle keeps the script; only the voice text changes.
  • If a fix makes it worse, go back. In the sixth row, removing the comma made it sound like a different word. Try at most twice per line, and if it still is not right, listen and judge whether it is good enough.

How to write numbers the way they should be spoken, and how to plan script length, are in Planning AI narration length.

Exercises

  1. Record 30 seconds of your own voice, transcribe it with small and medium, and count how many words differ between the two.
  2. Run the same file without language=... and check which language it picked.
  3. Make the end time of the second cue in your SRT 0.5 seconds later, and check that it does not overlap the next cue.

Common mistakes and fixes

SymptomCauseFix
Error when running on the GPUcuBLAS for CUDA 12 or cuDNN 9 missingInstall the libraries, or run with device="cpu", compute_type="int8"
Subtitle text is garbledFile is not UTF-8Save as UTF-8 in Notepad's Save As dialog
Numbers differ from the scriptSmall-model mistake, or just a different way of writing numbersRe-run with medium or larger; don't count digit-vs-word differences as errors
The first run takes very longDownloading the modelWait. Later runs are faster
Subtitle times drift after long silencesLong silent parts blur segment boundariesRe-run with vad_filter=True to skip silence

Summary

Transcribe with faster-whisper medium to get an SRT, listen only to lines whose text differs from the script, and fix misread lines by changing only the voice text with a space, a comma or one extra word.

Next, Planning AI narration length shows how to match the real speaking length while you write the script.

References

KEEP EXPLORING

Read next

Horizontal bar chart. A0 planned 20 s, real 12.6 s; A1 116 s, 78.5 s; A2 147 s, 98.2 s; A3 150 s, 103.0 s; A4 184 s, 123.2 s; A5 54 s, 34.4 sAI & IT tools
AI Tools11 min read

Planning AI narration length: characters per second, spelling out numbers, and fitting each line to its shot

From a real 105-line ElevenLabs narration for an 8-minute explainer: why a script planned at 5 characters per second came out more than 30% short, how to set the rate, how to spell numbers the way they are spoken, how to make one file per line while passing the neighboring text, and how to re-time shots from measured speech.

Top of the Artificial Analysis text-to-image leaderboard AA-Image-T2I v2.1. Rank 1 GPT Image 2.5 Sunburst (max) 1222, rank 2 GPT Image 2.5 Flare (max) 1207, rank 3 GPT Image 2 (high) 1186, rank 4 Nano Banana 2.1 1176, rank 5 MAI-Image-2.6 1166, rank 6 Grok Imagine Image 2.0 1166, rank 7 Nano Banana 2 1140, price per 1,000 images on the rightAI & IT tools
AI Tools13 min read

Choosing an AI image model in autumn 2026: GPT Image 2.5 and Nano Banana 2.1 compared

Names, release dates, prices, and leaderboard positions of GPT Image 2.5 (Flare and Sunburst) and Nano Banana 2.1, the image models that arrived in autumn 2026, checked against official sources, plus simple rules for picking one by use.

A low-poly desert at sunset. Four launchers fire missiles, a three-ring aim circle with 90% sits among drones marked by red diamonds, and the top left shows remaining launchers 4/4 and remaining missiles 26 (Godot run screenshot)AI & IT tools
AI Tools18 min read

Building Godot game scenes with Claude Code: notes from an air defense game and a canyon flight game

Based on real notes from making an air defense mini game, a penalty shootout, and a canyon flight game with Godot 4.7.2 and Claude Code, this guide covers what to prepare, the first plan, moving Blender models over, automatic checks, and the play-and-fix loop, along with the snags we hit.

Higgsfield pricing page switched to Monthly. Four plan cards: Starter $19, Plus $59, Ultra $129, For Teams from $65AI & IT tools
AI Tools15 min read

Reading Higgsfield pricing and credits: what each plan buys and what we actually spent

Read Higgsfield's four individual plans by monthly and annual price, monthly credits, available models, and web-only unlimited generations, then use the real credit log from one sponsored video to estimate the cost of a single clip.

Unreal Engine 5.8 viewport (Korean interface). Three white cubes in a row on a wide floor casting long shadows, with AI_Cube_1, AI_Cube_2, AI_Cube_3 in the Outliner on the rightAI & IT tools
AI Tools13 min read

Letting Claude Code work in Unreal Engine 5.8 with the MCP plugin: from enabling the experimental feature to placing three cubes

Enable the Unreal MCP plugin that arrived in Unreal Engine 5.8 as an experimental feature, connect Claude Code, get a summary of the level, and have it place three cubes. It also covers what to watch out for with an experimental feature and how to undo changes.

The AA-Video-I2V v2.1 leaderboard on Artificial Analysis. 1st Dreamina Seedance 2.5 1152, 2nd Utopai X 1144, 3rd Dreamina Seedance 2.0 1135, 4th MiniMax H3 (768p) 1129, 8th MiniMax H3 Max 1115, 9th Wan 3.0 1111, 11th FLUX 3 1071, 13th Grok Imagine Video 1.5 1050, 14th Gemini Omni Flash 1.1 1043, 17th Kling 3.0 1080p (Pro) 1000AI & IT tools
AI Tools18 min read

How to choose an AI video model: recommendations for live action, animation, film, and motion

Eight AI video models sorted by use: live action, animation and games, film-style camera work, human motion and physics, sound and lip-sync, keeping the same character, and saving money, with leaderboard evidence and results from our own use.