web-dev-qa-db-ja.com

bashスクリプトで、youtube-dlがプレイリスト内のすべてのファイルをダウンロードするようにするにはどうすればよいですか

Bashスクリプトを使用してyoutube-dlを使用して、プレイリストのダウンロードを自動化しようとしています。 youtube-dlによってエラーがスローされなかったときに成功しました。

Content-to-shortエラーがあるとしましょう。次に、サイトを砲撃しないように90秒間スリープした後、プレイリスト内のファイルを完了するためにループしようとします。

しかし、何らかの理由でスリープが期待どおりに機能せず、サイトがhttp 429につながる後続のリクエストで攻撃されていることを経験しています。

スクリプトを改善するためにできること...ここに表示されている部分的なスクリプト

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

間違ったループを使用していますか?もっと良い方法はありますか?

お時間をいただきありがとうございます

1
Hamza Ahmed Zia

コマンドラインオプション--ignore-errorsとともにプレイリストをyoutube-dlに渡します。つまり、youtube-dlは終了する前にビデオのリスト全体をダウンロードしようとします。途中でいくつの障害に直面するかに関係なく。したがって、ビデオ#2が失敗した場合、ビデオ#3の要求はその直後に続きます。 Googleがどれほど警戒しているかはわかりませんが、あそこにはすでに鐘が鳴っています。

また、プレイリストの最後の動画がヒットした後でも、youtube-dlがゼロ以外の終了コードを返すことを確認してください。 readme でそれについて言及していないので、あなたのsleep 90が実行されなくても私は驚かないでしょう。

それに、とにかくこのループは何が良いのでしょうか?同じプレイリストでyoutube-dlを再起動すると、すべてが再びダウンロードされます。最初に正常にダウンロードされたすべての動画を含みます。ただし、オプション--no-overwritesおよび--continueが役立つ場合があります。

GoogleがIPアドレス(HTTP 429)をブロックしないようにするには、オプション--sleep-intervalを使用することをお勧めします。例:

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

ループの目的が失敗したビデオを最終的に成功するまで再試行し続けることであったかどうかはわかりません。私は望みません。次の理由により、それほど単純ではありません。

  • Youtube-dlの終了コードを使用して障害を検出することはできません。出力フォルダーをプレイリストと相互参照するか、youtube-dlの出力を解析する必要があります。
  • 再試行の回数を制限するには、カウンターを実装する必要があります。いくつかの問題は自然に消えることはありません。
2
Ruud Helderman