Przejdź do treści głównej
50% zniżki wszystkie plany, oferta limitowana. Od $2.48/mo
11 min left
Gaming i media

Uruchom yt-dlp na VPS do osobistego archiwum bez interfejsu

S Autor: Sajjad 11 min czytania
yt-dlp running headless on a VPS, feeding scheduled downloads into an organized video library that a media server can scan

Uruchomienie yt-dlp na VPS daje długim pobraniom maszynę, która zostaje online po zamknięciu laptopa. Tworzy też przejrzystą drogę od zaplanowanego pobrania kanału do biblioteki multimediów, którą Jellyfin potrafi zeskanować.

Serwer zmienia trzy części procesu: instalacja wymaga aktualnych zależności YouTube, filmy wymagające konta wymagają bezpiecznego przeniesienia plików cookie, a automatyzacja wymaga świadomego tempa żądań. Poniższa konfiguracja obsługuje wszystkie trzy, nie zakładając, że każde pobranie potrzebuje plików cookie, interfejsu webowego czy dostawcy PO Token.

TL;DR

  • Zainstaluj yt-dlp w wirtualnym środowisku Pythona wraz z ffmpeg, ffprobe, yt-dlp-ejs i obsługiwanym środowiskiem uruchomieniowym JavaScriptu. Projekt poleca obecnie Deno.
  • Zacznij bez plików cookie konta. Dodawaj je tylko przy prywatnych playlistach, filmach z ograniczeniem wieku, treściach tylko dla członków lub innym przypadku wymagającym konta.
  • Zostaw domyślne zachowanie yt-dlp z jednym fragmentem, dopóki nie będziesz mieć zmierzonego powodu, by je zmienić. Do zmniejszenia presji żądań użyj opcji uśpienia i rozłożonych harmonogramów.
  • Samo CLI plus systemd to najprostszy niezawodny zestaw. Wybierz Pinchflat do bezobsługowych reguł kanałów, MeTube do kolejki w przeglądarce albo Tube Archivist do przeszukiwalnego interfejsu oglądania.
  • Traktuj pamięć masową jako główną zmienną przy doborze rozmiaru. Przetestuj reprezentatywną próbkę, zanim kupisz pojemność dysku na pełne archiwum.

Korzystaj z yt-dlp odpowiedzialnie

Archiwizuj materiały tylko wtedy, gdy masz zgodę, a twoje wykorzystanie jest zgodne z regulaminem platformy i obowiązującym prawem.

  • Dobre przykłady to twoje własne materiały, treści z domeny publicznej oraz materiały, na których pobranie zgodę wyraził właściciel praw.
  • Subskrypcja YouTube Premium sama w sobie nie daje prawa do kopiowania filmów poza funkcjami udostępnionymi przez YouTube.
  • Uprawnienia i ograniczenia YouTube ograniczają pobieranie i zautomatyzowany dostęp, o ile serwis lub właściwi posiadacze praw na to nie zezwolą.
  • Ten poradnik nie obejmuje obchodzenia DRM, komercyjnej redystrybucji ani sposobów omijania egzekwowania zasad przez platformę.

Czego potrzebujesz przed startem

Podstawowa instalacja jest mała, ale pliki multimedialne już nie. Przygotuj serwer i ścieżkę zapisu, zanim pobierzesz cały kanał.

  • VPS z Ubuntu 22.04 lub nowszym albo z aktualnym wydaniem Debiana, z dostępem po SSH
  • Python 3.10 lub nowszy
  • Wystarczająco miejsca na reprezentatywną próbkę plus zapas na pliki częściowe i przetwarzanie końcowe
  • Osobna przeglądarka lokalna, tylko jeśli potrzebujesz plików cookie konta
  • Opcjonalnie: Jellyfin, Emby lub inny serwer multimediów, który potrafi odczytać katalog archiwum

Po co umieszczać yt-dlp na VPS?

VPS przydaje się, gdy zadanie ma działać niezależnie od twojego codziennego komputera. Daje pobieraczowi trwały proces, przewidywalny system plików i harmonogram, który nie zatrzymuje się, gdy laptop zasypia albo zmienia sieć.

Kompromisy mają znaczenie. Miesięczny limit transferu serwera może stać się ograniczeniem, gdy odtwarzasz archiwum na zewnątrz, a adres IP VPS może wcześniej trafić na limity żądań niż twoje łącze domowe. Na tobie spoczywają też aktualizacje, obsługa poświadczeń, kopie zapasowe, porządkowanie miejsca i bezpieczeństwo serwera multimediów. Do jednorazowego pobrania prostszy jest laptop. Do powtarzalnych pobrań lub wspólnej biblioteki łatwiej prowadzi się VPS.

Dobierz rozmiar VPS pod kątem pamięci masowej i odtwarzania

yt-dlp VPS sizing guide: starting allocations of 2 vCPU and 2 GB RAM for raw yt-dlp with systemd, 2 vCPU and 4 GB RAM for MeTube or Pinchflat, and 4 vCPU and 8 GB RAM for Tube Archivist, beside a method for projecting storage from a sample download

yt-dlp pobiera i przepakowuje materiały; zwykle nie transkoduje każdego pliku. Dzięki temu stałe zapotrzebowanie pobieracza na procesor i pamięć pozostaje skromne, a zużycie dysku zmienia się wraz z długością filmu, rozdzielczością, kodekiem i wybranym formatem.

Traktuj te wartości jako ostrożne punkty wyjścia, a nie oficjalne minimum:

KonfiguracjaZasoby początkowePodejście do pamięci masowejNajlepszy wybór
Samo yt-dlp z systemd2 vCPU, 2 GB RAMRozmiar na podstawie próbkiZaplanowane pobrania bez interfejsu
MeTube lub Pinchflat2 vCPU, 4 GB RAMRozmiar na podstawie próbkiKolejka w przeglądarce lub subskrypcje kanałów
Tube Archivist4 vCPU, 8 GB RAMDysk lokalny z zapasem na rozrostPrzeszukiwalne archiwum z wbudowanym odtwarzaniem

Mały test potrzebuje około 2 GB dostępnej pamięci, a instalacja średnia lub duża około 4 GB, jak podaje przewodnik wdrożeniowy Tube Archivist. Start powyżej tego progu zostawia miejsce systemowi operacyjnemu, Dockerowi, pracy Elasticsearcha i jeszcze jednej usłudze, takiej jak Jellyfin.

Zanim określisz rozmiar pełnego archiwum, zasymuluj lub pobierz reprezentatywną grupę w wybranej rozdzielczości. Sprawdź powstały katalog poleceniem du, podziel przez liczbę ukończonych filmów i uwzględnij nietypowo długie materiały.

du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive

Próbka jest bardziej użyteczna niż ogólny szacunek w gigabajtach na film, bo odzwierciedla rzeczywisty czas trwania i miks formatów danego kanału.

Zainstaluj yt-dlp i jego aktualne zależności

Projekt yt-dlp obsługuje Pythona 3.10 i nowsze wersje. Lista zależności yt-dlp zdecydowanie zaleca ffmpeg, ffprobe, yt-dlp-ejs oraz obsługiwane środowisko uruchomieniowe JavaScriptu dla pełnej obsługi YouTube.

Zacznij od pakietów systemowych i odizolowanego środowiska Pythona:

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 jest w yt-dlp włączone domyślnie i to właśnie to środowisko uruchomieniowe poleca obecnie przewodnik EJS przewodnik EJS projektu. Zainstaluj je, dodaj do ścieżki powłoki i sprawdź każdy komponent:

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"

Szczegółowe wyjście wypisuje zależności, które widzi yt-dlp. Jeśli brakuje ffmpeg, yt-dlp ostrzega i nie potrafi połączyć osobnych ścieżek wideo i audio w najlepszej jakości ani wykonać kilku kroków przetwarzania końcowego.

Przy instalacji przez pip aktualizuj, uruchamiając pip ponownie w wirtualnym środowisku. Wbudowane polecenie yt-dlp -U dotyczy plików binarnych wydań, a nie pakietów pip.

source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"

Kanały aktualizacji opisano w uwagach o aktualizacji yt-dlp. Dostępne są kanały stable, nightly i master, a zwykłym użytkownikom projekt poleca nightly, bo poprawki ekstraktorów trafiają tam przed kolejnym stabilnym wydaniem.

Dodawaj pliki cookie tylko przy treściach wymagających konta

Najpierw wypróbuj docelowy adres bez plików cookie. Przewodnik yt-dlp po YouTube mówi, że pliki cookie są potrzebne tylko przy treściach wymagających konta, w tym prywatnych playlistach, filmach z ograniczeniem wieku i treściach dla członków. Logowanie przez OAuth już nie działa z yt-dlp.

Gdy pliki cookie są naprawdę potrzebne, wyeksportuj dedykowaną sesję YouTube na swoim lokalnym komputerze. Procedura eksportu plików cookie w projekcie wykorzystuje okno przeglądania prywatnego, żeby YouTube nie zmienił wyeksportowanej sesji w otwartej zwykłej karcie:

  1. Otwórz jedno okno prywatne lub incognito i zaloguj się na YouTube.
  2. W tej samej karcie otwórz plik robots.txt serwisu YouTube.
  3. Wyeksportuj wyłącznie pliki cookie z youtube.com w formacie Netscape, korzystając z jednego z rozszerzeń wymienionych w FAQ yt-dlp.
  4. Zamknij okno prywatne i nie otwieraj tej sesji ponownie.
  5. Skopiuj plik na VPS i ogranicz jego uprawnienia.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'

Przetestuj plik na adresie wymagającym konta:

~/yt-dlp-venv/bin/yt-dlp \
  --cookies ~/cookies.txt \
  --simulate \
  "https://www.youtube.com/watch?v=VIDEO_ID"

Pliki cookie to poświadczenia sesji, a rozszerzenia przeglądarki trzeba dobierać ostrożnie, jak podaje FAQ yt-dlp o plikach cookie. Przewodnik po ekstraktorze YouTube ostrzega też, że używanie konta razem z yt-dlp może skończyć się czasową lub trwałą blokadą. Stosuj pliki cookie tylko wtedy, gdy cel tego wymaga, trzymaj plik prywatnie i korzystaj z osobnego konta zamiast głównego konta Google.

Nie umieszczaj --cookies w konfiguracji globalnej, gdy większość celów jest publiczna. Użyj drugiego pliku konfiguracyjnego albo dodawaj tę flagę tylko do zadań, które jej wymagają.

Traktuj PO Tokeny jako warunkowe rozwiązywanie problemów

yt-dlp access troubleshooting flow: simulate the URL first, then branch to no cookies needed for a working public video, a cookie export for account-gated content, or a dependency update and PO Token check when failures continue

Proof of Origin Token nie jest uniwersalnym wymogiem instalacji. YouTube wymusza obecnie te tokeny przy części kombinacji klienta i żądania, a dokładna matryca się zmienia.

Gdy domyślni klienci zawodzą, zalecana jest wtyczka dostawcy dla klienta mweb, jak podaje przewodnik yt-dlp po PO Tokenach. Wymienia bgutil-ytdlp-pot-provider jako jedną z wyróżnionych opcji, ale ta wtyczka wymaga zarówno dostawcy tokenów, jak i wtyczki do yt-dlp. Instalacja samego pakietu Pythona to jeszcze nie pełna konfiguracja.

Gdy pobieranie z YouTube się nie powiedzie, trzymaj się tej kolejności:

  1. Zaktualizuj yt-dlp, yt-dlp-ejs i środowisko uruchomieniowe JavaScriptu.
  2. Odtwórz błąd z --verbose i bez dodatkowego nadpisywania klienta.
  3. Dodaj pliki cookie tylko wtedy, gdy film wymaga konta.
  4. Jeśli błąd wskazuje na wymuszanie PO Tokenów, postępuj zgodnie z aktualnymi instrukcjami dostawcy, do których odsyła oficjalny przewodnik.

Dzięki temu chwiejna obejściówka nie trafia do skądinąd stabilnej instalacji podstawowej.

Wybierz frontend pod kątem swojego procesu

Główna decyzja nie polega na tym, który interfejs ma dłuższą listę funkcji. Ustal, czy potrzebujesz kolejki w przeglądarce, subskrypcji opartych na regułach, czy pełnej lokalnej biblioteki w stylu YouTube.

OpcjaWdrażanieMocne stronyGłówny kompromis
Samo CLIBrak frontenduSkrypty, pliki konfiguracyjne, systemd, dokładna kontrola nad flagamiBrak interfejsu w przeglądarce
MeTubeJeden kontener DockerPobieranie z przeglądarki oraz subskrypcje kanałów i playlistOgraniczone zarządzanie biblioteką po pobraniu
PinchflatJeden kontener DockerReguły dla kanałów i playlist, RSS, retencja, wyjście pod media centerZbudowany do zarządzania pobieraniem, a nie do oglądania w aplikacji
Tube ArchivistKontenery aplikacji, Redisa i ElasticsearchaWyszukiwanie, metadane, kolejki, strony kanałów i odtwarzanieNajwiększe obciążenie pamięci i największy nakład obsługi

Do lekkiego procesu w przeglądarce MeTube obsługuje subskrypcje kanałów i playlist, które okresowo sprawdzają nowe pozycje i automatycznie dodają je do kolejki. Pozostaje najprostszym wyborem, gdy zależy ci głównie na formularzu webowym i kolejce pobierania.

Pinchflat najlepiej pasuje do stałej archiwizacji kanałów, które będziesz oglądać przez Jellyfin, Plex, Kodi lub klienta RSS. Jest samodzielny, okresowo sprawdza źródła, obsługuje reguły retencji i celowo zostawia odtwarzanie innej aplikacji.

Tube Archivist odpracowuje swoje dodatkowe usługi wtedy, gdy chcesz, by samo archiwum zachowywało się jak przeszukiwalny serwis wideo. Jeśli interfejs odtwarzania zapewnia ci już Jellyfin, zacznij od samego CLI albo Pinchflata, a Tube Archivist dodaj dopiero wtedy, gdy jego model wyszukiwania i metadanych rozwiąże twój realny problem.

Zbuduj powtarzalną konfigurację archiwum

Trzymaj trwałe opcje w jednym pliku, a adres kanału przekazuj z wiersza poleceń lub z harmonogramu. Ten przykład ogranicza wynik do 1080p, zapisuje identyfikatory ukończonych filmów, lekko rozkłada żądania w czasie i zapisuje metadane przydatne także poza yt-dlp.

Utwórz katalogi i plik konfiguracyjny:

mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf

Dodaj te opcje:

-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

Zanim oddasz yt-dlp cały kanał, przetestuj go na jednym filmie:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/watch?v=VIDEO_ID"

Następnie uruchom adres kanału lub playlisty z tą samą konfiguracją:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/@CHANNEL/videos"

Plik --download-archive zapisuje identyfikatory pomyślnie pobranych filmów, więc kolejne uruchomienia je pomijają. Na początku zostaw domyślne --concurrent-fragments 1. Przewodnik yt-dlp po YouTube zaleca odstępy między filmami, gdy sesja dobija do limitów żądań; nie podaje jednak uniwersalnego bezpiecznego pułapu współbieżności fragmentów dla adresów IP VPS.

Zaplanuj pobieranie za pomocą systemd

Timer systemd na poziomie użytkownika daje zadaniu trwały harmonogram i logi, bez wpisywania długiego polecenia do crona. Losowe opóźnienie zapobiega też startowi wszystkich zaplanowanych źródeł w tej samej sekundzie. Aby nie polegać na PATH menedżera użytkownika, usługa wskazuje yt-dlp bezpośrednio domyślną lokalizację instalacji Deno.

Utwórz usługę:

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

Utwórz timer:

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

Włącz timer i pozwól usłudze użytkownika działać, gdy nie jesteś zalogowany:

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

Przy wielu kanałach utwórz po jednej instancji usługi na kanał albo użyj osobnych timerów. Rozłóż je w czasie, zamiast uruchamiać kilka dużych pobrań naraz.

Podłącz archiwum do Jellyfin

Podmontuj lub udostępnij ten sam katalog ~/archive Jellyfinowi, a potem dodaj go jako bibliotekę. Do surowego układu kanał/data pasuje biblioteka Music Videos w Jellyfin biblioteka, która przyjmuje zagnieżdżone foldery i dowolne nazwy plików, bez dopasowywania metadanych online. Etykieta nie jest idealna dla archiwum niemuzycznego, ale pod względem struktury plików pasuje lepiej niż typ „Shows”, który oczekuje folderów seriali i sezonów z nazwami odcinków SxxEyy. Unikaj Mixed Content, chyba że akceptujesz ostrzeżenie Jellyfin, że jego wyniki metadanych bywają zawodne.

Opcje metadanych, miniatury i napisów w konfiguracji yt-dlp zachowują przydatne informacje obok każdego pliku lub w jego wnętrzu. Jellyfin i tak może wymagać ręcznych poprawek metadanych, bo kanał YouTube nie odwzorowuje się czysto na bazę seriali telewizyjnych.

Jeśli chcesz nazw plików i metadanych dopasowanych do Jellyfin przy mniejszym nakładzie ręcznej pracy, Pinchflat ma gotowe ustawienia pod media center dla takiego procesu. Szerszy wybór między serwerami multimediów omawia nasze porównanie Jellyfin i Plex omawia kompromisy dotyczące odtwarzania, dostępu zdalnego i transkodowania.

Przenieś stos na stale działający serwer

Gdy proces zadziała na małym zestawie testowym, przenieś go na VPS z Linuksem od Cloudzy , żeby zaplanowane pobrania i twoja biblioteka multimediów zostawały online, nie blokując codziennego komputera. Możesz też wdrożyć Jellyfin jako aplikację instalowaną jednym kliknięciem i skierować jego bibliotekę na katalog wyjściowy yt-dlp.

Zobacz plany Linux

Twórz na VPS Linux z dostępem root, NVMe i mocą AMD EPYC.

Zobacz plany Linux

Często zadawane pytania

Czy yt-dlp potrzebuje GPU na VPS?

Nie. yt-dlp pobiera i przepakowuje materiały bez GPU. Karta graficzna staje się istotna wtedy, gdy Jellyfin lub inny serwer multimediów musi transkodować wideo dla niekompatybilnych klientów albo łączy o mniejszej przepustowości; odtwarzanie bezpośrednie nie wymaga takiej konwersji.

Czy yt-dlp wznowi przerwane pobieranie?

Tak. yt-dlp domyślnie włącza pliki częściowe i wznawianie, więc późniejsze uruchomienie zwykle podejmuje pobrane fragmenty zamiast zaczynać od nowa. Nie dodawaj --no-continue, --no-part ani --force-overwrites, jeśli chcesz takiego zachowania.

Czy yt-dlp i Jellyfin powinny dzielić jeden VPS?

Mogą dzielić jeden VPS, gdy pamięć masowa, procesor i ruch wychodzący wystarczają na oba zadania. Rozdziel je, gdy odtwarzanie lub transkodowanie konkuruje z dużymi pobraniami, gdy potrzebujesz niezależnych okien serwisowych, albo gdy archiwum powinno leżeć na tańszej pamięci niż serwer streamingowy.

Udostępnij

Więcej z bloga

Czytaj dalej.

Gotowy do wdrożenia? Od $2,48/mies.

Niezależna chmura od 2008 roku. AMD EPYC, NVMe, 40 Gbps. Zwrot pieniędzy w ciągu 14 dni.