Twitch VOD Transcription: Tools, Costs and a Workflow
A four-hour stream is impossible to search by ear. A transcript turns it into text you can search, quote, summarize and cut into clips. Twitch's API has no transcript or captions endpoint, so you build this yourself. This guide gives you a working pipeline, the tools at each step, and what it costs.
Before you start: rights
Transcribe streams you own, or streams whose owner has agreed. Downloading someone else's VOD to process it is a rights question, not just a technical one. This is not legal advice; check Twitch's terms and get the creator's permission when in doubt. Also note that past broadcasts are not kept forever on Twitch, so transcribe soon after the stream.
The pipeline
- List VODs. Call Helix Get Videos with the channel's
user_idandtype=archive. Twitch's reference says an app access token is enough. - Get the audio. You need audio only, which is far smaller than video.
- Transcribe locally or with a hosted API.
- Make it useful: timestamps, chapters, search and clip candidates.
Step 2: getting the audio
yt-dlp has Twitch VOD support (its twitch:vod extractor) and can extract audio with ffmpeg:
yt-dlp -x --audio-format mp3 -o "vod_%(id)s.%(ext)s" "https://www.twitch.tv/videos/VIDEO_ID"
TwitchDownloader (MIT) is a good alternative with a GUI, and it can also download and render chat. Keep the chat: messages per minute is a strong signal for where the best moments are.
Step 3: transcription options
| Option | Type | Price | Notes |
|---|---|---|---|
| OpenAI Whisper | Open-source model (MIT) | Free, your hardware | The reference implementation |
| faster-whisper | Open-source (MIT), CTranslate2 | Free, your hardware | Faster than the reference on the same GPU; built-in voice activity filter |
| whisper.cpp | Open-source (MIT), C/C++ | Free, your hardware | Runs well on CPUs and Apple silicon |
| AssemblyAI | Hosted API | Universal-2 $0.15 an hour; Universal-3.5 Pro $0.21 an hour; $50 free credit | No GPU to manage |
| Deepgram | Hosted API | Nova-3 $0.0043 a minute (monolingual), $0.0052 multilingual; $200 free credit | Also offers Whisper Large at $0.0048 a minute |
What it costs
| Option | One 4-hour VOD | 100 hours a month |
|---|---|---|
| AssemblyAI Universal-2 | $0.60 | $15.00 |
| AssemblyAI Universal-3.5 Pro | $0.84 | $21.00 |
| Deepgram Nova-3 monolingual | $1.03 | $25.80 |
| Local faster-whisper | GPU time only | GPU time only |
The formula is hours × price per hour, or minutes × price per minute. Hosted APIs are cheap enough that the deciding factor is usually privacy and convenience, not price. Free credits cover a lot of testing: $50 at AssemblyAI's Universal-2 rate is over 300 hours.
Local or hosted?
- Pick local if you already have a GPU, transcribe a lot every day, or cannot send audio to a third party.
- Pick hosted if you transcribe in bursts, want results without managing models, or need it running this afternoon.
- Mix them: run a hosted API for a week to set a quality baseline, then test a local model on the same files and compare a few minutes by hand.
A local transcription script
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("vod_123.mp3", vad_filter=True)
with open("vod_123.txt", "w") as f:
for s in segments:
f.write(f"[{int(s.start)//3600:02d}:{int(s.start)%3600//60:02d}:{int(s.start)%60:02d}] {s.text.strip()}\n")
The voice activity filter skips long silent or music-only stretches, which are common on streams and are where Whisper models tend to invent text.
Step 4: make the transcript useful
- Chapters. Send the timestamped text to an LLM and ask for 8 to 15 chapters with start times.
- Clip candidates. Join transcript segments with chat rate per minute. Moments where chat spikes and the streamer is talking are your best clip candidates.
- Search. Index segments with their start time so a search result jumps straight to the moment.
- Quality checks. Spot-check names, game terms and slang. Add a custom vocabulary or a post-processing replace list for the channel's recurring terms.
Doing it with ScrapeIO
ScrapeIO does not transcribe full VODs today. It does two useful parts: the Twitch user videos API lists a channel's videos by handle, and the Twitch clip transcript API returns the transcript of a clip from its URL, which covers the moments viewers chose to share. Kick clips have a transcript endpoint too. For other platforms, see our transcripts guide.
Sources
Checked on 8 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.
- https://dev.twitch.tv/docs/api/reference/
- https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md
- https://github.com/lay295/TwitchDownloader
- https://github.com/openai/whisper
- https://github.com/SYSTRAN/faster-whisper
- https://github.com/ggml-org/whisper.cpp
- https://www.assemblyai.com/pricing
- https://deepgram.com/pricing
100 free credits, no card. Credits never expire.
Get API key