video-transcript-extraction — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited video-transcript-extraction (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Seed question: How do I get the transcript of this video?
Extract text transcripts from any video source. Platform-aware — detects what tools are available and guides to the best method.
Before extracting, determine available tools:
| Tool | Check | Best For |
|---|---|---|
youtube-transcript-api | pip show youtube-transcript-api | YouTube caption extraction (fastest) |
| MLX-Whisper MCP | Check .mcp.json for mlx-whisper | Apple Silicon local transcription (any video) |
| Whisper-cpp MCP | Check .mcp.json for whisper-cpp | Cross-platform local transcription |
Guide user to install what's missing for their platform if needed.
1. YouTube URL?
→ Method A: Caption extraction (youtube-transcript-api)
→ Fallback: Whisper if no captions available
2. Other video URL?
→ Check if platform provides captions
→ Fallback: Whisper transcription
3. Local video/audio file?
→ Method C: Whisper directly
→ Apple Silicon: MLX-Whisper (faster)
→ Other: Whisper-cppyoutube_transcript_api VIDEO_ID
youtube_transcript_api VIDEO_ID --languages en es
youtube_transcript_api VIDEO_ID --json > transcript.jsonfrom youtube_transcript_api import YouTubeTranscriptApi
transcript = YouTubeTranscriptApi.get_transcript("VIDEO_ID")
text_only = " ".join([t['text'] for t in transcript])
# List available languages
transcript_list = YouTubeTranscriptApi.list_transcripts("VIDEO_ID")for vid in VIDEO_ID_1 VIDEO_ID_2 VIDEO_ID_3; do
youtube_transcript_api "$vid" --json > "transcripts/${vid}.json"
sleep 2
donemcp__mlx-whisper__transcribe_youtube(
url="VIDEO_URL",
language="en",
task="transcribe",
keep_file=true
)mcp__whisper-cpp__transcribe(
file_path="/path/to/video.mp4",
language="en"
)| Service | URL | Notes |
|---|---|---|
| YouTubeToTranscript | youtubetotranscript.com | Manual, unlimited |
| YouTube-Transcript.io | youtube-transcript.io | 5 req/10s |
| YouTube built-in | Click "..." > "Show transcript" | Manual only |
1. CHECK: Does video have existing captions?
→ Try youtube-transcript-api first (fastest, zero compute)
→ Check language availability
2. IF NO CAPTIONS: Use Whisper
→ Apple Silicon: MLX-Whisper MCP
→ Other: Whisper-cpp MCP
3. IF TOOLS UNAVAILABLE: Web services
→ youtubetotranscript.com
→ Manual from YouTube UI
4. PROCESS: Clean transcript
→ Remove timestamps if not needed (saves tokens)
→ Save to file for downstream analysisTranscripts can be long. Strategies:
" ".join([t['text'] for t in transcript]) — saves ~30% tokensall_transcripts.md with --- separators| Issue | Solution |
|---|---|
| "Transcripts disabled" | Use Whisper transcription (Method B) |
| "Language not available" | Try auto-generated captions, or Whisper with task="translate" |
| "Rate limited" | Add delays between requests |
| "MCP not connected" | Restart Claude Code, check .mcp.json |
| "Long video truncation" | Use Whisper (no length limit) or chunk processing |
Activation (any of these):
--budget or -bbudget-mode skill is active in sessionWhen active:
Note: After context compaction, auto-detection may fail. Re-invoke budget-mode skill or pass --budget explicitly.
A vasana is a pattern that persists across unrelated contexts. If during this task you notice such a pattern emerging, it may be worth capturing. This skill works best alongside the vasana skill and vasana hook from the Vasana System plugin.
Modify freely. Keep this section intact.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.