Skip to content
Back to skills

Youtube Tools

ASecurity

Free YouTube video downloading, transcript extraction, and metadata retrieval using yt-dlp. Use this skill for downloading YouTube videos (single or bulk), extracting transcripts/subtitles, getting video metadata, or downloading audio-only. This is FREE (no API keys) unlike Apify. Triggers on YouTube download requests, transcript extraction, video metadata, or bulk video downloads.

  • 12 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
documentationpythonshellbashgitapisecuritydocumentation

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 5 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add Casper-Studios/casper-marketplace --skill youtube-tools --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Youtube Tools?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Youtube Tools
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/casper-studios-youtube-tools/badge)](https://www.skillsdirectory.com/skills/casper-studios-youtube-tools)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: youtube-tools
description: Free YouTube video downloading, transcript extraction, and metadata retrieval using yt-dlp. Use this skill for downloading YouTube videos (single or bulk), extracting transcripts/subtitles, getting video metadata, or downloading audio-only. This is FREE (no API keys) unlike Apify. Triggers on YouTube download requests, transcript extraction, video metadata, or bulk video downloads.
---

# YouTube Tools (yt-dlp)

## Overview

Free, local YouTube operations using yt-dlp. No API keys required, no per-video costs. Works offline after installation.

## When to Use This vs Apify

```
┌─────────────────────────────────────────────────────────────────┐
│ DECISION: YouTube Tools (yt-dlp) vs Apify                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│ Use youtube-tools (FREE) when:                                  │
│ ├── Downloading videos to local storage                         │
│ ├── Extracting transcripts/subtitles                            │
│ ├── Getting video metadata (title, duration, views, etc.)       │
│ ├── Bulk downloading playlists or channels                      │
│ ├── Converting to audio-only (MP3)                              │
│ └── You want zero API costs                                     │
│                                                                 │
│ Use apify-scrapers when:                                        │
│ ├── Scraping YouTube SEARCH results                             │
│ ├── Getting comments at scale                                   │
│ ├── Channel analytics and statistics                            │
│ ├── Trending video discovery                                    │
│ └── You need cloud-based processing                             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
```

## Quick Decision Tree

```
What do you need?
│
├── Download video(s)
│   ├── Single video → scripts/download_video.py URL
│   ├── Multiple videos → scripts/download_video.py --urls-file list.txt
│   ├── Playlist → scripts/download_video.py "playlist_url"
│   ├── Audio only → scripts/download_video.py URL --audio-only
│   └── Specific quality → scripts/download_video.py URL --quality 720p
│
├── Get transcript/subtitles
│   ├── Auto-generated captions → scripts/get_transcript.py URL
│   ├── Manual subtitles → scripts/get_transcript.py URL --manual-only
│   ├── Specific language → scripts/get_transcript.py URL --lang es
│   └── All available → scripts/get_transcript.py URL --all-langs
│
├── Get video metadata
│   ├── Single video → scripts/get_video_info.py URL
│   ├── Multiple videos → scripts/get_video_info.py --urls-file list.txt
│   └── Playlist info → scripts/get_video_info.py "playlist_url"
│
└── Advanced
    ├── Age-restricted → scripts/download_video.py URL --cookies-from-browser chrome
    ├── Private videos → Requires authentication (see references/yt-dlp-guide.md)
    └── Live streams → scripts/download_video.py URL --live-from-start
```

## Environment Setup

```bash
# Install yt-dlp (required)
pip install yt-dlp

# Optional: Install ffmpeg for format conversion
# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

# Windows
winget install ffmpeg
```

**No API keys required!** This is completely free.

## Common Usage

### Download Single Video
```bash
python scripts/download_video.py "https://www.youtube.com/watch?v=VIDEO_ID"
```

### Download with Specific Quality
```bash
python scripts/download_video.py "https://youtu.be/VIDEO_ID" --quality 1080p
```

### Download Audio Only (MP3)
```bash
python scripts/download_video.py "https://youtube.com/watch?v=VIDEO_ID" --audio-only
```

### Download Entire Playlist
```bash
python scripts/download_video.py "https://youtube.com/playlist?list=PLAYLIST_ID" --output-dir ./videos
```

### Bulk Download from File
```bash
# Create urls.txt with one URL per line
python scripts/download_video.py --urls-file urls.txt --output-dir ./downloads
```

### Get Transcript
```bash
python scripts/get_transcript.py "https://youtube.com/watch?v=VIDEO_ID"
```

### Get Transcript in Specific Language
```bash
python scripts/get_transcript.py "https://youtu.be/VIDEO_ID" --lang es
```

### Get Video Metadata
```bash
python scripts/get_video_info.py "https://youtube.com/watch?v=VIDEO_ID"
```

### Get Metadata for Multiple Videos
```bash
python scripts/get_video_info.py --urls-file videos.txt --output metadata.json
```

## Output Location

All outputs save to `.tmp/youtube/` by default:
- Videos: `.tmp/youtube/videos/`
- Audio: `.tmp/youtube/audio/`
- Transcripts: `.tmp/youtube/transcripts/`
- Metadata: `.tmp/youtube/metadata/`

## Cost

**FREE** - No API keys, no per-video costs, no subscriptions.

## Security Notes

### Safe by Design
- URL validation: Only accepts YouTube URLs (youtube.com, youtu.be)
- Filename sanitization: Removes dangerous characters
- Output restriction: Only writes to `.tmp/` directory
- No shell injection: Uses subprocess with argument lists, not string concatenation
- No stored credentials: Cookies only used when explicitly requested

### Copyright Warning
- Only download content you have rights to access
- Respect YouTube's Terms of Service
- Do not redistribute copyrighted content
- Use for personal/educational purposes

### Rate Limiting
- yt-dlp has built-in rate limiting
- For bulk downloads, use `--sleep-interval 5` to avoid throttling
- YouTube may temporarily block IPs with excessive requests

## Troubleshooting

### Issue: "Video unavailable"
**Cause:** Video is private, age-restricted, or region-locked
**Solution:** Use `--cookies-from-browser chrome` for age-restricted content

### Issue: "Unable to extract video data"
**Cause:** YouTube changed their page structure
**Solution:** Update yt-dlp: `pip install -U yt-dlp`

### Issue: No subtitles found
**Cause:** Video has no captions (auto or manual)
**Solution:** Use `--list-subs` to see available subtitles first

### Issue: Slow downloads
**Cause:** YouTube throttling or network issues
**Solution:** Try `--concurrent-fragments 4` for faster downloads

### Issue: Format conversion failed
**Cause:** ffmpeg not installed
**Solution:** Install ffmpeg (see Environment Setup)

## Integration Patterns

### Download + Transcribe + Summarize
```bash
# 1. Download video
python scripts/download_video.py "URL" --output-dir .tmp/video

# 2. Get transcript
python scripts/get_transcript.py "URL" --output .tmp/transcript.txt

# 3. Use content-generation to summarize
# (transcript file is now ready for summarization)
```

### Bulk Research Workflow
```bash
# 1. Get metadata for research videos
python scripts/get_video_info.py --urls-file research_videos.txt --output .tmp/metadata.json

# 2. Download transcripts for text analysis
python scripts/get_transcript.py --urls-file research_videos.txt --output-dir .tmp/transcripts

# 3. Use parallel-research to analyze content
```

### Course Content Download
```bash
# Download entire playlist as course modules
python scripts/download_video.py "PLAYLIST_URL" --output-dir .tmp/course --quality 720p

# Get all transcripts for notes
python scripts/get_transcript.py "PLAYLIST_URL" --output-dir .tmp/course/transcripts
```

## Resources

- **references/yt-dlp-guide.md** - Complete yt-dlp reference with all options
- **yt-dlp documentation**: https://github.com/yt-dlp/yt-dlp#readme

Files in this skill

  • SKILL.md8 KB
  • references/yt-dlp-guide.md9 KB
  • scripts/download_video.py15.5 KB
  • scripts/get_transcript.py15.1 KB
  • scripts/get_video_info.py13 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.