6 points par GN⁺ 2024-10-28 | 1 commentaires | Partager sur WhatsApp
  • You-Get est un petit utilitaire en ligne de commande pour télécharger depuis le Web des contenus multimédias comme des vidéos, de l’audio et des images, à utiliser lorsqu’il n’existe pas d’autre méthode simple
  • Il permet de télécharger des vidéos, images et fichiers audio depuis de nombreux sites comme YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili ou TikTok, ou de streamer des vidéos en ligne vers un lecteur multimédia
  • --info permet de consulter les qualités et formats disponibles, et --itag de les sélectionner, mais la sélection du format n’est généralement pas implémentée sur la plupart des sites pris en charge ; par défaut, la meilleure qualité est utilisée
  • L’installation est possible via pip, téléchargement ou clonage depuis GitHub, Homebrew, pkg de FreeBSD, Flox, etc. Les dépendances recommandées sont Python 3.7.4 ou ultérieur, FFmpeg 1.0 ou ultérieur, et RTMPDump en option
  • Il propose le téléchargement direct par URL, le scraping de pages Web, le téléchargement basé sur la recherche Google Videos, la pause et reprise, les proxys, le chargement de cookies, ainsi que la sortie des URL extraites ou en JSON, mais certaines fonctions sont expérimentales ou pas encore stabilisées

Ce que fait You-Get

  • You-Get est un petit utilitaire en ligne de commande qui télécharge des contenus multimédias depuis le Web
    • Les contenus ciblés sont les vidéos, l’audio et les images
    • Il est destiné aux cas où il n’existe pas d’autre méthode simple de téléchargement sur le Web
  • Les raisons d’utilisation mises en avant incluent le téléchargement pour un usage personnel, la reprise de contrôle sur des vidéos en ligne dont l’enregistrement est bloqué, le contournement de technologies fermées ou de JavaScript/Flash propriétaires, ainsi qu’une orientation culture hacker et logiciel libre
  • Ses principales fonctions sont les suivantes
    • Téléchargement de vidéos et d’audio depuis des sites populaires comme YouTube, Youku et Niconico
    • Streaming de vidéos en ligne dans un lecteur multimédia sans passer par un navigateur Web
    • Scraping de pages Web pour télécharger des images d’intérêt
    • Téléchargement de contenus non HTML arbitraires, comme des fichiers binaires

Installation et environnement d’exécution

  • Les dépendances recommandées sont Python 3.7.4 ou ultérieur, FFmpeg 1.0 ou ultérieur, et RTMPDump en option
  • Selon une annonce du 30 mai 2022, la prise en charge de Python 3.5, 3.6 et 3.7 finira par être abandonnée
  • Plusieurs méthodes d’installation sont disponibles
    • Depuis PyPI avec pip install you-get
    • Pour les utilisateurs de Zsh, avec Antigen : antigen bundle soimort/you-get
    • Téléchargement de la branche stable master ou de la branche develop sur GitHub
    • git clone git://github.com/soimort/you-get.git, recommandé aux développeurs
    • Sur macOS : brew install you-get
    • Sur FreeBSD : pkg install you-get
    • Sur Mac, Linux et Windows WSL : flox install you-get
  • Les définitions d’autocomplétion shell pour Bash, Fish et Zsh se trouvent dans contrib/completion
  • La mise à niveau peut se faire, selon le mode d’installation, avec pip install --upgrade you-get, en téléchargeant la dernière release, ou en réinstallant de force la branche develop

Flux de téléchargement de base

  • Pour télécharger une vidéo, on peut d’abord vérifier les qualités et formats disponibles avec you-get -i URL ou --info
    • La sortie inclut le site, le titre, les flux, le conteneur, la qualité, la taille et des exemples de --itag à utiliser pour le téléchargement
    • Le téléchargement par défaut utilise le premier élément de la liste
  • Pour un autre format, il faut utiliser la valeur --itag indiquée dans la sortie
    • Par exemple, pour la vidéo YouTube Me at the zoo, --itag=18 permet de sélectionner le mp4
  • Si une vidéo YouTube dispose de sous-titres, ils sont téléchargés avec le fichier vidéo au format de sous-titres SubRip
  • La sélection du format n’est pas encore implémentée comme fonction générale sur la plupart des sites pris en charge
    • Dans ce cas, le format téléchargé par défaut est celui de la meilleure qualité
  • FFmpeg est nécessaire pour télécharger et fusionner les vidéos streamées en plusieurs fragments, ainsi que pour les vidéos YouTube haute résolution en 1080p et au-delà
    • Pour éviter la fusion des fragments après le téléchargement, utilisez --no-merge ou -n

Téléchargement par URL, page Web et recherche

  • Si l’URL exacte de la ressource est connue, elle peut être téléchargée directement avec you-get URL
    • Par exemple, avec l’URL d’une image JPEG, l’outil affiche le site, le titre, le type et la taille, puis enregistre le fichier
  • Si l’on fournit l’URL d’une page Web plutôt que l’URL exacte d’une ressource, l’outil tente de scraper la page pour y trouver des éléments d’intérêt
    • Cette fonction est expérimentale et n’est pas parfaite
    • Elle fonctionne le mieux pour scraper de grandes images sur des sites populaires comme Tumblr et Blogger
    • Il n’existe pas de motif universel applicable à tous les sites Internet
  • Si l’argument fourni n’est pas une URL, l’outil recherche sur Google Videos et télécharge la vidéo la plus pertinente
    • Le résultat peut ne pas être exactement celui voulu, mais il est présenté comme ayant de fortes chances d’être très plausible

Contrôle du téléchargement et options d’exécution

  • Un téléchargement peut être interrompu avec Ctrl+C, ce qui laisse un fichier temporaire .download dans le répertoire de sortie
    • En relançant la même commande avec les mêmes arguments, le téléchargement reprend depuis la dernière session
    • Si un fichier complet sans extension temporaire existe déjà, le téléchargement est ignoré
    • --force ou -f force un nouveau téléchargement et écrase les fichiers existants ou temporaires portant le même nom
  • --output-dir ou -o permet de préciser le chemin d’enregistrement, et --output-filename ou -O le nom du fichier
    • C’est utile lorsque le titre vidéo par défaut contient des caractères spéciaux incompatibles avec le shell, le système d’exploitation ou le système de fichiers actuels
    • C’est aussi pratique dans des scripts de téléchargement par lots pour enregistrer dans un dossier et sous un nom définis
  • Un proxy HTTP peut être indiqué avec --http-proxy ou -x
    • Par défaut, le réglage de proxy système via la variable d’environnement http_proxy est appliqué
    • Pour désactiver le proxy, utilisez --no-proxy
    • Sur certains sites comme Youku, --extractor-proxy ou -y peut être utilisé pour extraire des informations de vidéos accessibles uniquement depuis la Chine continentale
  • --player ou -p transmet la vidéo à un lecteur multimédia comme mpv ou vlc au lieu de la télécharger
    • En spécifiant un navigateur comme lecteur, il est possible de regarder la vidéo dans le navigateur sans publicité ni section de commentaires
    • Cela peut aussi servir à lancer un autre gestionnaire de téléchargement, même si l’intégration peut ne pas être idéale

Authentification, données extraites et sites pris en charge

  • Pour les contenus nécessitant une connexion à un compte, comme des vidéos non publiques, il faut transmettre les cookies du navigateur avec --cookies ou -c
    • Les formats de cookies actuellement pris en charge sont Mozilla cookies.sqlite et Netscape cookies.txt
  • --url ou -u affiche la liste des URL de ressources téléchargeables extraites de la page
  • --json affiche un résumé des données extraites au format JSON
    • Cette fonction n’est pas encore stabilisée, et le schéma JSON pourrait subir des changements incompatibles à l’avenir
  • La liste des sites pris en charge inclut YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu, etc.
    • La prise en charge des vidéos, images et fichiers audio varie selon les sites
  • Pour les sites absents de la liste, un extracteur générique recherche dans la page les ressources d’intérêt et les télécharge

Signalement de problèmes et licence

  • Lorsqu’il est impossible de télécharger le contenu souhaité, consultez d’abord les Known Bugs
  • Avant de signaler un nouveau problème ou de contribuer, il faut lire les consignes de contribution
  • Pour les questions rapides, le canal Gitter #soimort/you-get est disponible
  • Le logiciel est distribué sous MIT license
    • Le logiciel est fourni « tel quel », sans garantie
    • L’auteur n’est pas responsable des usages portant atteinte au droit d’auteur ou poursuivant d’autres objectifs illégaux
    • Le dépôt ne fournit que le code ; la manière de l’utiliser relève du choix de l’utilisateur

1 commentaires

 
GN⁺ 2024-10-28
Avis sur Hacker News
  • Pendant un temps, Internet coûtait cher et la bande passante était limitée, mais j’aimais écouter de la musique et des cours sur YouTube. À un moment, j’ai compris que ne récupérer que le flux audio permettait de réduire de 90 % le coût en bande passante.
    youtube-dl et yt-dlp avaient un flag -G qui affichait l’URL du format/de la qualité demandés ; sur ordinateur, j’obtenais l’URL en ligne de commande et je la collais dans VLC.
    Sur téléphone, au début, j’utilisais un contournement compliqué : je téléchargeais d’abord le fichier sur un VPS via SSH, puis je le retéléchargeais sur le téléphone. Plus tard, j’ai découvert que le navigateur du téléphone pouvait lire l’URL directement, et j’ai donc créé un frontend PHP pour youtube-dl -G -f bestaudio {url}.
    Il n’est plus en ligne aujourd’hui et j’ai perdu le code, mais c’était essentiellement une ligne. you-get semble aussi prendre en charge le même usage avec --url / -u, donc je voulais signaler à quel point cette fonctionnalité est utile.
    En lisant écran éteint, on économise aussi 80 % de batterie. YouTube le sait aussi, et c’est probablement pour cela qu’ils ont fait de la lecture en arrière-plan, quand on ne récupère que le flux audio, une fonctionnalité payante.

    • Le navigateur Brave Mobile permet d’activer la lecture audio des vidéos en arrière-plan, ce qui évite d’avoir besoin d’un abonnement comme YouTube Premium.
    • youtube-dl ne semble plus très bien fonctionner, et j’ai dû utiliser le fork yt-dlp. Changer de projet comme ça est toujours inquiétant, mais au moins il semble assez largement utilisé.
    • Ma mère adore vraiment les livres audio, alors je lui ai créé avec node-red un bot Telegram qui traite les liens YouTube qu’on lui partage.
      Les liens sont envoyés dans une FIFO, puis un petit daemon les télécharge séquentiellement et les enregistre dans un dossier incoming dédié. Le bot peut récupérer uniquement l’audio ou la vidéo complète, mais pour l’ID Telegram de ma mère, je l’ai configuré pour ne récupérer que l’audio.
      Ce dossier est surveillé par Jellyfin, ce qui lui permet de télécharger ou d’écouter directement. En deux ans, elle a récupéré plus de 1 To de livres audio et elle en est ravie.
      Code du daemon : https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
    • En situation de faible bande passante, je choisis souvent le 144p. La taille est presque la même que celle d’un flux audio seul de bonne qualité, mais cela permet de voir l’intervenant au moins une fois toutes les 45 minutes. On économise aussi la batterie de la même façon.
      Les vidéos en 144p ont quelque chose d’étrangement paisible et confortable. On n’est pas distrait par des couleurs éclatantes ou des détails complexes, on peut simplement se concentrer sur l’écoute.
    • Dans Safari sur iOS, on peut provoquer une sorte de comportement bancal permettant de lire l’audio d’une vidéo YouTube en arrière-plan : il suffit de quitter Safari, puis d’appuyer rapidement sur le bouton de lecture vidéo dans l’interface « En cours de lecture ».
      Je m’en sers surtout pour lire des vidéos réservées aux membres qui ne se lancent pas en arrière-plan même avec YouTube Premium. À chaque mise à jour d’iOS, je prie pour qu’ils ne corrigent pas ce « glitch ».
  • Ce projet semble ne pas vouloir qu’on signale seulement des issues sans PR de correction.
    C’est formulé comme « pour signaler un problème découvert lors de l’utilisation de you-get, vous devez ouvrir une Pull Request… », et je n’avais jamais vu cette approche auparavant.

    • Comme quelqu’un d’autre l’a dit, il semble que l’idée soit de demander non pas la correction elle-même, mais un test qui échoue.
      Les exigences sont une description détaillée du problème et au moins un commit qui couvre ce problème par un test unitaire. Le mot « addressing » est mal choisi ici ; « demonstrating » aurait sans doute été meilleur.
    • La version chinoise contient un en-tête supplémentaire qui se traduit par « afin d’éviter l’abus de GitHub Issues, les issues ordinaires ne sont pas acceptées ». L’ancienne formulation anglaise disait ceci :
      you-get expérimente actuellement une approche agressive de gestion des issues, et les rapports de bug doivent être traités dans le code via des pull requests.
      https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
      Ils ont probablement eu beaucoup trop de spam. À noter que tests/test.py semble exécuter directement les extracteurs sur plusieurs sites web, et je n’ai pas trouvé où les requêtes et réponses réseau sont mockées. L’objectif est peut-être de simplifier le processus pour les personnes qui créent une PR.
    • Cela semble vouloir dire qu’il faut soumettre une PR incluant un test qui permette de montrer si le problème est résolu.
    • L’idée d’encourager les gens à essayer d’écrire des tests, voire une correction complète, est intéressante, mais dire qu’on n’acceptera que ça me paraît un peu excessif. Cela dit, je ne maintiens pas you-get, donc je ne sais pas ce qu’ils subissent.
      C’est peut-être un moyen efficace de filtrer le flot d’issues répétitives postées par des gens qui ne savent pas exécuter correctement un programme en ligne de commande.
    • Écrire un test qui échoue est relativement facile, et cela réduit fortement le travail de tri des issues. Cela diminue aussi le risque que GitHub Issues se transforme en forum de support.
      Si cela rend le projet plus facile à maintenir et lui permet de durer plus longtemps, ça me semble acceptable.
  • En ne voyant que le titre et le début de la description, je pensais que c’était un outil fondé sur des heuristiques qui essayait d’attraper n’importe quoi sur une page. Le genre d’outil utile quand il n’existe pas de prise en charge spécifique pour un site, autrement dit, la plupart du temps, « quand yt-dlp ne le prend pas en charge ».
    Mais en réalité, son architecture repose sur des extracteurs, avec un extracteur distinct pour chaque source un minimum populaire. Au final, je me demande si ce n’est pas plutôt une copie plus simple de yt-dlp.

  • Je me demande si d’autres personnes rencontrent constamment cette erreur
    Ça commence par you-get: [error] oops, something went wrong., puis ça conseille de vérifier les problèmes réseau, de vérifier qu’on a la dernière version, de chercher les bugs connus et de lancer avec l’option --debug
    Même avec le flag de débogage, ça n’a pas vraiment aidé, et j’ai eu TypeError: decoding to str: need a bytes-like object, NoneType found sur pattern = str(pattern, 'latin1')
    Je voulais voir s’il était possible de contourner la limite d’âge, mais la même erreur se produisait aussi sur des vidéos sans limite d’âge

    • Il vaudrait mieux vérifier la version de Python
      On peut passer à un Python récent avec un outil comme Pyenv, ou lancer une image Docker du genre docker run -it -v $(pwd):/mnt python:3.13 bash et essayer l’utilitaire à l’intérieur
  • Quelqu’un peut expliquer en quoi c’est mieux que yt-dlp ?

    • Question intéressante. Il n’y a qu’une seule bibliothèque en dépendance, mais je me demande quelle quantité du code est réellement écrite maison
      Par exemple, j’ai trouvé étonnant qu’il y ait un assembleur MP4 dédié. Si ffmpeg existe déjà, il doit être difficile de faire vraiment mieux soi-même
      https://github.com/soimort/you-get/blob/develop/src/you_get/...
    • Je me demande comment tu as déduit que c’était mieux que yt-dlp. Dans un domaine que Google essaie sans cesse de verrouiller, je pense que plus il y a d’options, mieux c’est
  • Il est difficile de qualifier précisément d’outil « bête » un téléchargeur de médias façon ytdl doté d’une bibliothèque d’extracteurs et de convertisseurs propres à chaque site, mais c’est toujours une bonne chose de voir davantage de projets comme ytdl

  • Je ne comprends pas trop pourquoi Bandcamp figure dans la liste des sites pris en charge. Bandcamp permet tout simplement de télécharger les fichiers si l’on paie d’abord l’artiste
    Ce qu’on peut récupérer avec cet outil l’est parce que l’artiste a autorisé l’écoute gratuite avant achat. Télécharger avec cet outil semble totalement inutile et un peu irrespectueux. Bandcamp héberge surtout de petits artistes et labels indépendants

    • La liste des sites pris en charge n’est pas une déclaration morale sur les endroits où il faudrait utiliser cet outil. C’est simplement une liste de sites populaires où l’outil fonctionne
    • Je pense qu’on peut aussi utiliser cet outil après s’être abonné ou après avoir acheté. Les gens téléchargent avec ce genre d’outils d’automatisation même du contenu qu’ils ont déjà payé, pour éviter d’avoir à se connecter à cinq applis appartenant à des écosystèmes fermés différents
    • Tout le monde ne vit peut-être pas dans un pays où il est possible de payer sur Bandcamp
      Personnellement, il m’arrive aussi de vouloir, ou de devoir, consommer des médias hors ligne à cause d’un réseau instable ou lent, ou d’opérateurs coûteux. Cela ne veut pas dire que je ne paierai pas plus tard si ça me plaît
    • Les gens qui piratent considèrent à partir de quel niveau de revenu qu’il est moral ou immoral de voler tel ou tel contenu ?
    • Tout le monde n’est pas d’accord pour dire que les artistes doivent être rémunérés pour leurs œuvres
  • Ça a l’air bien fait. Mais, en tant que consommateur, je me demande quelle raison j’aurais d’utiliser you-get plutôt que yt-dlp
    Quel avantage a-t-il par rapport à yt-dlp, qui fonctionne plutôt bien sur un nombre énorme de sites ?
    [1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....

  • La documentation dit : « Rechercher et télécharger depuis Google Videos : $ you-get "Richard Stallman eats" »
    Je ne lis pas souvent la documentation, mais cette fois je l’ai lue et j’y ai trouvé un easter egg assez répugnant

  • J’aime bien. J’imagine qu’une extension compagnon pour Chrome/Firefox, qui utiliserait you-get comme backend et serait intégrée de façon fluide, serait sympa
    En allant plus loin, on peut imaginer une extension you-get qui, lorsqu’on va sur YouTube, contourne le lecteur YouTube et lit directement le contenu sans publicité. Ce serait applicable non seulement à YouTube, mais aussi à d’autres plateformes