Cover installation, Plex-optimized format selection, playlist downloading, config file, and background session usage. Cross-reference existing JS challenge troubleshooting article. Article count: 32 → 33. Open source section: 5 → 6. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
132 lines
3.0 KiB
Markdown
132 lines
3.0 KiB
Markdown
# yt-dlp — Video Downloading
|
|
|
|
## What It Is
|
|
|
|
`yt-dlp` is a feature-rich command-line video downloader, forked from youtube-dl with active maintenance and significantly better performance. It supports YouTube, Twitch, and hundreds of other sites.
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
### Fedora
|
|
```bash
|
|
sudo dnf install yt-dlp
|
|
# or latest via pip:
|
|
sudo pip install yt-dlp --break-system-packages
|
|
```
|
|
|
|
### Update
|
|
```bash
|
|
sudo pip install -U yt-dlp --break-system-packages
|
|
# or if installed as standalone binary:
|
|
yt-dlp -U
|
|
```
|
|
|
|
Keep it current — YouTube pushes extractor changes frequently and old versions break.
|
|
|
|
---
|
|
|
|
## Basic Usage
|
|
|
|
```bash
|
|
# Download a single video (best quality)
|
|
yt-dlp https://www.youtube.com/watch?v=VIDEO_ID
|
|
|
|
# Download to a specific directory with title as filename
|
|
yt-dlp -o "/path/to/output/%(title)s.%(ext)s" URL
|
|
```
|
|
|
|
---
|
|
|
|
## Plex-Optimized Download
|
|
|
|
For Plex direct play, you want H.264 video in an MP4 container with embedded subtitles:
|
|
|
|
```bash
|
|
yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' \
|
|
--merge-output-format mp4 \
|
|
-o "/plex/plex/%(title)s.%(ext)s" \
|
|
--write-auto-subs --embed-subs \
|
|
URL
|
|
```
|
|
|
|
- `-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/...'` — prefer MP4 video + M4A audio; fall back to best available
|
|
- `--merge-output-format mp4` — merge streams into MP4 container (requires ffmpeg)
|
|
- `--write-auto-subs --embed-subs` — download auto-generated subtitles and bake them in
|
|
|
|
---
|
|
|
|
## Playlists and Channels
|
|
|
|
```bash
|
|
# Download a full playlist
|
|
yt-dlp -o "%(playlist_index)s - %(title)s.%(ext)s" PLAYLIST_URL
|
|
|
|
# Download only videos not already present
|
|
yt-dlp --download-archive archive.txt PLAYLIST_URL
|
|
```
|
|
|
|
`--download-archive` maintains a file of completed video IDs — re-running the command skips already-downloaded videos automatically.
|
|
|
|
---
|
|
|
|
## Format Selection
|
|
|
|
```bash
|
|
# List all available formats for a video
|
|
yt-dlp --list-formats URL
|
|
|
|
# Download best video + best audio, merge to mp4
|
|
yt-dlp -f 'bestvideo+bestaudio' --merge-output-format mp4 URL
|
|
|
|
# Download audio only (MP3)
|
|
yt-dlp -x --audio-format mp3 URL
|
|
```
|
|
|
|
---
|
|
|
|
## Config File
|
|
|
|
Persist your preferred flags so you don't repeat them every command:
|
|
|
|
```bash
|
|
mkdir -p ~/.config/yt-dlp
|
|
cat > ~/.config/yt-dlp/config << 'EOF'
|
|
-f bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio
|
|
--merge-output-format mp4
|
|
--write-auto-subs
|
|
--embed-subs
|
|
--remote-components ejs:github
|
|
EOF
|
|
```
|
|
|
|
After this, a bare `yt-dlp URL` uses all your preferred settings automatically.
|
|
|
|
---
|
|
|
|
## Running Long Downloads in the Background
|
|
|
|
For large downloads or playlists, run inside `screen` or `tmux` so they survive SSH disconnects:
|
|
|
|
```bash
|
|
screen -dmS yt-download bash -c \
|
|
"yt-dlp -o '/plex/plex/%(title)s.%(ext)s' PLAYLIST_URL 2>&1 | tee ~/yt-download.log"
|
|
|
|
# Check progress
|
|
screen -r yt-download
|
|
# or
|
|
tail -f ~/yt-download.log
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
For YouTube JS challenge errors, missing formats, and n-challenge failures on Fedora — see [yt-dlp YouTube JS Challenge Fix](../../05-troubleshooting/yt-dlp-fedora-js-challenge.md).
|
|
|
|
---
|
|
|
|
## Tags
|
|
|
|
#yt-dlp #youtube #video #plex #linux #media #dev-tools
|