Faire tourner yt-dlp sur un VPS donne aux longs téléchargements une machine qui reste en ligne une fois votre portable fermé. Cela crée aussi un chemin net entre une récupération de chaîne planifiée et une médiathèque que Jellyfin peut analyser.
Le serveur change trois parties du flux de travail : l'installation exige les dépendances YouTube actuelles, les vidéos derrière un compte exigent un transfert de cookies sécurisé, et l'automatisation exige un rythme de requêtes réfléchi. La configuration ci-dessous traite les trois sans supposer que chaque téléchargement a besoin de cookies, d'une interface web ou d'un fournisseur de PO Token.
En bref
- Installez yt-dlp dans un environnement virtuel Python avec ffmpeg, ffprobe, yt-dlp-ejs et un runtime JavaScript pris en charge. Deno est le runtime que le projet recommande actuellement.
- Commencez sans cookies de compte. N'en ajoutez que pour les playlists privées, les vidéos soumises à une limite d'âge, les contenus réservés aux membres ou un autre cas exigeant un compte.
- Conservez le comportement par défaut de yt-dlp à fragment unique tant que vous n'avez pas une raison mesurée d'en changer. Utilisez les options de pause et des horaires décalés pour réduire la pression des requêtes.
- La CLI brute plus systemd est la configuration fiable la plus simple. Choisissez Pinchflat pour des règles de chaînes sans intervention, MeTube pour une file d'attente dans le navigateur, ou Tube Archivist pour une interface de visionnage avec recherche.
- Traitez le stockage comme la principale variable de dimensionnement. Testez un échantillon représentatif avant d'acheter la capacité disque d'une archive complète.
Utilisez yt-dlp de façon responsable
N'archivez des médias que si vous en avez l'autorisation et si votre usage respecte les conditions de la plateforme et la loi applicable.
- Parmi les bons candidats figurent vos propres publications, les médias du domaine public et les contenus dont l'ayant droit a autorisé le téléchargement.
- Un abonnement YouTube Premium n'accorde pas en soi le droit de copier des vidéos en dehors des fonctions prévues par YouTube.
- Les autorisations et restrictions de YouTube limitent le téléchargement et l'accès automatisé, sauf autorisation du service ou des ayants droit concernés.
- Ce tutoriel ne traite ni du contournement des DRM, ni de la redistribution commerciale, ni des moyens d'échapper aux mesures d'application des plateformes.
Ce qu'il vous faut avant de commencer
L'installation de base est légère, mais pas les fichiers médias. Préparez le serveur et le chemin de stockage avant de télécharger une chaîne entière.
- Un VPS sous Ubuntu 22.04 ou plus récent, ou une version actuelle de Debian, avec accès SSH
- Python 3.10 ou plus récent
- Assez de stockage pour un échantillon représentatif, plus une marge pour les fichiers partiels et le post-traitement
- Un navigateur local distinct, uniquement si vous avez besoin de cookies de compte
- Facultatif : Jellyfin, Emby ou un autre serveur multimédia capable de lire le répertoire d'archive
Pourquoi mettre yt-dlp sur un VPS ?
Un VPS est utile quand la tâche doit continuer indépendamment de votre ordinateur de tous les jours. Il donne au téléchargeur un processus persistant, un système de fichiers prévisible et un planificateur qui ne s'arrête pas quand un portable se met en veille ou change de réseau.
Les compromis comptent. Le quota de trafic mensuel de votre serveur peut devenir une limite quand vous rediffusez l'archive, et une IP de VPS peut rencontrer des limites de requêtes plus tôt que votre connexion domestique. Vous prenez aussi en charge les mises à jour, la gestion des identifiants, les sauvegardes, le nettoyage du stockage et la sécurité du serveur multimédia. Pour un téléchargement ponctuel, un portable est plus simple. Pour des récupérations récurrentes ou une médiathèque partagée, un VPS est plus facile à exploiter.
Dimensionnez le VPS autour du stockage et de la lecture
yt-dlp télécharge et remultiplexe les médias ; il ne transcode normalement pas chaque fichier. Les besoins constants en CPU et en mémoire du téléchargeur restent donc modestes, tandis que l'usage disque varie selon la durée, la résolution, le codec et le format choisi.
Utilisez ces allocations comme points de départ prudents, pas comme des minimums officiels :
| Installation | Allocation de départ | Approche du stockage | Meilleur choix |
|---|---|---|---|
| yt-dlp brut avec systemd | 2 vCPU, 2 GB RAM | Dimensionner à partir d'un échantillon | Téléchargements planifiés sans interface |
| MeTube ou Pinchflat | 2 vCPU, 4 GB RAM | Dimensionner à partir d'un échantillon | File d'attente dans le navigateur ou abonnements à des chaînes |
| Tube Archivist | 4 vCPU, 8 GB RAM | Disque local avec marge de croissance | Archive avec recherche et lecture intégrée |
Un petit test demande environ 2 Go de mémoire disponible et une installation moyenne à grande environ 4 Go, d'après le guide de déploiement de Tube Archivist. Démarrer au-dessus de ce plancher laisse de la place au système d'exploitation, à Docker, à l'activité d'Elasticsearch et à un autre service comme Jellyfin.
Avant de dimensionner une archive complète, simulez ou téléchargez un groupe représentatif à la résolution choisie. Examinez le répertoire obtenu avec du, divisez par le nombre de vidéos terminées et tenez compte des publications anormalement longues.
du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive
L'échantillon est plus utile qu'une estimation générique en gigaoctets par vidéo, car il reflète la durée et le mélange de formats réels de la chaîne.
Installer yt-dlp et ses dépendances actuelles
Le projet yt-dlp prend en charge Python 3.10 et plus récent. La liste des dépendances de yt-dlp recommande fortement ffmpeg, ffprobe, yt-dlp-ejs et un runtime JavaScript pris en charge pour un support complet de YouTube.
Commencez par les paquets système et un environnement Python isolé :
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 est activé par défaut dans yt-dlp, et c'est le runtime que le guide EJS du projet recommande actuellement. Installez-le, ajoutez-le au chemin de votre shell et vérifiez chaque composant :
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"
La sortie détaillée énumère les dépendances que yt-dlp détecte. Si ffmpeg manque, yt-dlp avertit et ne peut ni fusionner les flux vidéo et audio de meilleure qualité séparés, ni exécuter plusieurs étapes de post-traitement.
Pour une installation par pip, mettez à jour en relançant pip dans l'environnement virtuel. La commande intégrée yt-dlp -U concerne les binaires de version, pas les paquets pip.
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"
Les canaux de mise à jour sont décrits dans les notes de mise à jour de yt-dlp. Les canaux stable, nightly et master sont tous disponibles, et nightly est celui que le projet recommande aux utilisateurs ordinaires, car les correctifs d'extracteurs y arrivent avant la prochaine version stable.
N'ajoutez des cookies que pour les contenus exigeant un compte
Essayez d'abord l'URL cible sans cookies. Le guide YouTube de yt-dlp indique que les cookies ne sont nécessaires que pour les contenus exigeant un compte, dont les playlists privées, les vidéos soumises à une limite d'âge et les contenus réservés aux membres. La connexion OAuth ne fonctionne plus avec yt-dlp.
Quand des cookies sont nécessaires, exportez une session YouTube dédiée sur votre ordinateur local. La procédure d'export des cookies du projet utilise une fenêtre de navigation privée pour que YouTube ne fasse pas tourner la session exportée dans un onglet normal resté ouvert :
- Ouvrez une seule fenêtre privée ou de navigation incognito et connectez-vous à YouTube.
- Dans le même onglet, ouvrez le fichier robots.txt de YouTube.
- N'exportez que les cookies de youtube.com au format Netscape, avec l'une des extensions listées dans la FAQ de yt-dlp.
- Fermez la fenêtre privée et ne rouvrez pas cette session.
- Copiez le fichier sur le VPS et restreignez ses permissions.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'
Testez le fichier avec une URL exigeant un compte :
~/yt-dlp-venv/bin/yt-dlp \
--cookies ~/cookies.txt \
--simulate \
"https://www.youtube.com/watch?v=VIDEO_ID"
Les fichiers de cookies sont des identifiants de session, et le choix d'une extension de navigateur demande de la prudence, selon la FAQ de yt-dlp sur les cookies. Le guide de l'extracteur YouTube avertit aussi qu'utiliser un compte avec yt-dlp peut mener à un bannissement temporaire ou définitif. N'utilisez des cookies que si la cible l'exige, gardez le fichier privé et servez-vous d'un compte distinct plutôt que de votre compte Google principal.
Ne mettez pas --cookies dans la configuration globale quand la plupart des cibles sont publiques. Utilisez un second fichier de configuration ou n'ajoutez l'option qu'aux tâches qui en ont besoin.
Traitez les PO Tokens comme un dépannage conditionnel
Un Proof of Origin Token n'est pas une exigence universelle d'installation. YouTube impose actuellement ces jetons pour certaines combinaisons de client et de requête, et la matrice exacte évolue.
Un plugin fournisseur pour le client mweb est recommandé quand les clients par défaut échouent, d'après le guide des PO Tokens de yt-dlp. Il cite bgutil-ytdlp-pot-provider parmi les options mises en avant, mais ce module exige à la fois un fournisseur de jetons et un plugin yt-dlp. Installer le seul paquet Python ne constitue pas une configuration complète.
Suivez cet ordre quand un téléchargement YouTube échoue :
- Mettez à jour yt-dlp, yt-dlp-ejs et le runtime JavaScript.
- Reproduisez l'échec avec --verbose et sans forcer de client supplémentaire.
- N'ajoutez des cookies que si la vidéo exige un compte.
- Si l'erreur pointe vers une exigence de PO Token, suivez les instructions du fournisseur en vigueur, référencées depuis le guide officiel.
Cela évite d'introduire un contournement instable dans une installation de base par ailleurs stable.
Choisir une interface selon le flux de travail
La décision principale n'est pas de savoir quelle interface a la plus longue liste de fonctions. Déterminez si vous avez besoin d'une file d'attente dans le navigateur, d'abonnements pilotés par des règles, ou d'une médiathèque locale complète façon YouTube.
| Option | Déploiement | Points forts | Principal compromis |
|---|---|---|---|
| CLI brute | Aucune interface | Scripts, fichiers de configuration, systemd, contrôle précis des options | Pas d'interface web |
| MeTube | Un seul conteneur Docker | Téléchargements depuis le navigateur, plus abonnements aux chaînes et playlists | Gestion de bibliothèque limitée après téléchargement |
| Pinchflat | Un seul conteneur Docker | Règles pour chaînes et playlists, RSS, rétention, sortie pour média-center | Conçu pour gérer les téléchargements, pas pour regarder dans l'application |
| Tube Archivist | Conteneurs application, Redis et Elasticsearch | Recherche, métadonnées, files d'attente, pages de chaînes et lecture | Charge mémoire et opérationnelle la plus élevée |
Pour un flux léger dans le navigateur, MeTube gère des abonnements à des chaînes et à des playlists qui vérifient périodiquement les nouveautés et les mettent en file automatiquement. Il reste le choix le plus simple quand vous voulez surtout un formulaire web et une file de téléchargement.
Pinchflat convient le mieux à l'archivage continu de chaînes qui seront consommées via Jellyfin, Plex, Kodi ou un client RSS. Il est autonome, vérifie périodiquement les sources, gère des règles de rétention et laisse volontairement la lecture à une autre application.
Tube Archivist justifie ses services supplémentaires quand vous voulez que l'archive elle-même se comporte comme un site vidéo doté d'une recherche. Si Jellyfin fournit déjà votre interface de lecture, commencez par la CLI brute ou Pinchflat et n'ajoutez Tube Archivist que lorsque son modèle de recherche et de métadonnées résout un problème que vous avez vraiment.
Construire une configuration d'archivage reproductible
Gardez les options durables dans un seul fichier et passez l'URL de la chaîne depuis la ligne de commande ou le planificateur. Cet exemple limite la sortie à 1080p, enregistre les identifiants des vidéos terminées, ajoute un léger étalement des requêtes et écrit des métadonnées qui restent utiles en dehors de yt-dlp.
Créez les répertoires et le fichier de configuration :
mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf
Ajoutez ces options :
-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
Faites un test sur une seule vidéo avant de confier une chaîne entière à yt-dlp :
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/watch?v=VIDEO_ID"
Lancez ensuite l'URL d'une chaîne ou d'une playlist avec la même configuration :
~/yt-dlp-venv/bin/yt-dlp \
--config-location ~/.config/yt-dlp/archive.conf \
"https://www.youtube.com/@CHANNEL/videos"
Le fichier --download-archive consigne les identifiants téléchargés avec succès, si bien que les exécutions suivantes les ignorent. Conservez d'abord la valeur par défaut --concurrent-fragments 1. Le guide YouTube de yt-dlp recommande des délais entre les vidéos quand une session atteint les limites de requêtes ; il ne publie pas de plafond universel et sûr de concurrence de fragments pour les IP de VPS.
Planifier les téléchargements avec systemd
Un timer systemd au niveau utilisateur donne à la tâche une planification persistante et des journaux, sans mettre une longue commande dans cron. Le délai aléatoire évite aussi que toutes les sources planifiées démarrent à la même seconde. Pour ne pas dépendre du PATH du gestionnaire utilisateur, le service pointe yt-dlp directement vers l'emplacement d'installation par défaut de Deno.
Créez le service :
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
Créez le 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
Activez le timer et autorisez le service utilisateur à s'exécuter même quand vous n'êtes pas connecté :
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
Pour plusieurs chaînes, créez une instance de service par chaîne ou utilisez des timers distincts. Décalez-les plutôt que de lancer plusieurs grosses récupérations en même temps.
Relier l'archive à Jellyfin
Montez ou exposez le même répertoire ~/archive à Jellyfin, puis ajoutez-le comme bibliothèque. Pour la structure brute chaîne/date, la bibliothèque Music Videos de Jellyfin accepte des dossiers imbriqués et des noms de fichiers arbitraires, sans correspondance de métadonnées en ligne. L'étiquette est imparfaite pour des archives non musicales, mais l'ajustement au système de fichiers est meilleur que le type « Shows », qui attend des dossiers de séries et de saisons avec des noms d'épisodes en SxxEyy. Évitez Mixed Content, sauf si vous acceptez l'avertissement de Jellyfin selon lequel ses résultats de métadonnées peuvent manquer de fiabilité.
Les options de métadonnées, de miniature et de sous-titres de la configuration yt-dlp conservent des informations utiles à côté de chaque fichier ou à l'intérieur. Jellyfin peut malgré tout demander des ajustements manuels de métadonnées, car une chaîne YouTube ne correspond pas proprement à une base de données de séries télé.
Si vous voulez des noms de fichiers et des métadonnées adaptés à Jellyfin avec moins de travail manuel, Pinchflat propose des préréglages média-center pour ce flux. Pour le choix plus large entre serveurs multimédias, notre comparatif Jellyfin et Plex couvre les compromis de lecture, d'accès distant et de transcodage.
Installer la pile sur un serveur permanent
Une fois que le flux fonctionne sur un petit jeu de test, déplacez-le vers Le VPS Linux de Cloudzy , pour que les téléchargements planifiés et votre médiathèque restent en ligne sans monopoliser votre ordinateur de tous les jours. Vous pouvez aussi déployer Jellyfin en application un clic et pointer sa bibliothèque vers le répertoire de sortie de yt-dlp.
Développez sur un VPS Linux avec accès root, NVMe et la puissance AMD EPYC.
Voir les plans LinuxFoire aux questions
yt-dlp a-t-il besoin d'un GPU sur un VPS ?
Non. yt-dlp peut télécharger et remultiplexer des médias sans GPU. Le GPU devient pertinent quand Jellyfin ou un autre serveur multimédia doit transcoder la vidéo pour des clients incompatibles ou des connexions à faible débit ; la lecture directe n'exige pas cette conversion.
yt-dlp peut-il reprendre un téléchargement interrompu ?
Oui. yt-dlp active par défaut les fichiers partiels et la reprise, si bien qu'une exécution ultérieure repart normalement des fragments déjà téléchargés au lieu de les refaire. N'ajoutez pas --no-continue, --no-part ni --force-overwrites si vous voulez ce comportement.
