I built my own pipeline for this because in my experience the YouTube auto transcripts are quite bad.
I download the raw audio track with yt-dlp, give it to qwen asr for raw transcription, then DeepSeek flash for transcription cleanup, formatting, corrections with web search enabled, etc. I use openrouter to call the models. It's a few cents per video (mostly the asr model at ~12 cents per hour) and quality is great. You could probably use a local asr model if you want to save money, I just don't bother because it's so cheap already.
That only makes sense for videos that don't have official (not auto-generated) transcripts of course. If there are official transcripts that are good you can just get them directly with yt-dlp.
I built my own pipeline for this because in my experience the YouTube auto transcripts are quite bad.
I download the raw audio track with yt-dlp, give it to qwen asr for raw transcription, then DeepSeek flash for transcription cleanup, formatting, corrections with web search enabled, etc. I use openrouter to call the models. It's a few cents per video (mostly the asr model at ~12 cents per hour) and quality is great. You could probably use a local asr model if you want to save money, I just don't bother because it's so cheap already.
That only makes sense for videos that don't have official (not auto-generated) transcripts of course. If there are official transcripts that are good you can just get them directly with yt-dlp.
https://github.com/yt-dlp/yt-dlp
https://news.ycombinator.com/item?id=44381640
yt-dlp --skip-download --write-sub --write-auto-sub --sub-lang en --sub-format json2 "[1]"
[TedTalk] Extracting URL: [1]
[TedTalk] luvvie_ajayi_jones_how_to_be_a_professional_troublemaker: Downloading webpage
ERROR: the JSON object must be str, bytes or bytearray, not NoneType
exit 1
[1] - full URL is: https://www.ted.com/talks/luvvie_ajayi_jones_how_to_be_a_pro...
Did you try
YouTube tries to shut down yt-dlp and sometimes it is good to have the absolute latest code.