- WaSQL Wired
- Posts
- A Master Class on YT-DLP
A Master Class on YT-DLP
The definitive tool of choice for downloading videos
In the ever-changing landscape of online media, yt-dlp has emerged as the definitive tool for downloading videos from YouTube and over 1,000 other websites. This powerful command-line utility offers capabilities far beyond simple video downloads, enabling users to automate workflows, customize output formats, and efficiently manage large media collections. Whether you're an educator archiving educational material, a researcher collecting video data, or simply someone who wants to watch videos offline, yt-dlp provides the robust functionality you need.
The Origins of YT-DLP
YT-DLP (YouTube DownLoader Plus) began as a fork of youtube-dlc (community edition), which itself was a fork of the original youtube-dl. Created in 2021, yt-dlp has rapidly evolved to become the go-to solution for media downloads, distinguished by active development, frequent updates, and an impressive feature set that extends well beyond its predecessors.
By 2025, yt-dlp has been officially integrated into many major Linux distributions, including Ubuntu and Debian, replacing the now-stagnant youtube-dl. This widespread adoption is a testament to its reliability and continuing development.
Installation Guide
Let's start by getting yt-dlp installed on your system of choice:
Windows Installation
Windows users have several installation options:
Using Chocolatey (recommended)
The easiest approach is using the Chocolatey package manager:
Open a PowerShell window with administrator privileges
Run the following command to install Chocolatey if you don't already have it:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Install yt-dlp and its dependencies:
choco install yt-dlp ffmpeg
Direct Download
Alternatively, you can:
Download the latest executable from the official GitHub releases page
Place it in a directory of your choice (e.g.,
C:\Program Files\yt-dlp\
)Add that directory to your system PATH environment variable
Install FFmpeg separately for full functionality
macOS Installation
For Mac users, Homebrew provides the simplest installation method:
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install yt-dlp and ffmpeg
brew install yt-dlp ffmpeg
Linux Installation
Debian/Ubuntu and derivatives
For Ubuntu 22.04 or newer, yt-dlp is available in the official repositories:
sudo apt update
sudo apt install yt-dlp ffmpeg
For older versions, you can use a PPA:
sudo add-apt-repository ppa:tomtomtom/yt-dlp
sudo apt update
sudo apt install yt-dlp ffmpeg
Using pip (all Linux distributions)
python3 -m pip install -U yt-dlp
Android Installation via Termux
Android users can install yt-dlp through Termux:
# Set up storage access
termux-setup-storage
# Update packages
pkg update && pkg upgrade
# Install Python and pip
pkg install python python-pip
# Install yt-dlp
pip install -U "yt-dlp[default]"
# Install ffmpeg for format conversion
pkg install ffmpeg
Basic Usage
Now that yt-dlp is installed, let's explore its core functionality:
Downloading a Video
The simplest command downloads a video at its default quality:
yt-dlp https://www.youtube.com/watch?v=example
Listing Available Formats
To see all available formats for a video:
yt-dlp -F https://www.youtube.com/watch?v=example
This will display a table showing format codes, extensions, resolution, and other details.
Selecting a Specific Format
To download a specific format, use the -f
option followed by the format code:
yt-dlp -f 22 https://www.youtube.com/watch?v=example
Common Format Selectors
Instead of specific format codes, you can use these practical selectors:
best
: Best quality that includes both video and audioworst
: Lowest quality with both video and audiobestvideo
: Best video-only formatbestaudio
: Best audio-only formatbestvideo+bestaudio
: Best video and best audio downloaded separately and merged
For example:
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best" https://www.youtube.com/watch?v=example
This command selects the best video format with height less than or equal to 1080p and the best audio format, merging them together.
Advanced Features
YT-DLP's power lies in its advanced features that cater to specific needs:
Downloading Playlists
Download an entire playlist:
yt-dlp https://www.youtube.com/playlist?list=example
Download a specific range of videos in a playlist:
yt-dlp --playlist-start 5 --playlist-end 10 https://www.youtube.com/playlist?list=example
Extracting Audio
Extract audio in your preferred format:
yt-dlp -x --audio-format mp3 https://www.youtube.com/watch?v=example
Available audio formats include mp3, aac, flac, m4a, opus, vorbis, and wav.
Custom Output Templates
Control how files are named using output templates:
yt-dlp -o "%(uploader)s/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s" https://www.youtube.com/playlist?list=example
Common template variables include:
%(title)s
: Video title%(id)s
: Video ID%(uploader)s
: Channel name%(upload_date)s
: Upload date (YYYYMMDD)%(playlist_index)s
: Position in playlist%(playlist_title)s
: Playlist title%(ext)s
: File extension
Embedding Metadata and Thumbnails
Add metadata to your downloads:
# Add metadata
yt-dlp --embed-metadata https://www.youtube.com/watch?v=example
# Embed thumbnail in audio file
yt-dlp -x --audio-format mp3 --embed-thumbnail https://www.youtube.com/watch?v=example
Downloading Subtitles
Download video subtitles:
# Download all available subtitles
yt-dlp --all-subs https://www.youtube.com/watch?v=example
# Download only English subtitles
yt-dlp --sub-lang en https://www.youtube.com/watch?v=example
# Convert subtitles to SRT format
yt-dlp --convert-subs srt --sub-lang en https://www.youtube.com/watch?v=example
Unique YT-DLP Features
YT-DLP introduces several innovative features not available in its predecessors:
SponsorBlock Integration
Skip or remove sponsored segments, intros, outros, and more using the SponsorBlock API:
# Mark sponsor segments
yt-dlp --sponsorblock-mark sponsor https://www.youtube.com/watch?v=example
# Remove sponsor segments
yt-dlp --sponsorblock-remove sponsor,intro,outro https://www.youtube.com/watch?v=example
Chapter Handling
Split videos by chapters into separate files:
yt-dlp --split-chapters https://www.youtube.com/watch?v=example
Partial Downloads
Download specific sections of a video:
# Download from 1 minute to 2 minutes
yt-dlp --download-sections "*1:00-2:00" https://www.youtube.com/watch?v=example
Live Stream and Scheduled Video Support
Wait for scheduled streams to become available:
yt-dlp --wait-for-video 300 https://www.youtube.com/watch?v=example
Download live streams from the current time:
yt-dlp --live-from-start https://www.youtube.com/watch?v=example
Improved Format Selection
YT-DLP offers advanced format sorting to prioritize higher resolutions and better codecs:
yt-dlp --format-sort res,codec:h264 https://www.youtube.com/watch?v=example
Configuration and Automation
Configuration File
Create a configuration file to set default options. The file can be placed at:
Windows:
%APPDATA%\yt-dlp\config
orC:\Users\<user>\yt-dlp.conf
Linux/macOS:
~/.config/yt-dlp/config
or~/.yt-dlp.conf
Example configuration:
# Always extract audio
-x
# Use mp3 format for audio
--audio-format mp3
# Add metadata
--embed-metadata
# Save all videos under Videos directory
-o ~/Videos/%(title)s.%(ext)s
Practical Workflows
Archiving a YouTube Channel
To archive an entire YouTube channel:
yt-dlp -f "bestvideo+bestaudio/best" -o "%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" --download-archive archive.txt https://www.youtube.com/c/ChannelName/videos
The --download-archive
option tracks downloaded videos in a text file, allowing you to run the command periodically without re-downloading existing videos.
Creating a Music Library
To build a music library from YouTube Music:
yt-dlp -x --audio-format mp3 --audio-quality 0 --embed-thumbnail --embed-metadata -o "Music/%(artist)s/%(album)s/%(track_number)s - %(title)s.%(ext)s" https://music.youtube.com/playlist?list=example
Educational Video Collection
For educators collecting course materials:
yt-dlp -f "bestvideo[height<=720]+bestaudio/best" --write-auto-sub --sub-lang en --embed-subs -o "Courses/%(playlist)s/%(chapter_number)s - %(chapter)s/%(playlist_index)s - %(title)s.%(ext)s" --embed-thumbnail --embed-metadata https://www.youtube.com/playlist?list=example
Best Practices
Respect copyright and terms of service - Only download content you have the right to access and store
Use reasonable rate limiting - Avoid aggressive downloading that may trigger anti-abuse measures
Keep the tool updated - Run
yt-dlp -U
regularly to maintain compatibility with site changesUse specific format selectors - Download only the quality you need to save bandwidth and storage
Implement download archives - Track downloaded files to avoid duplicates in large archiving projects
Conclusion
YT-DLP stands as the definitive solution for media downloads in 2025, offering unparalleled flexibility, powerful features, and exceptional reliability. From simple video downloads to sophisticated media archiving workflows, yt-dlp provides the tools necessary to efficiently manage online content for offline use.
By mastering yt-dlp, you gain control over your media consumption, enabling access to content on your terms, in your preferred format, and on any device. Whether you're backing up your own content, creating an educational resource library, or simply enjoying videos offline, yt-dlp offers a solution that's both powerful and adaptable to your specific needs.
Continue exploring yt-dlp's extensive documentation and community resources to discover even more capabilities and refine your workflows. Happy downloading!
Wow, thanks for reading! See you next week. As a bonus for reading this far, here is a table of the most common arguments of yt-dlp and how to use them
Argument | Description | Example |
---|
| Select video and/or audio format |
|
| Set output filename template |
|
| Set custom download directories |
|
| Force final file format after merging |
|
| Format sorting, prioritization of qualities |
|
| Download specific time ranges |
|
| Embed subtitles into video |
|
| Download subtitles (if available) |
|
| Choose subtitle languages |
|
| Embed metadata into media file |
|
| Embed thumbnail image |
|
| Add additional metadata (e.g., title, uploader) |
|
| Don’t use the Last-Modified time as file mtime |
|
| Save video metadata in a JSON file |
|
| Keep track of downloaded videos to skip duplicates |
|
| Download only the video, not the whole playlist |
|
| Download specific videos in a playlist |
|
| Use cookies from a file (for private content) |
|
| Login credentials for sites requiring authentication |
|
| Number of threads for fragmented downloads |
|
| Limit download speed |
|
| Custom user agent string |
|
| Set HTTP referer header |
|
| Ignore SSL certificate verification |
|