Overview
yt-dlp can download entire playlists, channels, user uploads, and other collections from supported sites. This guide covers best practices for handling playlists efficiently.
Basic Playlist Download
Download all videos from a playlist:
# Download entire playlist
yt-dlp PLAYLIST_URL
# YouTube playlist example
yt-dlp "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"
By default, yt-dlp downloads all videos in a playlist sequentially.
YouTube Channels
Download from YouTube channels:
All Uploads
Specific Tabs
Community Features
# Channel URL downloads all uploads
yt-dlp "https://www.youtube.com/@ChannelName"
yt-dlp "https://www.youtube.com/c/ChannelName"
yt-dlp "https://www.youtube.com/channel/UC..."
Accessing private playlists (liked videos, watch later, etc.) requires authentication with --cookies-from-browser or --username/--password.
Selective Download
Download specific videos from playlist
By index
# Download first 5 videos
yt-dlp -I 1:5 PLAYLIST_URL
# Download videos 3, 5, and 7
yt-dlp -I 3,5,7 PLAYLIST_URL
# Download from 10 to end
yt-dlp -I 10: PLAYLIST_URL
By range with step
# Every other video
yt-dlp -I ::2 PLAYLIST_URL
# Every 3rd video from 1 to 30
yt-dlp -I 1:30:3 PLAYLIST_URL
Reverse order
# Download last 10 videos
yt-dlp -I -10: PLAYLIST_URL
# Download in reverse order
yt-dlp -I ::-1 PLAYLIST_URL
Filter by date
# Videos from last week
yt-dlp --dateafter today-1week PLAYLIST_URL
# Videos from 2024
yt-dlp --dateafter 20240101 --datebefore 20241231 PLAYLIST_URL
# Videos older than 1 year
yt-dlp --datebefore today-1year PLAYLIST_URL
Filter by criteria
# Videos longer than 10 minutes
yt-dlp --match-filters "duration > 600" PLAYLIST_URL
# Videos with more than 10k views
yt-dlp --match-filters "view_count > 10000" PLAYLIST_URL
# Not live streams
yt-dlp --match-filters "!is_live" PLAYLIST_URL
# Multiple conditions
yt-dlp --match-filters "duration > 600 & view_count > 1000" PLAYLIST_URL
Organizing Playlist Downloads
Create folder structure
By Playlist
By Uploader
By Date
Numbered
# Each playlist in its own folder
yt-dlp -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" PLAYLIST_URL
Download Archive
Avoid re-downloading videos you already have:
Create download archive
# Track downloaded videos
yt-dlp --download-archive archive.txt PLAYLIST_URL
Update playlist
# Only download new videos
yt-dlp --download-archive archive.txt PLAYLIST_URL
Videos in archive.txt will be skipped.
Multiple playlists
# Share archive across playlists
yt-dlp --download-archive ~/youtube-archive.txt PLAYLIST_URL_1
yt-dlp --download-archive ~/youtube-archive.txt PLAYLIST_URL_2
The download archive is a simple text file containing video IDs. You can manually edit it if needed.
Handling Large Playlists
Rate limiting and delays
# Be respectful to servers
yt-dlp \
--sleep-interval 5 \
--max-sleep-interval 15 \
--sleep-requests 1 \
PLAYLIST_URL
Ignore errors
# Continue on errors (deleted/private videos)
yt-dlp --ignore-errors PLAYLIST_URL
# Skip after N errors
yt-dlp --abort-on-error --skip-playlist-after-errors 10 PLAYLIST_URL
Limit downloads
# Download only first 50 videos
yt-dlp --max-downloads 50 PLAYLIST_URL
# Stop when encountering existing video
yt-dlp --break-on-existing --download-archive archive.txt PLAYLIST_URL
Playlist Processing Options
Reverse order
# Download newest first
yt-dlp --playlist-reverse PLAYLIST_URL
# Or using -I
yt-dlp -I ::-1 PLAYLIST_URL
Random order
# Download in random order
yt-dlp --playlist-random PLAYLIST_URL
Lazy playlist
# Process entries as they arrive (for large playlists)
yt-dlp --lazy-playlist PLAYLIST_URL
--lazy-playlist is useful for very large playlists as it doesn’t wait to load all entries before starting downloads.
Save playlist info
# Write playlist metadata files
yt-dlp --write-playlist-metafiles PLAYLIST_URL
# This creates:
# - playlist.info.json
# - playlist.description
# - Individual video .info.json files
# Only write video metadata
yt-dlp --no-write-playlist-metafiles PLAYLIST_URL
Common Playlist Scenarios
Subscribe to a channel
# Daily cron job to download new videos
yt-dlp \
--download-archive ~/Videos/channel-archive.txt \
--dateafter today-1week \
-o "~/Videos/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" \
"https://www.youtube.com/@ChannelName/videos"
Music playlist
yt-dlp -x --audio-format mp3 \
--download-archive music-archive.txt \
--embed-metadata \
--embed-thumbnail \
--parse-metadata "%(playlist_title|)s:%(meta_album)s" \
--parse-metadata "%(uploader|)s:%(meta_artist)s" \
--parse-metadata "%(playlist_index|)s:%(meta_track)s" \
-o "%(artist,uploader)s/%(album,playlist)s/%(track)s - %(title)s.%(ext)s" \
PLAYLIST_URL
Educational course
yt-dlp \
-o "%(playlist)s/%(chapter_number|)s%(playlist_index)s - %(title)s.%(ext)s" \
--write-subs \
--embed-subs \
--embed-metadata \
PLAYLIST_URL
Podcast archive
yt-dlp -x --audio-format mp3 \
--download-archive podcast-archive.txt \
--embed-metadata \
--embed-thumbnail \
-o "Podcasts/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" \
CHANNEL_URL
Flat Playlist Mode
Extract playlist information without downloading:
# List all video URLs without downloading
yt-dlp --flat-playlist --print url PLAYLIST_URL
# Get video IDs
yt-dlp --flat-playlist --print id PLAYLIST_URL
# Get full metadata without downloading
yt-dlp --flat-playlist --dump-json PLAYLIST_URL
Use --flat-playlist to quickly check playlist contents or create custom processing workflows.
Concatenating Playlists
Merge playlist videos into single file:
# Concatenate multi-part videos (default)
yt-dlp --concat-playlist multi_video PLAYLIST_URL
# Always concatenate all videos
yt-dlp --concat-playlist always \
-o "pl_video:%(playlist)s.%(ext)s" \
PLAYLIST_URL
# Never concatenate
yt-dlp --concat-playlist never PLAYLIST_URL
All videos must have the same codecs and number of streams to be concatenated.
Batch Downloading Multiple Playlists
Create a file with multiple playlist URLs:
# Music playlists
https://www.youtube.com/playlist?list=PLxxxxxxx
https://www.youtube.com/playlist?list=PLyyyyyyy
# Educational
https://www.youtube.com/playlist?list=PLzzzzzzz
Download all:
yt-dlp -a playlists.txt \
--download-archive archive.txt \
-o "%(playlist)s/%(title)s.%(ext)s"
Parallel fragment downloads
# Download fragments in parallel (faster for HLS/DASH)
yt-dlp -N 4 PLAYLIST_URL
External downloader
# Use aria2c for faster downloads
yt-dlp --downloader aria2c \
--downloader-args "aria2c:-x 16 -s 16 -k 1M" \
PLAYLIST_URL
Monitoring Progress
Track download progress:
# Show progress bar
yt-dlp --progress PLAYLIST_URL
# Console title (terminal window title)
yt-dlp --console-title PLAYLIST_URL
# Custom progress template
yt-dlp --progress-template "download:%(info.title)s %(progress.percent)s" PLAYLIST_URL
Troubleshooting
Playlist not loading completely
# Use lazy playlist for large playlists
yt-dlp --lazy-playlist PLAYLIST_URL
# Increase timeout
yt-dlp --socket-timeout 30 PLAYLIST_URL
Private or deleted videos
# Skip unavailable videos
yt-dlp --ignore-errors PLAYLIST_URL
# See which videos are unavailable (YouTube)
yt-dlp --flat-playlist --print "%(title)s [%(id)s] %(availability)s" PLAYLIST_URL
Geo-restricted content
# Use proxy for restricted videos
yt-dlp --proxy socks5://127.0.0.1:1080 PLAYLIST_URL
# Fake location
yt-dlp --xff "US" PLAYLIST_URL
Authentication required
# Use browser cookies
yt-dlp --cookies-from-browser firefox PLAYLIST_URL
# Or login credentials
yt-dlp --username USERNAME --password PASSWORD PLAYLIST_URL
Next Steps
Downloading Videos Basic video download workflows
Audio Extraction Extract audio from playlist videos
Post-Processing Process downloaded videos
Output Templates Customize file naming and organization