====== yt-dlp ======
* originales projekt: [[https://github.com/ytdl-org/youtube-dl]]
* aktiver fork (maintained): [[https://github.com/yt-dlp/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 =====
* repo: [[https://gist.github.com/3ffc22dffe40ae533638e0f71dbf01d1.git]]
#!/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}"