AgentSkillsCN

video-downloader

使用 yt-dlp 从 1000 多个网站(如 YouTube、Bilibili、Twitter/X、TikTok 等)下载视频。当用户提供视频 URL 并希望下载视频、提取音频,或在视频下载过程中遇到问题时,可使用此技能。

SKILL.md
--- frontmatter
name: video-downloader
description: Download videos from 1000+ websites (YouTube, Bilibili, Twitter/X, TikTok, etc.) using yt-dlp. Use this skill when users provide video URLs and want to download videos, extract audio, or need help with video download issues.

Video Downloader

Overview

Download videos from YouTube, Bilibili, Twitter/X, TikTok, and 1000+ other websites using yt-dlp. Supports multiple quality options, audio extraction, and automatic format selection.

When to Use This Skill

Invoke this skill when users:

  • Provide a video URL and want to download it
  • Ask to download videos from any website
  • Want to extract audio from online videos
  • Need to download videos in specific quality (1080p, 4K, etc.)
  • Request help with video download issues

Quick Start

When a user provides a video URL:

bash
# Run the bundled download script
python3 scripts/download.py "VIDEO_URL"

Default output: ~/Downloads/Videos/

Prerequisites

Install yt-dlp

bash
# macOS
brew install yt-dlp

# Cross-platform (pip)
pip install yt-dlp

# Update to latest version
brew upgrade yt-dlp  # or: pip install --upgrade yt-dlp

Verify Installation

bash
which yt-dlp && yt-dlp --version

Common Download Commands

Basic Download (Best Quality)

bash
yt-dlp -P ~/Downloads/Videos "VIDEO_URL"

Specific Quality

bash
# Best quality up to 1080p
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best" -P ~/Downloads/Videos "VIDEO_URL"

# Best quality up to 720p
yt-dlp -f "bestvideo[height<=720]+bestaudio/best" -P ~/Downloads/Videos "VIDEO_URL"

# Best available (including 4K)
yt-dlp -f "bestvideo+bestaudio/best" -P ~/Downloads/Videos "VIDEO_URL"

Audio Only (MP3)

bash
yt-dlp -x --audio-format mp3 -P ~/Downloads/Videos "VIDEO_URL"

List Available Formats

bash
yt-dlp -F "VIDEO_URL"

Download with Subtitles

bash
yt-dlp --write-subs --sub-lang zh,en -P ~/Downloads/Videos "VIDEO_URL"

Playlist Download

bash
yt-dlp -P ~/Downloads/Videos "PLAYLIST_URL"

Bundled Script Reference

scripts/download.py

Convenience wrapper with sensible defaults:

bash
# Basic usage
python3 scripts/download.py "VIDEO_URL"

# Options
python3 scripts/download.py "VIDEO_URL" -o ~/Desktop          # Custom output
python3 scripts/download.py "VIDEO_URL" -f 1080               # Max 1080p
python3 scripts/download.py "VIDEO_URL" -a                    # Audio only (MP3)
python3 scripts/download.py "VIDEO_URL" -F                    # List formats
python3 scripts/download.py "VIDEO_URL" --subs                # With subtitles

Supported Websites (Examples)

PlatformExample URL Pattern
YouTubeyoutube.com/watch?v=, youtu.be/
Bilibilibilibili.com/video/
Twitter/Xtwitter.com/*/status/, x.com/*/status/
TikToktiktok.com/@*/video/
Vimeovimeo.com/
Twitchtwitch.tv/videos/
Instagraminstagram.com/p/, instagram.com/reel/
Facebookfacebook.com/watch/

Full list: https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md

Platform-Specific Notes

YouTube

For high-quality (1080p+) YouTube downloads, you may need:

  1. Browser cookies (recommended):
bash
yt-dlp --cookies-from-browser chrome "VIDEO_URL"
  1. PO token provider (for persistent access): See references/platform-tips.md for setup instructions.

Bilibili

bash
# Download with best quality
yt-dlp --cookies-from-browser chrome "https://www.bilibili.com/video/BV..."

Twitter/X

bash
# Usually works without authentication
yt-dlp "https://twitter.com/user/status/123456789"

Troubleshooting

"Video unavailable" or "Sign in required"

Use browser cookies:

bash
yt-dlp --cookies-from-browser chrome "VIDEO_URL"

Only Low Quality Available

  1. Update yt-dlp: brew upgrade yt-dlp
  2. Use browser cookies for authentication
  3. Check available formats: yt-dlp -F "VIDEO_URL"

Download Speed Issues

bash
# Limit concurrent fragments
yt-dlp --concurrent-fragments 3 "VIDEO_URL"

# Use specific format to avoid merging
yt-dlp -f best "VIDEO_URL"

Network Errors (China/Proxy)

bash
# Use proxy
yt-dlp --proxy socks5://127.0.0.1:1080 "VIDEO_URL"

# Or set environment variable
export ALL_PROXY=socks5://127.0.0.1:1080
yt-dlp "VIDEO_URL"

Output Format

Default filename template: %(title)s [%(id)s].%(ext)s

Custom template:

bash
yt-dlp -o "%(uploader)s - %(title)s.%(ext)s" "VIDEO_URL"

Further Reading