web-dev-qa-db-fra.com

Dans le script bash, comment puis-je m'assurer que youtube-dl télécharge tous les fichiers d'une liste de lecture

J'essaie d'automatiser le téléchargement d'une liste de lecture à l'aide de youtube-dl à l'aide d'un script bash. J'ai eu du succès quand youtube-dl ne génère aucune erreur.

Disons qu'il y a une erreur de contenu trop court, puis j'essaie de boucler pour terminer les fichiers de la liste de lecture après avoir dormi pendant 90 secondes afin de ne pas bombarder le site.

Cependant, ce que je ressens, c’est que, pour une raison quelconque, le sommeil ne fonctionne pas comme prévu et que le site est bombardé de nouvelles requêtes menant à un http 429.

Que puis-je faire pour améliorer mon script ... script partiel affiché ici

until youtube-dl --verbose --ignore-errors url-to-playlist; do 
        sleep 90; 
    done

Est-ce que j'utilise la mauvaise boucle? Y a-t-il un meilleur moyen?

Merci pour votre temps

1
Hamza Ahmed Zia

Vous passez une liste de lecture sur youtube-dl, avec l'option de ligne de commande --ignore-errors. Cela signifie que youtube-dl tentera de télécharger la liste complète des vidéos avant de quitter. quel que soit le nombre d'échecs auxquels il fera face en cours de route. Donc, si la vidéo n ° 2 échouait, la demande pour la vidéo n ° 3 suivrait immédiatement après. Je ne sais pas à quel point Google est vigilant, mais cela pourrait déjà vous sonner le glas.

Et même après que la dernière vidéo de votre liste de lecture a été vue, êtes-vous sûr que youtube-dl renvoie un code de sortie non nul? Il n'y a aucune mention de cela dans le readme , donc je ne serais pas surpris que votre sleep 90 ne soit jamais exécuté.

D'ailleurs, à quoi sert cette boucle de toute façon? Le redémarrage de youtube-dl avec la même liste de lecture permettra de tout télécharger à nouveau; y compris toutes les vidéos qui ont été téléchargées avec succès la première fois. Bien que les options --no-overwrites et --continue puissent être utiles ici.

Pour empêcher Google de bloquer votre adresse IP (HTTP 429), il est conseillé d’utiliser l’option --sleep-interval. Exemple:

youtube-dl --verbose --ignore-errors --sleep-interval 10 url-to-playlist

Je ne sais pas si l'intention de votre boucle était de continuer à retenter une vidéo en échec jusqu'à ce qu'elle réussisse. J'espère que non; ce n'est pas très simple, puisque:

  • Vous ne pouvez pas utiliser le code de sortie de youtube-dl pour détecter un échec. Vous devez référencer le dossier de sortie avec votre liste de lecture ou analyser la sortie de youtube-dl.
  • Vous devez implémenter un compteur pour limiter le nombre de tentatives; certains problèmes ne disparaissent pas d'eux-mêmes.
2
Ruud Helderman