Inhaltsverzeichnis

yt-dlp

der beste video downloader für youtube und mehr, unterstützt originale video streams (auch audio & video getrennt)

Installation

FreeBSD

sudo pkg install -y multimedia/ffmpeg devel/py-pipx
pipx ensurepath
echo "${PATH}" | tr ':' '\n'
 
pipx install "yt-dlp[default]"

Linux

Debian

sudo apt install ffmpeg pipx
pipx install "yt-dlp[default]"

Fedora

sudo dnf install ffmpeg pipx
pipx install "yt-dlp[default]"

Termux (Android)

pkg install ffmpeg python-pip
pip install -U --user pipx
pipx ensurepath
echo "${PATH}" | tr ':' '\n'
 
pipx install "yt-dlp[default]"

Windows

winget search python
# lookup & adapt python version
winget install -i Gyan.FFmpeg Python.Python.3.13
python -m pip install -U pip
 
pip install -U pipx
pipx ensurepath
echo ("${env:Path}").Replace(";", "`n")
 
pipx install "yt-dlp[default]"

Skript

yt-dlp.sh
#!/usr/bin/env bash
 
set -o errexit
set -o nounset
set -o pipefail
shopt -s inherit_errexit
 
arg_count="${#@}"
# script assumes the url is passed as last argument
url="${!#}"
 
if test "${arg_count}" -eq 0
then
	printf "Usage:\n\t%s\n\t%s\n\t%s\n\t%s\n\n%s\n" \
		'yt-dlp.sh "https://youtu.be/xxx"' \
		'yt-dlp.sh "https://youtube.com/watch?v=xxx"' \
		'yt-dlp.sh "https://youtu.be/xxx?list=xxx"' \
		'yt-dlp.sh "https://youtube.com/playlist?list=xxx"' \
		"always pass the download url as the last argument"
	exit 1
fi
 
if grep -Eiq "[?&]list=" <<< "${url}"
then
	output_template="%(playlist)s/%(playlist_index)s-%(title)s.%(ext)s"
else
	output_template="%(title)s.%(ext)s"
fi
 
yt-dlp \
	--format-sort "quality, res, fps, hdr, vcodec:av1, channels, acodec" \
	--merge-output-format "mkv" \
	--no-overwrites \
	--output "${output_template}" \
	--prefer-free-formats \
	--remux-video "mkv" \
	--restrict-filenames \
	"${@}"

Beispiele

url="https://youtu.be/xxx"
# oder
url="https://youtube.com/watch?v=xxx"
# oder
url="https://youtu.be/xxx?list=xxx"
# oder
url="https://youtube.com/playlist?list=xxx"
 
# beste qualität
yt-dlp.sh "${url}"
 
# expliziter dateiname
yt-dlp.sh -o "tmp.%(ext)s" "${url}"
 
# max 1080p
yt-dlp.sh -S "res:1080" "${url}"
 
# max 2160p & kein hdr
yt-dlp.sh -S "res:2160,hdr:sdr" "${url}"
 
# max 30 fps
yt-dlp.sh -S "fps:30" "${url}"
 
# downloade die playlist & speichere heruntergeladene video ids in einer datei, damit sie nicht erneut heruntergeladen werden
yt-dlp.sh --download-archive index.txt --no-abort-on-error "${url}"
 
# das gleiche, aber mit einer bandbreitenbegrenzung von 100 MBit/s (download)
trickle -d 12500 yt-dlp.sh --download-archive index.txt --no-abort-on-error "${url}"