- yt-dlp ist ein kommandozeilenbasiertes Download-Tool, mit dem sich Audio und Video von Tausenden von Websites herunterladen lassen, und eine Fork-Version von youtube-dl
- Für die n/sig-Entschlüsselung von YouTube werden das neu hinzugefügte Modul yt-dlp-ejs sowie eine externe JavaScript-Laufzeit benötigt, z. B. Deno, Node.js, Bun oder QuickJS
- Deno ist als Standard-Laufzeit gesetzt; mit der Option
--js-runtimes können Nutzer andere Laufzeiten angeben
- Durch diese Änderung sind für die vollständige Nutzung der YouTube-bezogenen Funktionen nun die Installation von yt-dlp-ejs und einer JS-Laufzeit zwingend erforderlich
- Die zusätzliche Abhängigkeit von einer externen Laufzeit ist eine notwendige Maßnahme als Reaktion auf Änderungen an YouTubes Verschlüsselungsstruktur und wird künftig ein Kernelement der Wartung sein
Überblick über yt-dlp
- yt-dlp ist eine Fork von youtube-dl und ein Projekt, das auf dem nicht mehr gepflegten youtube-dlc basiert
- Es kann Audio und Video von Tausenden von Websites herunterladen und unterstützt verschiedene Funktionen für Formatwahl, Nachbearbeitung, Untertitel und Plugins
Änderungen bei der YouTube-Unterstützung
- Für die Entschlüsselung der n/sig-Werte von YouTube wird das Paket yt-dlp-ejs benötigt
- Dieses Paket wird unter der Unlicense veröffentlicht und enthält Komponenten unter MIT- und ISC-Lizenz
- Für die Ausführung von yt-dlp-ejs ist eine JavaScript-Laufzeit zwingend erforderlich
- Unterstützte Laufzeiten: deno (empfohlen), node.js, bun, QuickJS
- Die entsprechende Konfiguration kann mit der Option
--js-runtimes festgelegt werden
- Mit der Option
--no-js-runtimes lässt sich die Standardkonfiguration der Laufzeiten zurücksetzen
Installation und Abhängigkeiten
- yt-dlp unterstützt Python 3.10+ (CPython) und 3.11+ (PyPy)
- Dringend empfohlene Abhängigkeiten:
- ffmpeg / ffprobe: zum Zusammenführen von Audio und Video sowie für die Nachbearbeitung
- yt-dlp-ejs: zum Entschlüsseln der YouTube-Verschlüsselung
- JavaScript-Laufzeit: zur Ausführung von yt-dlp-ejs
- Zu den optionalen Netzwerk-Abhängigkeiten gehören certifi, brotli, requests, curl_cffi und weitere
Wichtige Befehlsoptionen
--js-runtimes RUNTIME[:PATH]: verwendete JS-Laufzeit festlegen
--no-js-runtimes: alle JS-Laufzeiten deaktivieren
--remote-components COMPONENT: Option, mit der externe JS-Komponenten erlaubt werden können
--no-remote-components: Laden entfernter Komponenten blockieren
Bedeutung
- Mit dieser Änderung verlangt yt-dlp nun zwingend eine externe JS-Laufzeit, um YouTubes aktuelle Verschlüsselungsstruktur vollständig zu unterstützen
- Das ist ein struktureller Wechsel, um auf YouTubes fortlaufende Sicherheits- und Verschlüsselungsupdates zu reagieren, und eine zentrale Änderung für künftige Wartung und Funktionserweiterungen
2 Kommentare
Wow … Es ist beeindruckend, wie gut sie das blockieren, und genauso beeindruckend, wie es umgangen wird. Wie analysieren sie das bloß und durchbrechen es?
Hacker-News-Kommentare
Ist im Arch-Repository bereits enthalten und funktioniert daher sofort.
Man muss dem Befehl
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...nur ein Flag hinzufügen.Beim Ausführen wird der Solver zur Laufzeit heruntergeladen, was nur etwa 0,5 Sekunden dauert. Es fühlt sich an, als sei der Download-Start deutlich schneller geworden.
Wenn man es jedoch in eingeschränkten Umgebungen ausführt, wäre es schön, den Solver vorab mit einem separaten Befehl herunterladen zu können. So ist es schon gut, aber mit Packaging-Automatisierung wäre es noch bequemer.
Falls die Sicherheit ein Problem ist: Solange man Deno verwendet, ist die Sandboxing-Umsetzung recht solide.
Falls das OS Deno oder Node nicht unterstützt, könnte man auch QuickJS in Betracht ziehen, das in C geschrieben ist. Es ist zwar langsam, läuft aber in fast jeder Umgebung.
In diesem Fall fällt das Sandboxing allerdings weg. Trotzdem halte ich den Code für vertrauenswürdig, wenn er von der offiziellen YouTube-Domain ausgeliefert wird.
/home/username/.cache.Alternativ könnte man mit
make yt-dlp-extraPackaging-Automatisierung ausprobieren.Vor Kurzem hat YouTube damit begonnen, bei eingebetteten Videos den Referrer-Header zu erzwingen.
Wenn man
youtube.com/embed/<videoid>direkt aufruft, erscheint ein Fehler, und in der FAQ steht ausdrücklich, dass dies beabsichtigt ist.Laut der offiziellen Dokumentation muss der Einbettende einen HTTP-Referer mitsenden, sonst erscheint der Bildschirm mit „error 153“.
Als 1991 QuickTime erschien, hielt ich es für selbstverständlich, Videos einfach kopieren, einfügen und speichern zu können.
Heute ist es kaum zu glauben, wie schlecht die User Experience selbst bei Videos ohne DRM geworden ist.
Heute reicht in den meisten Fällen der Standard-Player des OS oder VLC.
Ich nutze yt-dlp seit 2010, einschließlich der youtube-dl-Zeit, und archiviere damit alle Videos, die mir gefallen.
Inzwischen habe ich Zehntausende Videos gespeichert, und viele davon sind bereits von der Website verschwunden.
Auch Videos wie die NHK-Sumo-Highlights, die nur einen Monat lang verfügbar sind, speichere ich.
In diesem endlosen Wettrüsten zwischen Ad-Blocking und Werbeeinblendungen könnte am Ende tatsächlich AGI/ASI entstehen.
Beide Seiten werden LLMs einsetzen, und der Mensch wird dazwischen zu einem Wesen, dem sowohl Geldbeutel als auch Aufmerksamkeit entzogen werden.
In zehn Jahren könnte YouTube im Browser vielleicht überhaupt nicht mehr zugänglich sein.
Wenn Generationen, die an Tablet-Apps gewöhnt sind, zur Mehrheit werden, könnte Google genug Selbstvertrauen haben, das Web fallen zu lassen.
In yt-dlp Issue #14404 wurde vorgeschlagen, Selenium oder einen Headless-Browser zu verwenden,
doch das Maintainer-Team antwortete: „Das wäre eine Kapitulationserklärung und widerspricht dem Geist des Projekts.“
Scraping ist wirklich harte Arbeit. APIs brechen ständig, und es ist bemerkenswert, so etwas aufrechtzuerhalten, wenn die Anbieter einen nicht mögen.
Man merkt, dass YouTube den Nutzern gegenüber immer konfrontativer wird.
Maßnahmen gegen Ad-Blocker, das Einsammeln von Inhalten für AI-Training, API-Beschränkungen — sie scheinen auszunutzen, dass es kaum Konkurrenz gibt.
Auf die Zufriedenheit der Werbekunden wird sensibel reagiert, aber Nutzer und Creator werden wie Verbrauchsmaterial behandelt.
Kostenlos zu starten, Konkurrenten auszuschalten und danach eine Monopolstruktur zu schaffen, war eine Art Köderstrategie.
Jetzt brauchen wir neue Alternativen. Auch ein kostenpflichtiger, aber transparenter Dienst wäre willkommen.
Laut dem yt-dlp-EJS-Wiki wird Deno empfohlen,
weil sich Code mit eingeschränkten Rechten ausführen lässt und EJS-Abhängigkeiten aus npm remote bezogen werden können.
daher ist eine Isolierung auf OS-/VM-Ebene wie mit Firecracker sicherer.