- yt-dlp est un outil de téléchargement en ligne de commande permettant de télécharger de l’audio et de la vidéo depuis des milliers de sites, et constitue un fork de youtube-dl
- Pour le déchiffrement de n/sig de YouTube, un runtime JavaScript externe (par ex. Deno, Node.js, Bun, QuickJS) est désormais requis avec le nouveau module yt-dlp-ejs
- Deno est défini comme runtime par défaut, et les utilisateurs peuvent en choisir un autre avec l’option
--js-runtimes
- Avec ce changement, l’installation de yt-dlp-ejs et d’un runtime JS devient indispensable pour utiliser pleinement les fonctionnalités liées à YouTube
- L’ajout d’une dépendance à un runtime externe constitue une mesure nécessaire pour répondre aux évolutions de la structure de chiffrement de YouTube, et devient un élément clé de la maintenance future
Présentation de yt-dlp
- yt-dlp est un fork de youtube-dl, développé à partir de youtube-dlc, qui n’est plus maintenu
- Il permet de télécharger de l’audio et de la vidéo depuis des milliers de sites web, et prend en charge diverses fonctionnalités de sélection de formats, post-traitement, sous-titres et plugins
Changements liés à la prise en charge de YouTube
- Le paquet yt-dlp-ejs est nécessaire pour le déchiffrement des valeurs n/sig de YouTube
- Ce paquet est distribué sous Unlicense et inclut des composants sous licences MIT et ISC
- L’exécution de yt-dlp-ejs nécessite un runtime JavaScript
- Runtimes pris en charge : deno (recommandé), node.js, bun, QuickJS
- Le paramétrage correspondant peut être défini avec l’option
--js-runtimes
- L’option
--no-js-runtimes permet de réinitialiser la configuration du runtime par défaut
Installation et dépendances
- yt-dlp prend en charge Python 3.10+ (CPython) et 3.11+ (PyPy)
- Dépendances fortement recommandées :
- ffmpeg / ffprobe : pour la fusion audio/vidéo et le post-traitement
- yt-dlp-ejs : pour le déchiffrement de YouTube
- runtime JavaScript : pour exécuter yt-dlp-ejs
- Parmi les dépendances réseau optionnelles figurent certifi, brotli, requests, curl_cffi, etc.
Principales options de commande
--js-runtimes RUNTIME[:PATH] : définir le runtime JS à utiliser
--no-js-runtimes : désactiver tous les runtimes JS
--remote-components COMPONENT : option permettant d’autoriser des composants JS externes
--no-remote-components : bloquer le chargement de composants distants
Importance
- Avec ce changement, yt-dlp exige désormais un runtime JS externe pour assurer une prise en charge complète de la structure de chiffrement la plus récente de YouTube
- Il s’agit d’un changement structurel destiné à répondre aux mises à jour continues de sécurité et de chiffrement de YouTube, et d’une évolution clé pour la maintenance future et l’extension des fonctionnalités
2 commentaires
Waouh... C’est impressionnant de voir à quel point ils bloquent les choses, et tout aussi impressionnant de voir comment d’autres arrivent à contourner ça. Je me demande comment ils analysent tout ça et parviennent à le faire.
Avis Hacker News
Déjà inclus dans les dépôts Arch, donc ça fonctionne immédiatement
Il suffit d’ajouter un flag à la commande
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...À l’exécution, le solver est téléchargé à la volée, et ça ne prend qu’environ 0,5 seconde. J’ai l’impression que le démarrage du téléchargement est nettement plus rapide
Cela dit, dans des environnements restreints, ce serait bien de pouvoir récupérer le solver à l’avance avec une commande séparée. C’est déjà satisfaisant, mais une automatisation du packaging rendrait ça encore plus pratique
Si le problème est la sécurité, avec Deno le sandboxing est bien géré
Si l’OS ne prend pas en charge Deno ou Node, on peut aussi envisager QuickJS, écrit en C. C’est plus lent, mais ça fonctionne presque partout
En revanche, dans ce cas, le sandboxing disparaît. Cela dit, si le code vient du domaine officiel de YouTube, je pense qu’on peut lui faire confiance
/home/username/.cacheOu alors vous pouvez tenter une automatisation du packaging avec
make yt-dlp-extraRécemment, YouTube a commencé à imposer l’en-tête referrer pour les vidéos intégrées
Si on accède directement à
youtube.com/embed/<videoid>, une erreur s’affiche, et la FAQ précise que c’est une politique intentionnelleD’après la documentation officielle, l’intégrateur doit fournir un HTTP Referer, sinon l’écran affiche « error 153 »
Quand QuickTime est sorti en 1991, je pensais qu’il allait de soi qu’on pouvait copier, coller et enregistrer une vidéo
Aujourd’hui, j’ai du mal à croire que même des vidéos sans DRM offrent une expérience utilisateur aussi mauvaise
Maintenant, le lecteur par défaut de l’OS ou VLC suffit dans la plupart des cas
Depuis 2010, j’utilise yt-dlp, y compris à l’époque de youtube-dl, pour archiver toutes les vidéos que j’aime
J’en ai maintenant des dizaines de milliers, et une part importante a déjà disparu du site
Je conserve aussi des vidéos comme les temps forts de sumo de la NHK, qui ne restent disponibles qu’un mois
Au milieu de cette guerre sans fin entre blocage des pubs et insertion de pubs, j’en viens à penser qu’on verra peut-être émerger une AGI/ASI au bout du compte.
Les deux camps finiront par utiliser des LLM, et les humains se retrouveront au milieu, délestés de leur argent et de leur attention
Dans 10 ans, YouTube sera peut-être totalement inaccessible depuis un navigateur
Quand la génération habituée aux applis sur tablette deviendra majoritaire, Google aura peut-être assez confiance pour abandonner le web
Dans l’issue yt-dlp #14404, il a été proposé d’utiliser Selenium ou un navigateur headless,
mais l’équipe de maintenance a répondu que « ce serait admettre la défaite et trahir l’esprit du projet »
Le scraping est vraiment un travail ingrat. Maintenir quelque chose alors que les API cassent sans arrêt et que le fournisseur vous déteste, c’est impressionnant
On sent que YouTube adopte une attitude de plus en plus hostile envers les utilisateurs
blocage des bloqueurs de pub, collecte de contenus pour l’entraînement de l’IA, restrictions de l’API… on dirait qu’ils profitent de l’absence de concurrence
Ils sont sensibles à la satisfaction des annonceurs, mais traitent les utilisateurs et les créateurs comme des consommables
Le fait d’avoir commencé en gratuit pour éliminer la concurrence et créer une structure monopolistique relevait d’une forme de stratégie d’appât.
Il nous faut désormais une nouvelle alternative. Même payante, tant qu’elle est transparente
D’après le wiki yt-dlp EJS, Deno est recommandé parce qu’il permet d’exécuter du code avec des permissions limitées et de récupérer à distance les dépendances EJS depuis npm
donc il est plus sûr d’utiliser une isolation au niveau OS/VM comme Firecracker