yt-dlp auf einem VPS zu betreiben gibt langen Downloads eine Maschine, die online bleibt, nachdem Sie das Notebook zugeklappt haben. Außerdem entsteht ein klarer Weg von einem geplanten Kanal-Abruf zu einer Mediathek, die Jellyfin einlesen kann.
Der Server verändert drei Teile des Ablaufs: Die Installation braucht aktuelle YouTube-Abhängigkeiten, kontogebundene Videos brauchen eine sichere Cookie-Übertragung, und die Automatisierung braucht ein bewusst gewähltes Anfragetempo. Das Setup unten deckt alle drei ab, ohne anzunehmen, dass jeder Download Cookies, eine Weboberfläche oder einen PO-Token-Anbieter benötigt.
Kurzfassung
- Installieren Sie yt-dlp in einer virtuellen Python-Umgebung zusammen mit ffmpeg, ffprobe, yt-dlp-ejs und einer unterstützten JavaScript-Laufzeit. Deno ist die Laufzeit, die das Projekt derzeit empfiehlt.
- Fangen Sie ohne Konto-Cookies an. Fügen Sie sie nur für private Playlists, altersbeschränkte Videos, Inhalte nur für Mitglieder oder einen anderen kontogebundenen Fall hinzu.
- Behalten Sie das Standardverhalten von yt-dlp mit einem einzelnen Fragment bei, bis Sie einen gemessenen Grund für eine Änderung haben. Nutzen Sie Wartezeit-Optionen und versetzte Zeitpläne, um den Anfragedruck zu senken.
- Reine CLI plus systemd ist das einfachste verlässliche Setup. Wählen Sie Pinchflat für Kanalregeln ohne Handgriffe, MeTube für eine Warteschlange im Browser oder Tube Archivist für eine durchsuchbare Oberfläche zum Ansehen.
- Behandeln Sie den Speicher als wichtigste Größe bei der Dimensionierung. Testen Sie eine repräsentative Stichprobe, bevor Sie Plattenkapazität für ein vollständiges Archiv kaufen.
yt-dlp verantwortungsvoll einsetzen
Archivieren Sie Medien nur, wenn Sie die Erlaubnis haben und Ihre Nutzung den Bedingungen der Plattform und dem geltenden Recht entspricht.
- Gute Kandidaten sind Ihre eigenen Uploads, gemeinfreie Medien und Material, dessen Rechteinhaber den Download erlaubt hat.
- Ein YouTube-Premium-Abo allein erlaubt es nicht, Videos außerhalb der von YouTube bereitgestellten Funktionen zu kopieren.
- Die Berechtigungen und Einschränkungen von YouTube beschränken das Herunterladen und den automatisierten Zugriff, sofern der Dienst oder die jeweiligen Rechteinhaber es nicht erlauben.
- Diese Anleitung behandelt weder das Umgehen von DRM noch die kommerzielle Weiterverbreitung noch Wege, Durchsetzungsmaßnahmen der Plattform zu umgehen.
Was Sie vor dem Start brauchen
Die Basisinstallation ist klein, die Mediendateien sind es nicht. Bereiten Sie Server und Speicherpfad vor, bevor Sie einen ganzen Kanal herunterladen.
- Ein VPS mit Ubuntu 22.04 oder neuer oder einer aktuellen Debian-Version, mit SSH-Zugang
- Python 3.10 oder neuer
- Genug Speicher für eine repräsentative Stichprobe plus Reserve für Teildateien und Nachbearbeitung
- Ein separater lokaler Browser, nur wenn Sie Konto-Cookies brauchen
- Optional: Jellyfin, Emby oder ein anderer Medienserver, der das Archivverzeichnis lesen kann
Warum yt-dlp auf einen VPS legen?
Ein VPS ist sinnvoll, wenn der Job unabhängig von Ihrem Alltagsrechner weiterlaufen muss. Er gibt dem Downloader einen dauerhaften Prozess, ein berechenbares Dateisystem und einen Scheduler, der nicht stehen bleibt, wenn ein Notebook in den Ruhezustand geht oder das Netz wechselt.
Die Kompromisse zählen. Das monatliche Transfervolumen Ihres Servers kann zur Grenze werden, wenn Sie das Archiv wieder hinausstreamen, und eine VPS-IP stößt womöglich früher auf Anfragelimits als Ihr Heimanschluss. Sie verantworten außerdem Updates, den Umgang mit Zugangsdaten, Backups, das Aufräumen des Speichers und die Sicherheit des Medienservers. Für einen einmaligen Download ist ein Notebook einfacher. Für wiederkehrende Abrufe oder eine gemeinsame Mediathek lässt sich ein VPS leichter betreiben.
Den VPS an Speicher und Wiedergabe ausrichten
yt-dlp lädt Medien herunter und remuxt sie; es transkodiert normalerweise nicht jede Datei. Damit bleiben der dauerhafte CPU- und Speicherbedarf des Downloaders bescheiden, während der Plattenverbrauch je nach Videolänge, Auflösung, Codec und gewähltem Format schwankt.
Nehmen Sie diese Zuteilungen als konservative Ausgangspunkte, nicht als offizielle Mindestwerte:
| Einrichtung | Startzuteilung | Speicheransatz | Beste Wahl |
|---|---|---|---|
| Reines yt-dlp mit systemd | 2 vCPU, 2 GB RAM | Aus einer Stichprobe dimensionieren | Geplante Downloads ohne Oberfläche |
| MeTube oder Pinchflat | 2 vCPU, 4 GB RAM | Aus einer Stichprobe dimensionieren | Warteschlange im Browser oder Kanal-Abos |
| Tube Archivist | 4 vCPU, 8 GB RAM | Lokale Platte mit Reserve zum Wachsen | Durchsuchbares Archiv mit eingebauter Wiedergabe |
Ein kleiner Test braucht etwa 2 GB verfügbaren Arbeitsspeicher, eine mittlere bis große Installation etwa 4 GB, so der Bereitstellungsleitfaden von Tube Archivist. Oberhalb dieser Untergrenze zu starten lässt Platz für Betriebssystem, Docker, Elasticsearch-Aktivität und einen weiteren Dienst wie Jellyfin.
Bevor Sie ein vollständiges Archiv dimensionieren, simulieren oder laden Sie eine repräsentative Gruppe in der gewählten Auflösung herunter. Prüfen Sie das entstandene Verzeichnis mit du, teilen Sie durch die Zahl der fertigen Videos und berücksichtigen Sie ungewöhnlich lange Uploads.
du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive
Die Stichprobe ist nützlicher als eine pauschale Schätzung in Gigabyte pro Video, weil sie die tatsächliche Länge und Formatmischung des Kanals abbildet.
yt-dlp und seine aktuellen Abhängigkeiten installieren
Das yt-dlp-Projekt unterstützt Python 3.10 und neuer. Die Abhängigkeitsliste von yt-dlp empfiehlt nachdrücklich ffmpeg, ffprobe, yt-dlp-ejs und eine unterstützte JavaScript-Laufzeit für volle YouTube-Unterstützung.
Beginnen Sie mit den Systempaketen und einer isolierten Python-Umgebung:
sudo apt update
sudo apt install -y python3 python3-venv ffmpeg curl nano
python3 -m venv ~/yt-dlp-venv
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Deno ist in yt-dlp standardmäßig aktiviert und ist die Laufzeit, die der EJS-Leitfaden EJS-Leitfaden des Projekts derzeit empfiehlt. Installieren Sie sie, nehmen Sie sie in den Pfad Ihrer Shell auf und prüfen Sie jede Komponente:
curl -fsSL https://deno.land/install.sh | sh
export PATH="$HOME/.deno/bin:$PATH"
echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.profile
yt-dlp --version
ffmpeg -version | head -1
deno --version
yt-dlp --simulate --verbose "https://www.youtube.com/watch?v=VIDEO_ID"
Die ausführliche Ausgabe listet die Abhängigkeiten auf, die yt-dlp sieht. Fehlt ffmpeg, warnt yt-dlp und kann weder getrennte Video- und Audiospuren in bester Qualität zusammenführen noch mehrere Nachbearbeitungsschritte ausführen.
Bei einer Installation über pip aktualisieren Sie, indem Sie pip erneut in der virtuellen Umgebung ausführen. Der eingebaute Befehl yt-dlp -U gilt für Release-Binaries, nicht für pip-Pakete.
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Die Update-Kanäle sind in den Update-Hinweisen von yt-dlp. Die Kanäle stable, nightly und master stehen alle zur Verfügung, und nightly ist die Empfehlung des Projekts für normale Nutzer, weil Extractor-Fixes dort vor dem nächsten stabilen Release eintreffen.
Cookies nur für kontogebundene Inhalte hinzufügen
Probieren Sie die Ziel-URL zuerst ohne Cookies. Der YouTube-Leitfaden von yt-dlp sagt, Cookies seien nur für Inhalte nötig, die ein Konto verlangen, darunter private Playlists, altersbeschränkte Videos und Inhalte nur für Mitglieder. Die Anmeldung per OAuth funktioniert mit yt-dlp nicht mehr.
Wenn Cookies nötig sind, exportieren Sie eine eigene YouTube-Sitzung auf Ihrem lokalen Rechner. Das Verfahren des Projekts zum Cookie-Export nutzt ein privates Browserfenster, damit YouTube die exportierte Sitzung nicht in einem offenen normalen Tab rotiert:
- Öffnen Sie ein einzelnes privates oder Inkognito-Fenster und melden Sie sich bei YouTube an.
- Öffnen Sie im selben Tab die robots.txt-Datei von YouTube.
- Exportieren Sie nur die Cookies von youtube.com im Netscape-Format, mit einer der in den yt-dlp-FAQ genannten Erweiterungen.
- Schließen Sie das private Fenster und öffnen Sie diese Sitzung nicht erneut.
- Kopieren Sie die Datei auf den VPS und schränken Sie ihre Berechtigungen ein.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'
Testen Sie die Datei mit einer URL, die ein Konto verlangt:
~/yt-dlp-venv/bin/yt-dlp \
--cookies ~/cookies.txt \
--simulate \
"https://www.youtube.com/watch?v=VIDEO_ID"
Cookie-Dateien sind Sitzungs-Zugangsdaten, und Browser-Erweiterungen wollen sorgfältig ausgewählt sein, so die Cookie-FAQ von yt-dlp. Der Leitfaden zum YouTube-Extractor warnt außerdem, dass die Nutzung eines Kontos mit yt-dlp zu einer zeitweisen oder dauerhaften Sperre führen kann. Setzen Sie Cookies nur ein, wenn das Ziel sie verlangt, halten Sie die Datei privat und nehmen Sie ein eigenes Konto statt Ihres Haupt-Google-Kontos.
Setzen Sie --cookies nicht in die globale Konfiguration, wenn die meisten Ziele öffentlich sind. Nutzen Sie eine zweite Konfigurationsdatei oder fügen Sie die Option nur den Jobs hinzu, die sie brauchen.
PO Tokens als bedingte Fehlersuche behandeln
Ein Proof of Origin Token ist keine allgemeine Installationsvoraussetzung. YouTube erzwingt diese Tokens derzeit für bestimmte Kombinationen aus Client und Anfrage, und die genaue Matrix ändert sich.
Wenn die Standard-Clients scheitern, wird ein Provider-Plugin für den mweb-Client empfohlen, so der PO-Token-Leitfaden von yt-dlp. Er nennt bgutil-ytdlp-pot-provider als eine hervorgehobene Option, doch das Plugin verlangt sowohl einen Token-Provider als auch ein yt-dlp-Plugin. Nur das Python-Paket zu installieren ist keine vollständige Einrichtung.
Gehen Sie in dieser Reihenfolge vor, wenn ein YouTube-Download fehlschlägt:
- Aktualisieren Sie yt-dlp, yt-dlp-ejs und die JavaScript-Laufzeit.
- Reproduzieren Sie den Fehler mit --verbose und ohne zusätzliche Client-Übersteuerung.
- Fügen Sie Cookies nur hinzu, wenn das Video ein Konto verlangt.
- Weist der Fehler auf die Durchsetzung von PO Tokens hin, folgen Sie den aktuellen Provider-Anleitungen, die im offiziellen Leitfaden verlinkt sind.
So bleibt ein wackliger Workaround aus einer sonst stabilen Basisinstallation heraus.
Ein Frontend nach Arbeitsablauf wählen
Die Hauptentscheidung ist nicht, welche Oberfläche die längste Funktionsliste hat. Klären Sie, ob Sie eine Warteschlange im Browser, regelbasierte Abos oder eine vollständige lokale Mediathek im YouTube-Stil brauchen.
| Option | Bereitstellung | Stärken | Wichtigster Kompromiss |
|---|---|---|---|
| Reine CLI | Kein Frontend | Skripte, Konfigurationsdateien, systemd, exakte Kontrolle über Optionen | Keine Browser-Oberfläche |
| MeTube | Ein Docker-Container | Downloads über den Browser plus Abos für Kanäle und Playlists | Eingeschränkte Bibliotheksverwaltung nach dem Download |
| Pinchflat | Ein Docker-Container | Regeln für Kanäle und Playlists, RSS, Aufbewahrung, Ausgabe fürs Media-Center | Für die Download-Verwaltung gebaut, nicht zum Ansehen in der App |
| Tube Archivist | Container für App, Redis und Elasticsearch | Suche, Metadaten, Warteschlangen, Kanalseiten und Wiedergabe | Höchster Speicher- und Betriebsaufwand |
Für einen leichtgewichtigen Browser-Ablauf unterstützt MeTube Abos für Kanäle und Playlists, die regelmäßig nach Neuem suchen und es automatisch einreihen. Es bleibt die einfachste Wahl, wenn Sie vor allem ein Webformular und eine Download-Warteschlange wollen.
Pinchflat passt am besten zur laufenden Archivierung von Kanälen, die später über Jellyfin, Plex, Kodi oder einen RSS-Client konsumiert werden. Es ist in sich geschlossen, prüft Quellen regelmäßig, unterstützt Aufbewahrungsregeln und überlässt die Wiedergabe bewusst einer anderen Anwendung.
Tube Archivist rechtfertigt seine zusätzlichen Dienste, wenn sich das Archiv selbst wie eine durchsuchbare Videoseite verhalten soll. Liefert Jellyfin bereits Ihre Wiedergabeoberfläche, starten Sie mit reiner CLI oder Pinchflat und ergänzen Tube Archivist erst, wenn sein Such- und Metadatenmodell ein Problem löst, das Sie tatsächlich haben.
Eine wiederholbare Archiv-Konfiguration aufbauen
Halten Sie die dauerhaften Optionen in einer Datei und übergeben Sie die Kanal-URL über die Kommandozeile oder den Scheduler. Dieses Beispiel begrenzt die Ausgabe auf 1080p, protokolliert die IDs fertiger Videos, streckt die Anfragen leicht und schreibt Metadaten, die auch außerhalb von yt-dlp nützlich bleiben.
Legen Sie die Verzeichnisse und die Konfigurationsdatei an:
mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf
Fügen Sie diese Optionen hinzu:
-P "~/archive"
-o "%(channel)s/%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s"
-f "bv*[height<=1080]+ba/b[height<=1080]"
--merge-output-format mp4
--download-archive ~/archive/downloaded.txt
--sleep-requests 1
--sleep-interval 5
--max-sleep-interval 10
--write-info-json
--write-thumbnail
--write-subs
--write-auto-subs
--sub-langs en.*
--embed-subs
--embed-thumbnail
--embed-metadata
--sponsorblock-mark all
Testen Sie zuerst mit einem einzigen Video, bevor Sie yt-dlp einen ganzen Kanal geben:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/watch?v=VIDEO_ID"
Führen Sie danach eine Kanal- oder Playlist-URL mit derselben Konfiguration aus:
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/@CHANNEL/videos"
Die Datei --download-archive hält die erfolgreich geladenen IDs fest, sodass spätere Läufe sie überspringen. Belassen Sie es anfangs beim Standardwert --concurrent-fragments 1. Der YouTube-Leitfaden von yt-dlp empfiehlt Pausen zwischen Videos, wenn eine Sitzung an Anfragelimits stößt; eine allgemeingültige sichere Obergrenze für Fragment-Parallelität bei VPS-IPs veröffentlicht er nicht.
Downloads mit systemd planen
Ein systemd-Timer auf Benutzerebene gibt dem Job dauerhafte Planung und Logs, ohne einen langen Befehl in cron zu schreiben. Die zufällige Verzögerung verhindert außerdem, dass alle geplanten Quellen in derselben Sekunde starten. Um nicht auf den PATH des Benutzer-Managers angewiesen zu sein, verweist der Dienst yt-dlp direkt auf den Standard-Installationsort von Deno.
Legen Sie den Dienst an:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/yt-dlp-archive.service
[Unit]
Description=Archive a YouTube channel with yt-dlp
[Service]
Type=oneshot
ExecStart=%h/yt-dlp-venv/bin/yt-dlp --js-runtimes deno:%h/.deno/bin/deno --config-location %h/.config/yt-dlp/archive.conf https://www.youtube.com/@CHANNEL/videos
Legen Sie den Timer an:
nano ~/.config/systemd/user/yt-dlp-archive.timer
[Unit]
Description=Run the yt-dlp archive daily
[Timer]
OnCalendar=*-*-* 04:00:00
RandomizedDelaySec=30m
Persistent=true
[Install]
WantedBy=timers.target
Aktivieren Sie den Timer und erlauben Sie dem Benutzerdienst, auch ohne Anmeldung zu laufen:
systemctl --user daemon-reload
systemctl --user enable --now yt-dlp-archive.timer
sudo loginctl enable-linger "$USER"
systemctl --user list-timers
journalctl --user -u yt-dlp-archive.service -n 100 --no-pager
Erstellen Sie bei mehreren Kanälen je eine Dienstinstanz pro Kanal oder nutzen Sie getrennte Timer. Versetzen Sie sie zeitlich, statt mehrere große Abrufe gleichzeitig zu starten.
Das Archiv mit Jellyfin verbinden
Binden Sie dasselbe Verzeichnis ~/archive in Jellyfin ein oder geben Sie es frei und fügen Sie es dann als Bibliothek hinzu. Für das rohe Kanal-/Datums-Layout eignet sich die Music-Videos-Bibliothek von Jellyfin akzeptiert verschachtelte Ordner und beliebige Dateinamen ohne Metadatenabgleich im Netz. Das Etikett passt für nicht-musikalische Archive nicht ganz, doch die Dateistruktur passt besser als beim Typ „Shows“, der Serien- und Staffelordner mit Episodennamen im Schema SxxEyy erwartet. Meiden Sie Mixed Content, sofern Sie nicht Jellyfins Hinweis akzeptieren, dass die Metadatenergebnisse unzuverlässig sein können.
Die Optionen für Metadaten, Vorschaubild und Untertitel in der yt-dlp-Konfiguration bewahren nützliche Informationen neben oder in jeder Datei. Jellyfin braucht dennoch womöglich manuelle Metadatenkorrekturen, weil sich ein YouTube-Kanal nicht sauber auf eine Serien-Datenbank abbilden lässt.
Wenn Sie Jellyfin-taugliche Dateinamen und Metadaten mit weniger Handarbeit wollen, bringt Pinchflat Media-Center-Voreinstellungen für diesen Ablauf mit. Für die grundsätzliche Wahl zwischen Medienservern behandelt unser Vergleich von Jellyfin und Plex Artikel die Abwägungen zu Wiedergabe, Fernzugriff und Transkodierung.
Den Stack auf einen dauerhaften Server legen
Sobald der Ablauf mit einem kleinen Testsatz klappt, verlagern Sie ihn auf Cloudzys Linux-VPS , damit geplante Downloads und Ihre Mediathek online bleiben, ohne Ihren Alltagsrechner zu blockieren. Sie können außerdem Jellyfin als Ein-Klick-App bereitstellen und dessen Bibliothek auf das Ausgabeverzeichnis von yt-dlp richten.
Entwickeln Sie auf einem Linux-VPS mit Root-Zugriff, NVMe und AMD-EPYC-Power.
Linux-Pläne ansehenHäufig gestellte Fragen
Braucht yt-dlp auf einem VPS eine GPU?
Nein. yt-dlp kann Medien ohne GPU herunterladen und remuxen. Eine GPU wird dann relevant, wenn Jellyfin oder ein anderer Medienserver Video für inkompatible Clients oder schmalbandige Verbindungen transkodieren muss; direkte Wiedergabe braucht diese Umwandlung nicht.
Kann yt-dlp einen abgebrochenen Download fortsetzen?
Ja. yt-dlp aktiviert Teildateien und Fortsetzung standardmäßig, sodass ein späterer Lauf normalerweise bei den bereits geladenen Fragmenten weitermacht, statt sie neu zu beginnen. Fügen Sie --no-continue, --no-part oder --force-overwrites nicht hinzu, wenn Sie dieses Verhalten wollen.
