# 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