// HOW-TO · TRANSCRIPTION

How to generate video transcripts (formats, timestamps, and speaker labels, 2026)

Generate accurate video transcripts with timestamps, SRT/VTT export, and speaker labels — from free Whisper to hosted APIs — plus an automated pipeline path.

Last verified · 2026-08-26 · by Moe Ameen

Generating a transcript is not one task — it is a set of choices that decide whether the file is useful. A subtitle track for a Reel, a plain-text draft for a blog, and a JSON file a script can parse are three different outputs from the same audio, and picking the wrong one means redoing the work. The good news is that in 2026 the accuracy problem is largely solved: modern speech-to-text hits roughly 95–99% on clear, single-speaker English, so the real skill is choosing the right engine, the right timestamp granularity, and the right export format for what you are building.

This guide is the generation side specifically — how to produce a transcript with the timestamps, speaker labels, and file format you need. If your goal is a punctuated block of text to repurpose into posts, the companion guide on [turning a video into clean text](/how-to/turn-a-video-into-clean-text) covers the cleanup-and-repurpose path; if you want burned-in captions, see [adding captions to video with AI](/how-to/add-captions-to-video-with-ai). Here we stay on the transcript file itself: what to generate, how, and in what shape.

The steps

  1. Step 1 — Decide the output format before you generate. The format is set by the destination, not the tool. Plain text (.txt) is for reading, editing, or feeding an LLM to draft posts. SubRip (.srt) and WebVTT (.vtt) carry timecoded caption blocks and are what you upload as a subtitle track or burn onto a video. JSON with word-level timestamps is for programmatic use — clipping, search, or aligning text to frames. Most engines can emit all four, but choosing up front tells you which timestamp granularity to ask for in Step 3.
  2. Step 2 — Choose a transcription engine. Three practical tiers. Free and accurate: OpenAI's open-source Whisper — large-v3 for top quality, or the newer large-v3-turbo, which is faster and lighter for a small accuracy trade. Very low error rate: OpenAI's hosted gpt-4o-transcribe posts a markedly lower word error rate than open Whisper and sits among the top hosted models (independent 2026 benchmarks put specialized services like ElevenLabs Scribe and Google Chirp at the very lowest WER). Fastest hosted Whisper: providers like Groq serve Whisper large-v3-turbo at high speed. Managed apps (AssemblyAI, Deepgram, Descript, Otter) bundle diarization and clean exports for a per-minute or subscription fee. If the video is already on YouTube, its auto-captions are a free but unpunctuated starting point.
  3. Step 3 — Generate with the right timestamp granularity. Plain Whisper emits segment- (utterance-) level timestamps that can drift by seconds — fine for a text draft, not for tight subtitles or clipping. If you need caption blocks or frame-accurate word timing, use WhisperX, which adds forced phoneme alignment on top of Whisper for sub-100ms word-level timestamps. Request word-level timing when you plan to export SRT/VTT with controlled words-per-line, or JSON for a clipping workflow; skip it for a read-only .txt.
  4. Step 4 — Add speaker labels for multi-speaker audio. Pure Whisper returns one continuous block with no idea who is speaking, so interviews and panels come out scrambled. Speaker diarization is a separate model layered on top: WhisperX integrates pyannote.audio to assign a speaker label to each word-level segment, and hosted apps like AssemblyAI or Descript offer diarization as a toggle. Run it whenever more than one voice is in the audio; skip it for a solo talking-head, where it only adds noise.
  5. Step 5 — Export the file your destination expects. Now render the format you chose in Step 1. For subtitles, export .srt or .vtt and set a words-per-block cap (roughly 5–7 words per line reads best on mobile). For a repurposing draft, export .txt and expect to punctuate and strip filler afterward. For a pipeline, export JSON and keep the word timestamps. Save the JSON even when you only need captions today — it is the one format you cannot regenerate later without re-running the whole transcription.
  6. Step 6 — Translate or localize if you need other languages. Whisper has a built-in translate task that outputs an English transcript from non-English speech in one pass. For any other target language, transcribe in the source language first, then translate the finished text — machine translation of clean transcript text is more reliable than asking the speech model to both hear and translate. Keep the timestamps aligned to the original audio so a translated subtitle track still lands on the right frames. The companion guide on [translating a video with AI](/how-to/translate-a-video-with-ai) covers the full localization workflow.

Common gotchas

  • Accuracy is set upstream by the audio, not the engine. A close mic and one speaker at a time yields 95–98%; a noisy room, heavy accents, or overlapping voices can push word error rate up 20–50% no matter which model you run.
  • Whisper hallucinates during long silences — it can invent a sentence where no one is speaking. large-v3 supports a hallucination_silence_threshold; enable it, or trim dead air before transcribing.
  • large-v3-turbo is faster and lighter but trades a little accuracy for it. For a quick draft that is fine; for a published caption track on domain-heavy audio, large-v3 or gpt-4o-transcribe is safer.
  • Segment-level timestamps drift by seconds. If your SRT lines land late or your clips start mid-word, you generated utterance-level timing — switch to WhisperX forced alignment for word-level accuracy.
  • SRT and VTT are not interchangeable everywhere. VTT is the web/HTML5 standard and supports styling; SRT is the universal fallback most editors and platforms accept. Export the one your destination documents, not whichever your tool defaults to.
  • Long files exceed model and API limits. Whisper processes in 30-second windows and hosted APIs cap upload size — chunk a multi-hour recording or use a tool that handles chunking, or the job fails partway with no clear error.
Legal note

Only transcribe and publish content you own or have permission to use. A video being public does not make its words yours — generating a transcript from someone else's video and republishing the text or captions under your account can infringe their copyright. Your own recordings and licensed or permission-cleared content are fine; when in doubt, ask.

Where Kompozy fits

Everything above treats the transcript as a file you generate, name, and manage — pick an engine, choose timestamps, export the right format, keep the JSON around. That is the correct workflow when the transcript is your deliverable. Inside [Kompozy](/) the transcript is not a deliverable at all; it is internal plumbing the engine generates once and quietly reuses. Kompozy is a full AI content generation and multi-platform publishing engine, and when you feed it a video, it runs Whisper transcription as a step you never see, then spends that one transcript in several places at once — you never open an SRT file or line up a timecode by hand.

Concretely, that single generated transcript drives three jobs the guide would have you run as separate tools. It becomes the word-timed caption track burned onto a [Persona Short or a Clipped Short](/glossary/persona-shorts), so your vertical video ships captioned without a subtitle export step. It marks the strongest passages that a [Clipped Short](/glossary/clipped-short) is cut from, so clip selection reads the words instead of you scrubbing the timeline. And it becomes the source text a [Blog Article, Newsletter, or set of Text Posts](/glossary/output-buckets) is written from — filtered through a [Persona Brief](/glossary/persona-brief) and a banned-word list so the published copy is in your register, not the verbatim "um, so, you know" of the raw audio. One transcription, many finished outputs, none of the file management.

The honest boundary: if what you actually want is a standalone .srt to hand an editor, a .txt to archive, or a diarized interview transcript to quote from, a dedicated transcriber — free Whisper or a hosted app — is the right tool and Kompozy is the wrong shape, because it does not hand you the transcript file to keep. Kompozy earns its place when the transcript is a means to published content: you want the video to become a captioned short, a clip, and a blog across the eight social platforms plus blog and email, on a schedule, with a per-post review gate before anything ships. [Autopilot](/glossary/autopilot) runs the cadence; you approve each piece. Creator ($49/mo for 2,500 credits) fits a solo creator turning each video into a content set; Pro ($299/mo for 18,000 credits) suits a brand or agency running many recordings into multi-format output; Enterprise is custom.

Frequently asked questions

What is the difference between SRT, VTT, and a plain-text transcript?

A .txt transcript is just the words, for reading or editing. SRT (.srt) and VTT (.vtt) are subtitle files that carry timecoded blocks you upload or burn onto a video — VTT is the web standard and supports styling, SRT is the more universal fallback. JSON with word-level timestamps is a fourth option for programmatic use like clipping or search. Generate the one your destination expects; converting between them after the fact loses timing precision.

What is the most accurate way to generate a video transcript in 2026?

For raw accuracy, OpenAI's hosted gpt-4o-transcribe posts a much lower word error rate than open Whisper and ranks among the top hosted models, though independent 2026 benchmarks give the outright lowest WER to specialized services like ElevenLabs Scribe. For a free path, open-source Whisper large-v3 reaches near-human accuracy on clear audio. But the biggest accuracy lever is the audio itself — a close mic in a quiet room with one speaker at a time beats any model choice on a noisy recording.

Do I need word-level timestamps?

Only if you are producing tight subtitles or pulling video clips that must line up with the text. For a read-only transcript or a repurposing draft, segment-level timing is enough. When you do need frame accuracy, use WhisperX forced alignment (sub-100ms word timing) rather than plain Whisper, whose timestamps drift by seconds.

How do I generate a transcript that separates speakers?

Add speaker diarization — a model that runs alongside transcription to label who spoke each segment. WhisperX integrates pyannote.audio for this, and hosted apps like AssemblyAI, Deepgram, and Descript offer it as a setting. Pure Whisper does not diarize on its own, so a multi-speaker recording without it comes out as one unattributed block.

How long does it take to transcribe a video?

It depends on the engine and hardware. A hosted API or a GPU running Whisper large-v3-turbo transcribes far faster than real time — often a fraction of the clip length — while Whisper large-v3 on a CPU can run near or slower than real time. Diarization and forced alignment add a pass, so a multi-speaker transcript with word timing takes longer than a plain one.

Related tutorials

← All how-to guides · Get Started