27 points par GN⁺ 2025-09-25 | 1 commentaires | Partager sur WhatsApp
  • Pour continuer à utiliser normalement le téléchargement YouTube avec yt-dlp, l’installation de Deno (ou d’un runtime JavaScript pris en charge) deviendra bientôt obligatoire
  • En raison de changements récents côté YouTube, il n’est plus possible de résoudre les défis JS avec le seul « interpréteur » JavaScript intégré
  • Les utilisateurs des exécutables PyInstaller n’auront qu’à préparer Deno, tandis que les utilisateurs du paquet PyPI devront installer des composants JavaScript supplémentaires
  • La prise en charge d’autres runtimes JavaScript (Node, Bun, etc.) reste envisagée, mais seul Deno est adapté du point de vue de la sécurité et du sandboxing
  • Des options dédiées et une documentation seront fournies concernant l’installation de Deno et des dépendances associées, ainsi que la configuration des chemins

Annonce des changements du téléchargement YouTube dans yt-dlp et des nouvelles exigences

Pourquoi cette nouvelle exigence

  • Dans un avenir proche, il sera obligatoire d’installer Deno ou un autre runtime JavaScript pris en charge pour utiliser normalement la fonction de téléchargement YouTube
  • Jusqu’à présent, yt-dlp résolvait les défis JS de YouTube à l’aide de son interpréteur JavaScript intégré, mais en raison de changements récents dans la logique interne de YouTube, cette méthode seule ne suffit plus
  • L’ampleur des changements est telle que, pour fonctionner correctement, yt-dlp devra impérativement utiliser un algorithme basé sur un vrai runtime JavaScript afin de faire passer les requêtes vers YouTube

Préparation et marche à suivre selon le profil utilisateur

  • Installer Deno (ou un runtime JS pris en charge)
    • Les runtimes supplémentaires pris en charge seront précisés plus tard, notamment dans la FAQ
  • Il pourra être nécessaire d’installer certains composants JavaScript requis par yt-dlp
    • La nécessité d’étapes supplémentaires dépendra du mode d’installation et de la forme de distribution de yt-dlp

Checklist selon la distribution officielle

  • Exécutables officiels fournis via PyInstaller (yt-dlp.exe, yt-dlp_macos, yt-dlp_linux, etc.)
    • Il suffit d’installer Deno ; les composants supplémentaires sont déjà inclus dans l’exécutable
  • Paquet PyPI (pip, pipx, etc.)
    • Il faut installer yt-dlp avec le groupe de dépendances default et le mettre à jour vers la dernière version
    • Exemple : pip install -U "yt-dlp[default]"
  • Binaire officiel zipimport (yt-dlp pour Unix)
    • Il faudra ajouter un flag pour permettre à Deno de télécharger les dépendances npm
    • Ou bien installer dans l’environnement Python un paquet distinct de résolution JS pour yt-dlp (les options et le nom du paquet seront annoncés ultérieurement)
  • Paquets tiers (pacman, brew, etc.)
    • Les mesures à prendre pourront varier selon la politique de la distribution, mais la méthode prévue pour les utilisateurs du binaire zipimport pourra être utilisée

Discussions autour des runtimes et de la sécurité

  • La prise en charge de runtimes JS alternatifs comme Node ou Bun reste possible, mais à ce stade ils n’offrent pas le même niveau de sécurité et de sandboxing que Deno
  • La prise en charge d’autres runtimes JS à l’avenir est encore en discussion ; en attendant une décision finale, les recommandations seront basées sur Deno

Informations complémentaires sur l’installation de Deno

  • Comme yt-dlp, Deno peut être utilisé simplement en téléchargeant un exécutable unique depuis GitHub et en le plaçant dans le chemin d’exécution
  • Plus tard, l’option --js-runtimes devrait être ajoutée à yt-dlp afin de permettre d’indiquer le chemin vers l’exécutable Deno (le nom de l’option et son usage peuvent encore changer)
  • Après avoir téléchargé Deno avec Curl ou un autre outil, il devrait fonctionner correctement s’il est placé dans le même dossier que l’exécutable yt-dlp

FAQ et indications supplémentaires

  • Selon l’OS ou le gestionnaire de paquets utilisé, il pourra être nécessaire d’ajouter Deno au PATH
  • Sur certains environnements, comme Linux, Deno peut être automatiquement ajouté au PATH
  • Les questions supplémentaires et les problèmes d’installation seront pris en charge via la FAQ ou la communauté

Réactions de la communauté et mises à jour à venir

  • Certains utilisateurs s’interrogent déjà sur divers effets de bord, comme la fin de la prise en charge des systèmes 32 bits ou les options de distribution
  • L’équipe de développement de yt-dlp prépare de meilleures consignes et un meilleur support à partir des signalements d’issues, des correctifs et des retours de la communauté

Conclusion et résumé

  • En raison de changements dans l’architecture du système de YouTube, le fonctionnement interne et les exigences de yt-dlp évoluent fortement
  • Changement majeur : pour continuer à télécharger depuis YouTube normalement, il faudra impérativement disposer de Deno ou d’un autre runtime JS
  • Il est nécessaire de réagir rapidement en suivant les consignes propres à chaque mode de distribution officiel
  • Des informations complémentaires, une FAQ et des guides d’installation seront fournis progressivement

1 commentaires

 
GN⁺ 2025-09-25
Avis Hacker News
  • Je suis abonné payant à YouTube Premium. Le week-end dernier, j’ai essayé de télécharger des vidéos à regarder dans le train, mais sur l’iPad comme sur l’iPhone, cela restait bloqué à l’étape « En attente de téléchargement.. ». Redémarrer n’a rien changé, et après une heure d’essais, j’ai abandonné. J’ai récupéré les vidéos avec yt-dlp, puis je les ai transférées sur une clé USB-C pour les regarder. Si la politique de « restriction du partage Premium entre membres d’une famille » est mise en place bientôt, je résilierai pour de bon à ce moment-là. Ma famille profite bien de l’absence de publicité, pour l’instant

    • Je suis aussi abonné Premium, mais j’ai rencontré un problème similaire sur l’app iPad. Même pour télécharger des vidéos à montrer au bébé, ça ne marche pas correctement du premier coup. Ça m’a tellement agacé que j’ai acheté une Samsung Galaxy Tab A7 d’occasion et installé une ROM custom avec LineageOS. J’y ai mis tous les médias que je voulais sur une carte SD de 1 To, et tout se lit très bien avec VLC. En plus, NewPipe, récupéré via la boutique F-Droid, télécharge les vidéos YouTube de façon bien plus fiable que l’app officielle. À l’origine, je comptais remplir l’appareil avec des médias via quelque chose comme yt-dlp, mais ce n’est plus nécessaire maintenant

    • Je paie YouTube Premium, mais sur smartphone je regarde via ReVanced parce qu’il faut désactiver l’application automatique des traductions. Je ne comprends pas pourquoi l’app officielle ne permet pas à l’utilisateur de modifier ce réglage

    • Quand on met une vidéo en ligne sur YouTube puis qu’on essaie de la télécharger depuis le tableau de bord créateur — par exemple après un live sans sauvegarde locale, ou quand l’ordinateur est trop chargé — on ne peut la récupérer qu’en 720p basse qualité. En revanche, avec yt-dlp, on obtient la meilleure qualité possible

    • J’ai annulé mon abonnement parce que l’absence de pub ne fonctionnait pas sur YouTube Kids (j’utilisais un ShieldTV). C’était probablement un bug, mais sans support client, il n’y avait rien à faire. J’étais abonné payant à Play Music, puis on m’a forcé à basculer vers YouTube, et ça a été la déception de trop

    • Si tu attendais des nouvelles sur l’arrivée de restrictions au partage familial, il y en a déjà eu. J’ai moi aussi reçu un e-mail de YouTube à ce sujet. Pour l’instant, j’utilise encore le service sans publicité, mais je ne sais pas quand ce sera réellement appliqué. On peut consulter cet article

  • J’admire le travail d’ingénierie accompli dans l’« interpréteur JavaScript » de yt-dlp yt-dlp jsinterp.py

    • C’est une approche parfaitement adaptée au problème. Le fait d’avoir poussé l’implémentation jusque-là sans surcoût supplémentaire est vraiment impressionnant

    • C’est sans doute le point le plus discret mais le plus important de cette annonce. Je ne m’attendais pas à ce que la structure soit déjà devenue aussi complexe, et c’est très impressionnant

    • Il s’agit d’interpréter seulement une partie de JavaScript. Voir aussi cette discussion HN lien

    • En jetant un œil au code, j’ai découvert ChainMap de Python

    • Je me demande quelle quantité de JavaScript est réellement interprétée, et si, avec moins de 1 000 lignes de code, cela pourrait servir dans un cours d’introduction aux compilateurs

  • Cela fait plus de 30 ans que je collectionne les médias numériques, en « digital hoarder ». Je n’ai ni VHS, ni DVD, ni autre support physique : tout est conservé au format numérique. J’ai même quelques contenus rares ou susceptibles de disparaître. Ma femme s’est intéressée à mon système que je fais tourner « comme un Netflix à la maison », et elle a apprécié le visionnage sans pub. Je ne me suis jamais considéré comme quelqu’un d’exceptionnel ; je pensais que tout le monde allait simplement utiliser le streaming. Depuis des années, je dis autour de moi : « si j’ai un programme que tu aimes dans ma collection, dis-le-moi ». Mais ces deux dernières années, famille et amis ont commencé à me demander un accès à mon serveur Jellyfin ou à me demander de leur monter un petit serveur sous leur télé. Récemment, j’ai aussi ajouté à Jellyfin l’archivage de chaînes YouTube, avec un dossier et une commande yt-dlp par chaîne pour télécharger automatiquement les vidéos. En revanche, comme je ne peux pas les télécharger dans le codec h264 que je veux, je les réencode. Les vidéos YouTube sont fournies en AV1, mais comme ma smart TV ne prend pas encore ce codec en charge, je les encode moi-même

    • Avant, j’utilisais un simple script, mais maintenant je passe par ytdltt GitHub de ytdltt via un bot Telegram, afin que ma mère puisse récupérer des vidéos YouTube comme des livres audio, téléchargées et rangées par dossier, puis accessibles dans Jellyfin. Elle a accumulé environ 1,2 To de livres audio en trois ans

    • Pour un usage similaire, on peut aussi essayer tubesync

    • Si le téléchargement de contenu h264 ne fonctionne pas, la documentation de yt-dlp peut paraître difficile, mais la méthode qui fonctionne bien actuellement ressemble à ceci
      yt-dlp -f "bestvideo[width<800][vcodec~='^(avc|h264)']+bestaudio[acodec~='^((mp|aa))']"

    • J’ai récemment découvert Pinchflat GitHub de Pinchflat, qui utilise yt-dlp en backend comme alternative web dans le style *arr. Il suffit d’ajouter les vidéos qu’on veut télécharger dans une playlist, et elles sont récupérées automatiquement

    • Je me demande s’il faut contourner la détection de bots avec l’enregistrement de cookies, etc., et s’il faut aussi utiliser un VPN

  • L’époque où le web consistait simplement à récupérer des données est terminée ; maintenant il faut exécuter des milliers de lignes de JavaScript obfusqué. Avant, on pouvait facilement récupérer et mettre en cache un fichier JSON de 1 kb, alors qu’aujourd’hui il faut lancer un navigateur complet et échanger 10 Mo de données sur 100 requêtes, tout en dégradant l’environnement d’analyse et le profil de sécurité. C’est une perte pour tout le monde

    • Si on veut voir le bon côté des choses, cet environnement pénible ouvre une opportunité business pour 10 000 entreprises de scraping qui récupèrent 10 Mo de déchets pour ensuite les exposer via une API correcte. Mais comme la qualité du contenu des sites web baisse elle aussi, ce genre de problème devient progressivement moins important

    • Aujourd’hui, le web est devenu tellement complexe que cela ressemble à un jeu sans fin entre scraping, anti-scraping et contournement. Mais avec l’arrivée de l’IA et des LLMs, il est devenu possible — à un coût plus élevé — d’extraire n’importe quelle information. Bientôt, les LLM franchiront aussi tous les captchas. On approche peut-être d’un moment où le « trou analogique » sera toujours ouvert. Il suffira de pointer une caméra et un micro vers l’écran et le son pour que l’IA interprète le tout mieux qu’un humain

    • Heureusement, le scraping à petite échelle comme avec yt-dlp n’a jamais été aussi facile. En une ou deux heures, on peut monter un script avec Firefox headless et mitmproxy, et tant qu’on ne fait pas tourner plusieurs VPS pour aspirer un site entier à grande échelle, on peut archiver sans difficulté le contenu qu’on veut. Cloudflare ne bloque pas les utilisateurs ordinaires à faible volume. L’automatisation des navigateurs modernes est suffisamment simple pour qu’un utilisateur seul puisse récupérer facilement le contenu d’un site, même si c’est une SPA. Et pour les captchas, à petite échelle, on peut les résoudre soi-même. De mon côté, quand un captcha apparaît, je reçois une alerte Discord, je le résous sur mon portable, puis le scraping continue. Comme l’app « World Garden » cherche à contrôler les webtoons que j’ai payés, je considère que je dois garder le contrôle sur mes données

    • En réalité, même pour ce JSON de 1 kb, le web moderne impose déjà de télécharger des Mo de JavaScript pour ensuite afficher les données. Ce que je veux, moi, c’est juste récupérer 10 à 20 kb de HTML, un peu de CSS et les fichiers d’image. Pour la vidéo, il suffit de télécharger directement le mp4. C’est simple et efficace, mais si l’objectif est de vendre quelque chose, la logique change

    • Toute cette complexité n’existe que pour vendre plus de publicité

  • Nsig/sig : ce sont des jetons spéciaux qui doivent obligatoirement être inclus dans les appels API. Ils sont générés dans base.js (le code du lecteur), que les clients tiers comme yt-dlp doivent contourner pour les extraire. Avant, on récupérait une partie du code avec des regex ou des méthodes similaires pour obtenir ces jetons, mais maintenant la logique est tellement dispersée qu’il faut quasiment exécuter tout base.js pour les générer
    PoToken : c’est la preuve d’origine (token) que Google a récemment renforcée. Sans lui, on obtient une erreur 403. Sur Android, cela passe par DroidGuard ; sur iOS, par un module embarqué dans l’app ; sur le web, il faut exécuter du code JS de challenge. Avant, il fallait le générer avec un outil externe, mais la mise à jour basée sur Deno de yt-dlp annonce une intégration prochaine
    SABR : technologie de streaming adaptatif à débit variable côté serveur, utilisée avec le protocole UMP de Google. Le serveur reçoit la position de lecture et l’état du buffer afin de contrôler au mieux le buffering et même l’insertion de publicités. La prise en charge par des clients tiers est encore en cours de développement
    Exemples d’extraction de Nsig/sig :

    • Je comprends maintenant pourquoi Google et Cloudflare veulent limiter le web à quelques navigateurs signés et vérifiés en intégrité

    • À propos du PoToken sur le web, je me demande comment le fait d’exécuter un snippet JS prouve qu’on n’est pas un bot. Si ce n’est que du JS côté client, ça ne devrait pas aussi fonctionner dans Chromium headless ?

    • À peine Google l’a-t-il introduit que des méthodes de contournement apparaissent déjà. Même pour un grand groupe, dès lors qu’on livre le contenu au client, le contournement reste possible. C’est pour cela qu’ils veulent tous créer des écosystèmes fermés et propriétaires : pour forcer les gens à regarder les pubs jusqu’au bout ou à payer

  • Il y a peu, une discussion sur HN avançait aussi que YouTube veut en réalité que les outils de téléchargement continuent de fonctionner article connexe 1 article connexe 2. YouTube exploite un service mondial utilisé par 3 milliards de personnes, et donne l’impression de ne jamais chercher à bloquer complètement le téléchargement, mais seulement à le freiner « juste ce qu’il faut ». Je pense que si tous les utilisateurs du monde avaient des iPhone et Android récents, ils activeraient immédiatement le DRM partout

    • yt-dlp s’appuie sur une API destinée aux anciennes smart TV. Comme ces appareils ne reçoivent plus de mises à jour logicielles, cette fonctionnalité pourrait disparaître si ce trafic venait à cesser

    • Je ne trouve pas logique la théorie du complot selon laquelle une plateforme de contenu voudrait faciliter les téléchargements au point de saboter son propre modèle économique

  • Le lecteur et la page YouTube deviennent tellement lourds qu’ils sont paradoxalement plus lents sur les vieux PC. Récemment, j’ai remplacé watch?v= par /embed/ pour regarder en 480p, et quand je télécharge la même vidéo pour la lire localement, l’utilisation CPU tombe à environ 3 %. Mais même ça fonctionne de moins en moins bien. Pendant ce temps, d’autres sites (par ex. les sites porno) font davantage d’efforts pour optimiser l’expérience et ne semblent pas trop se soucier des outils de téléchargement
    Vidéo (normale)
    Vidéo (embed)

    • GitHub est pareil : ce n’est pas optimisé non plus, au point d’être presque inutilisable même sur un PC i5 de 8e génération. Du coup, je prends carrément des snapshots pour les consulter hors ligne

    • La dégradation des performances de YouTube aujourd’hui vient du fait qu’on force tout le monde à utiliser uniquement des codecs modernes et lourds. Mon portable lit sans problème des vidéos 4K h264, mais dès que je regarde une simple vidéo YouTube en 720p, il chauffe et se met à ramer. Une extension de navigateur comme h264ify permet de bloquer certains codecs, mais je regrette qu’on ne puisse pas régler ce comportement par défaut. Télécharger la vidéo pour la regarder ensuite est finalement plus simple et plus fiable

    • Je ne suis pas le seul à l’avoir constaté. Au premier trimestre 2025, je regardais encore via le lecteur embed, mais au troisième trimestre Google l’a volontairement cassé. À l’heure actuelle, YouTube n’est accessible qu’avec yt-dlp. Longue vie à yt-dlp et à ses développeurs

    • Je pense quitter YouTube pour aller vers PeerTube et des plateformes pair-à-pair

  • Des rapports indiquent que QuickJS (interpréteur JS léger) est tellement lent qu’il lui faut plus de 20 minutes par vidéo. Deno est bien plus rapide ; je me demande d’où vient un tel écart
    (voir issue #14404 / réponse)

    • QuickJS est un interpréteur basé sur du bytecode — lent comme Python — privilégiant la simplicité et la stabilité. Deno, à l’inverse, utilise un compilateur JIT très performant au niveau de Chrome, et cette différence peut facilement produire un facteur 20 ou plus dans certains cas. QuickJIT (un fork de QuickJS ajoutant un JIT via TCC) resterait probablement plus lent que Deno, mais il pourrait améliorer les choses

    • Le fait que les performances se soient dégradées à ce point donne presque l’impression que Google a volontairement conçu cela pour être lent sur les autres interpréteurs, ce qui est assez inquiétant

    • C’est intéressant. Minecraft (Bedrock, pour le modding) utilise aussi QuickJS, et même si c’est plus lent que V8, l’écart ne me paraît pas aussi énorme

  • Il est désormais clair que l’époque du ripping facile touche à sa fin. Si vous avez des vidéos YT que vous voulez conserver sur le long terme, je recommande d’installer dès maintenant quelque chose comme tubearchivist pour faire des sauvegardes

    • Je recommande aussi pinchflat GitHub de Pinchflat comme alternative. C’est moins abouti que tubearchivist, mais dans mon expérience, il y a moins de bugs

    • Je pense que les biens culturels et éducatifs précieux créés sous la domination de marché de YT sont à leur dernière fenêtre de sauvegarde. tubearchivist a l’air intéressant, mais l’installation et la maintenance semblent assez contraignantes, ce qui me freine. Et l’approche reste centrée sur le téléchargement de chaînes entières auxquelles on est abonné. Dans mon cas, si j’ai juste un dossier de téléchargements, cela me suffit, à condition d’avoir un serveur web local très léger capable d’interpréter les noms de fichiers et de générer des pages avec les liens. Si quelqu’un connaît une alternative ultra légère installable en quelques clics, je suis preneur

    • Je me demande aussi pourquoi, alors qu’il existe déjà une solution DRM pour les films sur YouTube, elle n’a pas encore été déployée à l’ensemble des chaînes

  • J’ai été surpris par le choix de Deno, mais Deno se distribue facilement sous forme de binaire unique, ce qui réduit les problèmes d’installation. L’interpréteur basé sur Python était un hack impressionnant, mais il avait ses limites, et le sujet avait déjà été discuté à l’époque du projet Youtube-dl ancienne discussion HN

    • Node n’a pas les mêmes fonctions de sécurité et d’isolation que Deno. On peut aussi voir les commentaires du mainteneur dans le même fil

    • Les fonctions de sandbox de Deno sont aussi une raison importante de ce choix. Ce n’est pas fiable à 100 %, mais c’est toujours mieux que rien

    • yt-dlp ne prend pas seulement en charge YouTube, mais aussi une multitude d’autres sites de streaming vidéo, parfois douteux. Un niveau minimal de sandboxing, comme dans un navigateur, est donc indispensable. Comme l’outil est conçu pour exécuter du code non fiable, il faut au moins assurer une base de sécurité par défaut