Skip to main content

Downloading Playlists

yt-dlp excels at handling playlists, channels, and other collections of videos. This guide covers the various options and strategies for efficiently downloading multiple videos.

Basic Playlist Operations

Download Entire Playlist

# Download all videos in a playlist
yt-dlp "https://youtube.com/playlist?list=PLAYLIST_ID"

# Download channel uploads
yt-dlp "https://youtube.com/c/channelname"

# Download user uploads
yt-dlp "https://youtube.com/@username"

Playlist Item Selection

# Download specific items by index
yt-dlp -I 1,3,5 "https://youtube.com/playlist?list=PLAYLIST_ID"

# Download range of items
yt-dlp -I 1:10 "https://youtube.com/playlist?list=PLAYLIST_ID"

# Download with step
yt-dlp -I 1::2 "https://youtube.com/playlist?list=PLAYLIST_ID"

# Download in reverse order
yt-dlp -I ::-1 "https://youtube.com/playlist?list=PLAYLIST_ID"

Advanced Playlist Options

Playlist Processing Control

# Process playlist randomly
yt-dlp --playlist-random "https://youtube.com/playlist?list=PLAYLIST_ID"

# Lazy playlist processing (process as received)
yt-dlp --lazy-playlist "https://youtube.com/playlist?list=PLAYLIST_ID"

# Reverse playlist order
yt-dlp --playlist-reverse "https://youtube.com/playlist?list=PLAYLIST_ID"

Flat Playlist Mode

# Extract only metadata, don't download
yt-dlp --flat-playlist "https://youtube.com/playlist?list=PLAYLIST_ID"

# Simulate to see what would be downloaded
yt-dlp --simulate "https://youtube.com/playlist?list=PLAYLIST_ID"

Playlist Organization

Output Templates for Playlists

# Organize by playlist and index
yt-dlp -o "%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"

# Organize by uploader and playlist
yt-dlp -o "%(uploader)s/%(playlist)s/%(title)s.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"

# Include upload date
yt-dlp -o "%(upload_date>%Y)s/%(playlist)s/%(title)s.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"

Playlist Metadata

# Write playlist metadata files
yt-dlp --write-playlist-metafiles "https://youtube.com/playlist?list=PLAYLIST_ID"

# Skip playlist metadata
yt-dlp --no-write-playlist-metafiles "https://youtube.com/playlist?list=PLAYLIST_ID"

Filtering and Selection

Date-based Filtering

# Download videos from last week
yt-dlp --dateafter today-1week "https://youtube.com/c/channelname"

# Download videos from specific date range
yt-dlp --dateafter 20230101 --datebefore 20231231 \
"https://youtube.com/c/channelname"

Quality-based Filtering

# Skip low-quality videos
yt-dlp --match-filters "height>=720" "https://youtube.com/playlist?list=PLAYLIST_ID"

# Filter by duration
yt-dlp --match-filters "duration>300" "https://youtube.com/playlist?list=PLAYLIST_ID"

Archive Management

Download Archive

# Track downloaded videos to avoid re-downloading
yt-dlp --download-archive downloaded.txt \
"https://youtube.com/c/channelname"

# Break on existing files
yt-dlp --break-on-existing \
--download-archive downloaded.txt \
"https://youtube.com/c/channelname"

Limit Downloads

# Limit total downloads
yt-dlp --max-downloads 10 "https://youtube.com/playlist?list=PLAYLIST_ID"

# Break after errors
yt-dlp --skip-playlist-after-errors 3 \
"https://youtube.com/playlist?list=PLAYLIST_ID"

Channel-Specific Features

YouTube Channel Downloads

# Download all channel content
yt-dlp "https://youtube.com/c/channelname"

# Download only videos (not shorts/live)
yt-dlp "https://youtube.com/c/channelname/videos"

# Download shorts only
yt-dlp "https://youtube.com/c/channelname/shorts"

# Download live streams
yt-dlp "https://youtube.com/c/channelname/streams"

Channel Sections

# Download playlists from channel
yt-dlp "https://youtube.com/c/channelname/playlists"

# Download community posts (if available)
yt-dlp "https://youtube.com/c/channelname/community"

Playlist Concatenation

Merge Playlist Videos

# Concatenate all videos in playlist
yt-dlp --concat-playlist always \
-o "%(playlist)s_complete.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"

# Concatenate multi-part videos only
yt-dlp --concat-playlist multi_video \
"https://youtube.com/playlist?list=PLAYLIST_ID"

Performance Optimization

Concurrent Downloads

# Download multiple videos simultaneously (external tool)
yt-dlp --external-downloader aria2c \
--external-downloader-args "-j 4 -x 4 -s 4" \
"https://youtube.com/playlist?list=PLAYLIST_ID"

Batch Processing

# Use batch file for multiple playlists
yt-dlp --batch-file playlists.txt \
-o "%(uploader)s/%(playlist)s/%(title)s.%(ext)s"

Special Playlist Types

YouTube Feeds

# Download from various YouTube feeds
yt-dlp ":ytfav" # Favorites (requires authentication)
yt-dlp ":ytwatchlater" # Watch Later (requires authentication)
yt-dlp ":ytsubs" # Subscriptions (requires authentication)
yt-dlp ":ythistory" # Watch History (requires authentication)
yt-dlp ":ytrec" # Recommended videos
yt-dlp ":ytnotif" # Notifications (requires authentication)

Search Results as Playlists

# Download search results
yt-dlp "ytsearch10:python tutorial"

# Download with date sorting
yt-dlp "ytsearchdate:5:machine learning"

Troubleshooting Playlists

Common Issues

  • Private videos: Use --ignore-errors to skip
  • Large playlists: Use --max-downloads to limit
  • Rate limiting: Add --sleep-interval between downloads

Error Handling

# Continue on errors
yt-dlp --ignore-errors "https://youtube.com/playlist?list=PLAYLIST_ID"

# Skip unavailable videos
yt-dlp --no-abort-on-error "https://youtube.com/playlist?list=PLAYLIST_ID"

# Detailed error reporting
yt-dlp --verbose "https://youtube.com/playlist?list=PLAYLIST_ID"

Monitoring Progress

# Monitor large playlist downloads
yt-dlp --progress \
--newline \
-o "%(playlist)s/%(playlist_index)03d - %(title)s.%(ext)s" \
"https://youtube.com/playlist?list=LARGE_PLAYLIST_ID"