SKILL.md
Transcribe YouTube Videos
Fetch transcripts from any YouTube video. No API key required.
When to Activate
- User shares a YouTube URL and wants to discuss its content
- User asks "what did they say about X in this video?"
- User references a video and needs the transcript
- User wants to summarize, quote, or analyze video content
Workflow
Step 1: Extract Video ID
Parse the YouTube URL to extract the video ID. Handle these formats:
https://www.youtube.com/watch?v=VIDEO_IDhttps://youtu.be/VIDEO_IDVIDEO_ID(direct ID)
Step 2: Fetch Transcript
Run this single command that handles installation and fetching in one shot:
python3 -c "
try:
from youtube_transcript_api import YouTubeTranscriptApi
except ImportError:
import subprocess, sys
try:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--user', '-q', 'youtube-transcript-api'])
except subprocess.CalledProcessError:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--break-system-packages', '-q', 'youtube-transcript-api'])
from youtube_transcript_api import YouTubeTranscriptApi
def fmt_time(seconds):
m, s = divmod(int(seconds), 60)
h, m = divmod(m, 60)
return f'{h}:{m:02d}:{s:02d}' if h else f'{m}:{s:02d}'
api = YouTubeTranscriptApi()
transcript = api.fetch('VIDEO_ID')
# Print with timestamps every ~30 seconds for navigation
last_ts = -30
for entry in transcript:
if entry.start - last_ts >= 30:
print(f'\n[{fmt_time(entry.start)}]')
last_ts = entry.start
print(entry.text)
"
Replace VIDEO_ID with the extracted ID.
Features:
- Self-installs dependency on first run (handles macOS Homebrew Python)
- Adds timestamp markers every ~30 seconds for easy video navigation
- Clean output without per-line timestamps (reduces noise)
Step 2b: Fetch Without Timestamps (Optional)
If you just need raw text without any timestamps:
python3 -c "
try:
from youtube_transcript_api import YouTubeTranscriptApi
except ImportError:
import subprocess, sys
try:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--user', '-q', 'youtube-transcript-api'])
except subprocess.CalledProcessError:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--break-system-packages', '-q', 'youtube-transcript-api'])
from youtube_transcript_api import YouTubeTranscriptApi
api = YouTubeTranscriptApi()
transcript = api.fetch('VIDEO_ID')
for entry in transcript:
print(f"{entry.start}: {entry.text}")
"
Step 3: Format Output
Present the transcript with:
- A header indicating the video URL
- The full transcript text (without timestamps for readability)
- Optionally offer to save to a file if it's long
Error Handling
If the transcript fetch fails:
- Check if the video has captions enabled
- Try fetching auto-generated captions with language fallback:
python3 -c "
from youtube_transcript_api import YouTubeTranscriptApi
api = YouTubeTranscriptApi()
transcript_list = api.list(video_id='VIDEO_ID')
print('Available transcripts:')
for t in transcript_list:
print(f' - {t.language} ({t.language_code})')
"
Dependencies
Requires youtube-transcript-api Python package. The fetch script auto-installs it on first run, handling:
- Standard Python environments (
--userinstall) - macOS Homebrew Python (
--break-system-packagesfallback)
Manual install if needed:
pip3 install --user youtube-transcript-api
# or on macOS with Homebrew Python:
pip3 install --break-system-packages youtube-transcript-api