youtube-analysis

Extract YouTube video transcripts and produce structured concept analysis with multi-level summaries, key concepts, and actionable takeaways. Pure Python, no API keys, no MCP dependency. Fetches transcripts via youtube-transcript-api with yt-dlp fallback, then Claude analyzes the content directly. Use this skill when the user mentions: analyze youtube video, youtube transcript, summarize this video, what does this video cover, extract concepts from video, video analysis, watch this for me, break down this talk, youtube URL, video summary, lecture notes from video, podcast transcript, conference talk notes, tech talk breakdown, video key points, TL;DR of video, video takeaways, or pastes any URL containing youtube.com or youtu.be.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "youtube-analysis" with this command: npx skills add mathews-tom/praxis-skills/mathews-tom-praxis-skills-youtube-analysis

YouTube Analysis

Extract transcripts from YouTube videos and produce structured concept analysis — key ideas, arguments, technical terms, takeaways, and multi-level summaries — all without API keys or MCP servers.

Reference Files

FilePurpose
scripts/fetch_transcript.pyCore transcript + metadata fetcher (CLI + importable)
scripts/analyze_video.pyOrchestrator: fetch → structure → export scaffold
scripts/utils.pyURL parsing, timestamp formatting, transcript chunking
references/analysis-patterns.mdPrompt patterns for each video type
assets/output-template.mdMarkdown template for final output

Workflow

User provides YouTube URL
        │
        ▼
┌─────────────────────┐
│  Step 0: Deps check │
└────────┬────────────┘
         ▼
┌─────────────────────┐
│  Step 1: Parse URL  │
└────────┬────────────┘
         ▼
┌─────────────────────┐     ┌──────────────┐
│  Step 2: Transcript │────▶│  yt-dlp      │
│  (youtube-t-api)    │fail │  (fallback)  │
└────────┬────────────┘     └──────┬───────┘
         │◀───────────────-────────┘
         ▼
┌─────────────────────┐
│  Step 3: Metadata   │
│  (yt-dlp --dump-json│
└────────┬────────────┘
         ▼
┌─────────────────────┐
│  Step 4: Claude     │
│  analyzes transcript│
└────────┬────────────┘
         ▼
┌─────────────────────┐
│  Step 5: Export MD  │
└─────────────────────┘

Step 0: Ensure Dependencies

Before running any script, verify dependencies are installed:

uv pip install youtube-transcript-api yt-dlp -q

Or run scripts directly with uv run:

uv run --with youtube-transcript-api --no-project python scripts/fetch_transcript.py "URL"

Verify:

python -c "from youtube_transcript_api import YouTubeTranscriptApi; print('OK')"
yt-dlp --version

Step 1: URL Parsing and Validation

Use scripts/utils.py:parse_youtube_url() to extract the video ID. Supported formats:

FormatExample
Standard watchyoutube.com/watch?v=dQw4w9WgXcQ
Short URLyoutu.be/dQw4w9WgXcQ
Shortsyoutube.com/shorts/dQw4w9WgXcQ
Embedyoutube.com/embed/dQw4w9WgXcQ
Liveyoutube.com/live/dQw4w9WgXcQ
With paramsyoutube.com/watch?v=dQw4w9WgXcQ&t=120&list=PLxxx
Bare IDdQw4w9WgXcQ
Mobilem.youtube.com/watch?v=dQw4w9WgXcQ
Musicmusic.youtube.com/watch?v=dQw4w9WgXcQ

If parsing fails, ask the user to provide the URL in a standard format.

Step 2: Transcript Extraction

Run fetch_transcript.py to get the transcript:

cd <skill_dir>/scripts
python fetch_transcript.py "YOUTUBE_URL" --lang en

This outputs JSON to stdout. The script:

  1. Primary path: Uses youtube-transcript-api to scrape captions directly (no API key)
  2. Fallback path: If primary fails, uses yt-dlp --write-sub --write-auto-sub to extract subtitle files
  3. Language handling: Tries requested language first, falls back to any available transcript

The returned JSON contains both individual timestamped segments and a joined transcript_text field.

Or import as a module (used by analyze_video.py):

from fetch_transcript import fetch_video
data = fetch_video("https://youtube.com/watch?v=VIDEO_ID", lang="en")

Step 3: Metadata Extraction

Metadata is fetched automatically by fetch_transcript.py via yt-dlp --dump-json:

  • Title, channel name
  • Duration (seconds)
  • Upload date (YYYY-MM-DD)
  • Description (first 500 chars in scaffold)
  • View count
  • Tags

No separate step needed — fetch_video() returns everything.

Step 4: Concept Analysis

This is where you (Claude) do the work. The scripts provide raw data; you perform the analysis.

Analysis Depth

Choose based on user request or video duration:

DepthWhen to UseSections to Fill
quickUser wants fast overview, or video < 10 minTL;DR, Key Concepts, Takeaways
standardDefault for most videosAll template sections
deepUser wants thorough breakdown, or video > 30 minAll sections + timestamped section-by-section

Analysis Process

  1. Read the full transcript from the JSON output
  2. Identify the video type (or use user-provided hint). See references/analysis-patterns.md for type-specific guidance
  3. Extract key concepts: Main ideas, arguments, claims — each as a bullet with brief explanation
  4. Identify technical terms: Definitions as presented in the video
  5. Pull notable statements: Paraphrase key quotes with approximate timestamps
  6. Synthesize takeaways: Actionable items the viewer should consider
  7. Write the TL;DR: One to three sentences capturing the core message
  8. Suggest related topics: Based on concepts mentioned, what should the viewer explore next

For Deep Analysis

Use utils.chunk_transcript() to break the transcript into 5-minute segments, then analyze each chunk with timestamps:

from utils import chunk_transcript
chunks = chunk_transcript(data["transcript"], chunk_minutes=5)
for chunk in chunks:
    print(f"[{chunk['start_formatted']} - {chunk['end_formatted']}]")
    print(chunk["text"])

Or run the orchestrator with --depth deep:

python analyze_video.py "YOUTUBE_URL" --depth deep

Video Type Patterns

TypeKey Extraction FocusSee
LectureThesis, arguments, citations, definitionsreferences/analysis-patterns.md
TutorialSteps, tools, prerequisites, gotchasreferences/analysis-patterns.md
InterviewPerspectives, disagreements, attributed positionsreferences/analysis-patterns.md
PodcastTopic threads, opinions, recommendationsreferences/analysis-patterns.md
Tech TalkArchitecture, trade-offs, benchmarks, lessonsreferences/analysis-patterns.md
PanelConsensus vs. disagreement, per-speaker viewsreferences/analysis-patterns.md

Read references/analysis-patterns.md for detailed extraction guidance per type.

Step 5: Export to Markdown

The orchestrator generates a scaffold:

cd <skill_dir>/scripts
python analyze_video.py "YOUTUBE_URL" --output ./analysis.md --depth standard --type auto

Flags:

  • --output PATH: Where to write (default: ./{sanitized_title}.md)
  • --depth quick|standard|deep: Analysis depth
  • --type auto|lecture|tutorial|interview|podcast|tech-talk|panel: Video type hint
  • --lang CODE: Transcript language (default: en)
  • --json: Output raw JSON instead of Markdown scaffold

The scaffold contains populated metadata and [TO BE ANALYZED] placeholders. Claude replaces these with actual analysis.

Preferred workflow: Run fetch_transcript.py to get JSON, analyze in context, then produce the final Markdown directly using assets/output-template.md as the structure guide. The orchestrator is useful for batch processing or when the user wants a file written.

Error Handling

ErrorExit CodeCauseResolution
URL parse failure1Invalid or unsupported URL formatAsk user for standard YouTube URL
No transcript2Video has no captions (manual or auto)Inform user; suggest a different video
Video unavailable1Private, deleted, or geo-blockedInform user of the restriction
Age-restricted1Requires authenticationInform user; yt-dlp may work with cookies
Metadata fetch fail0yt-dlp network issueTranscript still works; metadata shows "Unknown"
Language unavailable0Requested lang not availableAuto-falls back to available language
yt-dlp not installed1Missing dependencyRun Step 0 dependency installation

Limitations

  • No visual analysis: Transcript-only; slides, diagrams, code on screen, and demos are not captured. Note this in output when relevant.
  • Auto-caption quality: Auto-generated captions may contain errors, especially for technical terms, proper nouns, and non-English accents.
  • Music videos: Lyrics may not be available as captions. Music-only content produces poor results.
  • Live streams: Ongoing live streams may have incomplete or unavailable transcripts.
  • Rate limiting: Excessive requests to YouTube may trigger temporary blocks. Space requests if processing multiple videos.
  • Language coverage: Best results for English. Other languages depend on caption availability and quality.
  • Speaker attribution: Transcripts rarely identify individual speakers. Claude infers from context where possible.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

github

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

code-refiner

No summary provided by upstream source.

Repository SourceNeeds Review
General

manuscript-review

No summary provided by upstream source.

Repository SourceNeeds Review
General

html-presentation

No summary provided by upstream source.

Repository SourceNeeds Review