No script bash como posso garantir que o youtube-dl faça o download de todos os arquivos em uma lista de reprodução

1

Estou tentando automatizar o download de uma playlist usando o youtube-dl usando um script bash. Tenho tido sucesso quando não há erros lançados pelo youtube-dl.

Digamos que haja um erro de conteúdo muito curto, então eu tento fazer um loop para completar os arquivos na lista de reprodução depois de dormir por 90 segundos para não bombardear o site.

No entanto, o que estou sentindo é que, por algum motivo, o sono não está funcionando como esperado e o site está sendo bombardeado com uma solicitação subsequente que leva a um http 429.

O que posso fazer para melhorar meu script ... script parcial exibido aqui

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

Estou usando o loop errado? Existe uma maneira melhor?

Obrigado pelo seu tempo

    
por Hamza Ahmed Zia 20.08.2016 / 07:53

1 resposta

2

Você está passando uma lista de reprodução para o youtube-dl, junto com a opção de linha de comando --ignore-errors . Isso significa que o youtube-dl tentará baixar a lista completa de vídeos antes de sair; independentemente de quantos fracassos enfrentará ao longo do caminho. Portanto, se o vídeo nº 2 falhar, a solicitação para o vídeo nº 3 será imediatamente após. Eu não sei o quão vigilante o Google é, mas isso já pode ser um bom sinal.

E mesmo depois de o último vídeo da sua lista de reprodução ter sido acertado, como você está certo de que o youtube-dl retorna um código de saída diferente de zero? Não há menção a isso no readme , então eu não ficaria surpreso se seu sleep 90 nunca seria executado.

Além disso, que bom é esse loop de qualquer maneira? Reiniciar o youtube-dl com a mesma lista de músicas baixará tudo de novo; incluindo todos os vídeos que foram baixados com sucesso na primeira vez. Embora as opções --no-overwrites e --continue possam ajudar aqui.

Para evitar que o Google bloqueie seu endereço IP (HTTP 429), sugiro usar a opção --sleep-interval . Exemplo:

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

Não tenho certeza se a intenção do seu loop era continuar tentando repetir um vídeo com falha até que tenha sucesso. Espero que não; não é muito simples, já que:

  • Você não pode usar o código de saída do youtube-dl para detectar falhas. Você precisaria fazer uma referência cruzada da pasta de saída com sua lista de reprodução ou analisar a saída do youtube-dl.
  • Você precisaria implementar algum contador para restringir o número de novas tentativas; alguns problemas não desaparecem por si mesmos.
por Ruud Helderman 20.08.2016 / 14:54