Youtube transcribe
My agent skills
npx -y skills add chenwei791129/agent-skills --skill youtube-transcribeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Transcribe a YouTube video (or any local audio/video file) into a text transcript, SRT subtitles, and JSON using whisper locally. Use this whenever the user shares a YouTube URL and wants its subtitles, captions, transcript, 字幕, or 逐字稿 — especially when the video has no captions to download — or wants to transcribe / 轉錄 an audio or video file. Triggers on requests like "幫我抓這部 YouTube 的字幕/逐字稿", "transcribe this video", "把這段音檔轉成文字". Runs locally and is cross-platform: mlx-whisper on Apple Silicon, faster-whisper elsewhere.
SKILL.md
5.5 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
YouTube / Audio Transcription
Turn a YouTube video — or any local audio/video file — into a transcript without relying on YouTube-provided captions. Many videos (especially re-uploads and some Chinese-language uploads) have no subtitles and no auto-captions, so downloading captions with yt-dlp --write-subs returns nothing. This skill sidesteps that by downloading the audio and transcribing it locally with a whisper engine chosen by platform.
When to reach for this
- The user gives a YouTube URL and wants the 字幕 / 逐字稿 / transcript / captions.
yt-dlp --list-subsreportshas no subtitles/has no automatic captions.- The user has a local
.m4a/.mp3/.mp4/etc. file to transcribe.
Prerequisites
uvinstalled (used to runyt-dlpand the transcription script without polluting the global env). The script auto-selects the whisper engine anduvinstalls only the one your platform needs:- Apple Silicon Mac →
mlx-whisper(MLX/Metal, GPU-accelerated). - Intel Mac / Linux / Windows →
faster-whisper(CTranslate2, CPU or NVIDIA CUDA).
- Apple Silicon Mac →
- A JavaScript runtime —
node,bun, ordeno— on PATH. Recent yt-dlp needs one to extract YouTube; the script auto-detects whichever is present. - ffmpeg recommended but not required: if absent, the script falls back to macOS's built-in
afconvert(so on non-macOS, install ffmpeg).
Usage
The whole pipeline is one self-contained script. Run it with uv run so dependencies are provisioned automatically:
uv run ~/.claude/skills/youtube-transcribe/scripts/yt_transcribe.py \
"https://www.youtube.com/watch?v=VIDEO_ID" \
--output-dir /tmp/whisper_out
Common options:
--language zh— force a language instead of auto-detecting (faster, avoids mis-detection on bilingual intros).--model mlx-community/whisper-large-v3-turbo— the default; good speed/quality on Apple Silicon. Swap formlx-community/whisper-large-v3for max quality or a smaller model for speed.--output-name my-video— base filename for outputs (defaults to the video id).--formats txt,srt— pick which outputs to write (defaulttxt,srt,json).
A local file works the same way — just pass a path instead of a URL:
uv run ~/.claude/skills/youtube-transcribe/scripts/yt_transcribe.py /path/to/talk.m4a --language en
The first run downloads the whisper model (~1.6 GB for turbo) into the Hugging Face cache; later runs reuse it.
Outputs
Written to --output-dir (default: current directory), named after the video id (or --output-name):
<name>.txt— plain-text transcript (one blob).<name>.srt— subtitles with timestamps.<name>.json— full result incl. per-segment timestamps and detected language.
After transcribing
The raw whisper output reflects the spoken language verbatim. If the audio is Mandarin, whisper emits Simplified Chinese. Per the user's global rule, when presenting the transcript in chat, convert it to 正體中文 (Traditional) and clean up obvious mis-hearings of proper nouns / technical terms (model names, CVE ids, tool names). Offer a tidied, sectioned summary rather than dumping the full wall of text, and tell the user where the full files live.
How it works (and why)
- Download audio —
yt-dlp -f "bestaudio[ext=m4a]/bestaudio". Format 140 (128 kbps m4a) downloads without solving YouTube's player JS "n" challenge, so we avoid--remote-components ejs:github(it fetches+runs remote code and is typically blocked by the sandbox). The script prefixesuvxifyt-dlpisn't installed, and adds--js-runtimes <node|bun|deno>for whichever runtime exists. - Normalize audio — convert to 16 kHz mono 16-bit WAV with ffmpeg, or macOS
afconvertif ffmpeg is missing. - Transcribe — read the WAV into a numpy float32 array and pass it straight to the engine (
mlx_whisper.transcribe(...)on Apple Silicon,faster_whisper.WhisperModel.transcribe(...)elsewhere). Both produce the same normalized result shape (text/language/segments). Handing whisper a decoded array means it never shells out to ffmpeg internally — which is the usual cause ofFileNotFoundError: ffmpegon machines without it.
Troubleshooting
has no subtitlesbut you still want text — that's exactly this skill's job; proceed to transcribe the audio.FileNotFoundError: ffmpeg— shouldn't happen via this script (it converts first), but if you call the whisper engine directly on an m4a, convert to WAV first.- On non-Apple-Silicon and conversion fails —
afconvertis macOS-only, so installffmpeg(Linux/Windows have no built-in fallback). - yt-dlp warns about JS challenge / "Only images are available" — ensure
node/bun/denois on PATH; the script needs one for extraction. Do not reach for--remote-components ejs:githubto fix it. - Garbled / wrong-language output — pass
--languageexplicitly.
What ships with it: 1 file
10.9 KB alongside SKILL.md, 1 of them executable
scripts/
- yt_transcribe.pyruns10.9 KB
Gives 0 of the 12 instructions most video audio skills give in ~1.3k tokens
Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07
- Read individual rule files for detailed explanationsin 21 of 622, across 10 files
- Render final videoin 13 of 622, across 6 files
- Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
- Use this skill when dealing with Remotion codein 11 of 622, across 4 files
- Save generated audio to a WAV filein 11 of 622, across 4 files
- Handle conversion errors gracefullyin 10 of 622, across 6 files
- Add captions to videos alwaysin 10 of 622, across 4 files
- Generate music from text descriptions using MusicGenin 9 of 622, across 2 files
- Do not skip pipeline layersin 9 of 622, across 3 files
- Do not make one tool do everythingin 9 of 622, across 3 files
- Use Azure Document Intelligence for complex PDFsin 9 of 622, across 4 files
- Never ask the user to paste their full API keyin 9 of 622, across 3 files
Said here and by no other author read
- run the pipeline script using uv
- force a language explicitly if output is garbled
- pick desired output formats
- clean up misheard proper nouns
- present a sectioned summary in chat
- tell the user where output files are
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.