Aller au contenu

Télécharger sa librairie YoutubeMusic avec Youtube-dl

·337 mots·2 mins

J’utilise YoutubeMusic pour ma librairie de musique. C’est la solution la plus pratique que j’ai trouvée, même si elle a quelques côtés un peu bancaux:

  • Sur iOS et avec les applications “natives”, et avec un compte gratuit, elle exige de rester en premier plan (avec écran allumé), alors qu’il s’agit d’une contrainte purement logicielle, présente uniquement pour passer à la caisse - il suffit d’avoir un popup d’une autre application pour se rendre compte que la musique continue.
  • Un ads-blocker fait tellement bien son boulot, qu’il n’y a plus aucune publicité. Les seules coupures proviennent de l’application elle-même qui s’inquiète de ne plus avoir personne derrière le clavier, et qui demande explicitement de cliquer sur “Oui-oui, je veux continuer, chuis là !”.

Depuis Google Takeout, on a la possibilité d’extraire toutes la plupart des informations qui nous concernent et qu’ils possèdent.

Il suffit de télécharger notre extrait d’acte de présence depuis cette plateforme, pour se retrouver avec un bô fichier .csv, que youtube-dl se fera une plaisir de mâchonner allègrement.

Quelque chose comme ceci:

youtube-dl -x mp3 -a ./music-library-songs.csv

Le paramètre -a s’attend à trouver un fichier batch contenant les URLs. Le truc génial, c’est que même si la ligne est polluée par d’autres métadonnées inutiles, youtube-dl se concentre sur la première information valable.

Et ça marche. Ça se traîne (~50-80kB/s). Mais ça marche.

Pour améliorer un peu ce brol, on peut aussi décorer un peu les fichiers téléchargés, avec les options suivantes:

  • --download-archive FILE, pour garder une trace de ce qui a déjà été téléchargé,
  • --output "%(uploader)s%(title)s.%(ext)s", pour que les fichiers soient plus ou moins bien nommés (en fonction du titre référencé sur la plateforme)
  • --continue, pour reprendre le téléchargement d’un fichier, s’il avait déjà été entamé.

Et comme YoutubeMusic coupe aléatoirement certains téléchargements, on peut placer ceci dans une petite boucle Bash (en croisant les doigts pour que le copteur soit suffisant 😉) :

#!/bin/bash

counter=0

until [ $counter -gt 400 ]
do
	youtube-dl\
     --extract-audio\
     --audio-format mp3\
     --download-archive downloaded.txt
     -a ./music-library-songs.csv\
     --output "%(uploader)s%(title)s.%(ext)s"\
     --continue
done