youtube-text-fetch

Fetch transcript/caption text from YouTube videos using youtube-transcript-api. Use when: (1) User wants text from a YouTube video, (2) User provides YouTube URLs and needs transcripts, (3) User says

SKILL.md

GitHub

YouTube Text Fetch

Fetch transcript/caption text from YouTube videos.

Note: For visual analysis of a YouTube video (extracting frames and reading them chronologically with vision to produce a timestamped narrative, e.g. debugging a recording or answering "what happens in this video"), use the /video-reader skill instead. This skill is for quick transcript-only extraction.

Prerequisites

Requires youtube-transcript-api Python package:

pip3 install youtube-transcript-api

If not installed, install it automatically before proceeding.

Workflow

1. Parse Video IDs

Extract video IDs from provided URLs. Supported formats:

  • https://youtu.be/<ID>
  • https://youtu.be/<ID>?si=...
  • https://www.youtube.com/watch?v=<ID>
  • https://youtube.com/watch?v=<ID>&...

Check if --timestamps flag is present (include timestamps in output).

2. Fetch Transcripts

For each video ID, run:

With timestamps (default when --timestamps flag is used, or when writing guide articles):

python3 -c "
from youtube_transcript_api import YouTubeTranscriptApi
snippets = YouTubeTranscriptApi().fetch('VIDEO_ID')
for s in snippets:
    minutes = int(s.start // 60)
    seconds = int(s.start % 60)
    print(f'[{minutes:02d}:{seconds:02d}] {s.text}')
"

Plain text (default):

python3 -c "
from youtube_transcript_api import YouTubeTranscriptApi
snippets = YouTubeTranscriptApi().fetch('VIDEO_ID')
for s in snippets:
    print(s.text)
"

If the default language fails, try fetching with specific language codes:

python3 -c "
from youtube_transcript_api import YouTubeTranscriptApi
snippets = YouTubeTranscriptApi().fetch('VIDEO_ID', languages=['en', 'ja'])
for s in snippets:
    print(s.text)
"

3. Save Output

Determine the log directory first:

LOGDIR=$(node $HOME/.claude/scripts/get-logdir.js)
mkdir -p "$LOGDIR"

Save each transcript to $LOGDIR/youtube-<VIDEO_ID>.txt.

If multiple videos are provided, also create a combined file $LOGDIR/youtube-combined.txt with clear separators between each video's transcript.

4. Report

Print a summary of what was fetched:

  • Video ID
  • Language detected
  • Approximate word/character count
  • Output file path

Alternative: yt-tools Sub-Package

If the project has the sub-packages/yt-tools/ sub-package, it provides a more comprehensive workflow including video download and frame capture:

cd sub-packages/yt-tools
pnpm download <youtube-url>        # Downloads video + metadata + transcript
pnpm capture:auto <video-id>       # Auto-captures frames at intervals

Use yt-tools when you need the full video processing pipeline (download, capture, transcript). Use this skill (/youtube-text-fetch) when you only need the transcript text.