](https://backlogmann.com/bla/content/images/20251012162757-yt-dlp.png)
Was ist yt-dlp
yt-dlp ist ein funktionsreicher Befehlszeilen-Audio-/Video-Downloader, der Tausende von Websites unterstützt. Das Projekt ist ein Fork von youtube-dl, basierend auf dem inzwischen inaktiven youtube-dlc.
https://github.com/yt-dlp/yt-dlp
Commands:
# Dokumentation/Hilfe:
yt-dlp --help
# Alle verfügbaren Formate einer Quelle anzeigen (Audio + Video)
yt-dlp -F https://source
# Alle verfügbaren Subtitle anzeigen
yt-dlp --list-subs https://source
# Quelle herunterladen (auto)
yt-dlp https://source
# Beste Video + Audioqualität herunterladen und in mkv packen + Untertitel (lädt manchmal nicht alle Tonspuren herunter, siehe unten)
yt-dlp -f "bv*+ba*" \
--write-subs \
--all-subs \
--convert-subs srt \
--remux-video mkv \
--audio-multistreams \
https://source
# Bestes Video + spezifische Audiospuren (z.B. eng/deu - über -F ermitteln) in mkv packen + Untertitel
yt-dlp -f "bv*+hls-audio0-TV_Ton-3+hls-audio0-Originalton_englisch-3" \
--write-subs \
--all-subs \
--convert-subs srt \
--remux-video mkv \
--audio-multistreams \
https://source
Beispiel aus der Praxis
Bei einigen Mediatheken kann yt-dlp automatische alle Quellen auf einer Seite finden indem man als Quelle die URL der Übersichtsseite / Playlist angibt.
Wenn man etwas zielgerichteter vorgehen will und den Download von Playlists z.B. auf mehrere Geräte splitten will, bietet sich ggf. ein Bashscript an.
Auf Übersichtsseite der Mediathek nach Links suchen (Beispiel für z.B. ZDF);
#Konsolescript für Browser:
document.querySelectorAll('[data-testid="video-teaser"] a').forEach((a) => {
console.log(a.href);
});
#Alternativ per yt-dlp:
yt-dlp --flat-playlist --skip-download --print "%(webpage_url)s" https://source
https://source/01.html
https://source/02.html
https://source/03.html
#(usw. ...)
#Verfügbare (Audio-)Formate ermitteln:
yt-dlp -F https://source/01.html
(...)
ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC MORE INFO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
hls-audio0-TV_Ton-0 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, TV Ton
hls-audio0-TV_Ton-1 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, TV Ton
hls-audio0-TV_Ton-2 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, TV Ton
hls-audio0-TV_Ton-3 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, TV Ton
hls-audio0-Originalton_englisch-0 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, Originalton englisch
hls-audio0-Originalton_englisch-1 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, Originalton englisch
hls-audio0-Originalton_englisch-2 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, Originalton englisch
hls-audio0-Originalton_englisch-3 mp4 audio only │ m3u8 │ audio only unknown [eng] ot, Originalton englisch
hls-audio0-Originalton_englisch-4 mp4 audio only │ m3u8 │ audio only unknown [deu] main, Originalton englisch
hls-audio0-Originalton_englisch-5 mp4 audio only │ m3u8 │ audio only unknown [deu] main, Originalton englisch
hls-audio0-Originalton_englisch-6 mp4 audio only │ m3u8 │ audio only unknown [deu] main, Originalton englisch
hls-audio0-Originalton_englisch-7 mp4 audio only │ m3u8 │ audio only unknown [deu] main, Originalton englisch
hls-audio0-TV_Ton-4 mp4 audio only │ m3u8 │ audio only unknown [deu] main, TV Ton
hls-audio0-TV_Ton-5 mp4 audio only │ m3u8 │ audio only unknown [deu] main, TV Ton
hls-audio0-TV_Ton-6 mp4 audio only │ m3u8 │ audio only unknown [deu] main, TV Ton
hls-audio0-TV_Ton-7 mp4 audio only │ m3u8 │ audio only unknown [deu] main, TV Ton
hls-audio0-TV_Ton-8 mp4 audio only │ m3u8 │ audio only unknown [deu] main, TV Ton
http-h264_aac_mp4_http_na_na-0 mp4 480x270 │ ≈149.76MiB 508k https │ avc1.4d401f mp4a.40.2 [eng] ot
http-vp9_opus_webm_http_na_na-0 webm 480x270 │ ≈108.49MiB 368k https │ vp9 opus [eng] ot
(...)
#SOURCES in download.sh durch eigene URL Liste und ggf. gültige -f Parameter (siehe oben) ersetzen
chmod +x download.sh; ./download.sh
#!/bin/bash
YT_DLP_CMD=(
yt-dlp
-f "bv*+hls-audio0-TV_Ton-3+hls-audio0-Originalton_englisch-3"
--write-subs
--all-subs
--convert-subs srt
--remux-video mkv
--audio-multistreams
)
SOURCES=(
https://source/01.html
https://source/02.html
https://source/03.html
#(usw. ...)
)
for source in "${SOURCES[@]}"; do
echo "yt-dlp - checking source: $source"
"${YT_DLP_CMD[@]}" $source
echo "-----------------------------------"
done