YouTube Content
Download videos, extract transcripts, process audio, and research YouTube content with yt-dlp.
Setup
bashpip install yt-dlp # or brew install yt-dlp
Download Video
bash# Default best quality yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID" # Best video + audio yt-dlp -f "bestvideo+bestaudio" "URL" # Specific resolution yt-dlp -f "bestvideo[height<=720]+bestaudio" "URL" # List available formats first yt-dlp -F "URL"
Audio Only
bash# MP3 yt-dlp -x --audio-format mp3 "URL" # Best audio quality yt-dlp -x --audio-quality 0 "URL" # WAV for transcription yt-dlp -x --audio-format wav "URL"
Transcripts / Subtitles
bash# Download auto-generated subtitles (no video) yt-dlp --write-auto-sub --skip-download --sub-lang en "URL" # Download manual subtitles yt-dlp --write-sub --sub-lang en,ko --skip-download "URL" # Convert to readable text yt-dlp --write-auto-sub --skip-download --sub-lang en \ --convert-subs srt "URL" # List available subtitle languages yt-dlp --list-subs "URL"
Parse SRT to plain text:
pythonimport re with open("video.en.srt") as f: content = f.read() # Remove timestamps and indices text = re.sub(r'\d+\n\d{2}:\d{2}:\d{2}.*?\n', '', content) text = re.sub(r'\n{2,}', '\n', text).strip() print(text)
Output Naming
bash# Custom filename yt-dlp -o "%(title)s.%(ext)s" "URL" # With date yt-dlp -o "%(upload_date)s-%(title)s.%(ext)s" "URL" # Into subdirectory yt-dlp -o "downloads/%(uploader)s/%(title)s.%(ext)s" "URL"
Playlists and Channels
bash# Full playlist yt-dlp "https://www.youtube.com/playlist?list=PLAYLIST_ID" # Channel (recent 20) yt-dlp --playlist-end 20 "https://www.youtube.com/@channelname" # Skip already downloaded yt-dlp --download-archive downloaded.txt "PLAYLIST_URL"
Thumbnails and Metadata
bash# Download thumbnail only yt-dlp --write-thumbnail --skip-download "URL" # Write metadata JSON yt-dlp --write-info-json --skip-download "URL" # Embed thumbnail in audio file yt-dlp -x --audio-format mp3 --embed-thumbnail "URL"
Rate Limiting (Be Polite)
bash# Limit download speed yt-dlp --rate-limit 1M "URL" # Add sleep between downloads yt-dlp --sleep-interval 3 --max-sleep-interval 10 "PLAYLIST_URL" # Use cookies (for age-restricted / logged-in content) yt-dlp --cookies-from-browser chrome "URL"
Extract Info Without Downloading
pythonimport yt_dlp ydl_opts = {"quiet": True} with yt_dlp.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info("URL", download=False) print(info["title"]) print(info["description"]) print(info["duration"]) # seconds print(info["view_count"]) print(info["upload_date"])
YouTube Data API v3 (Search)
Requires API key from Google Cloud Console:
pythonimport requests API_KEY = "your-youtube-api-key" query = "machine learning tutorial" resp = requests.get( "https://www.googleapis.com/youtube/v3/search", params={ "key": API_KEY, "q": query, "part": "snippet", "type": "video", "maxResults": 10, "order": "relevance", } ) for item in resp.json()["items"]: print(item["id"]["videoId"], item["snippet"]["title"])
Transcript → Summary Workflow
bash# 1. Download transcript yt-dlp --write-auto-sub --skip-download --sub-lang en --convert-subs srt "URL" # 2. Parse to plain text (see above) # 3. Ask Claude to summarize # "Summarize this transcript: <text>"


