在 bash 脚本中,如何确保 youtube-dl 下载播放列表中的所有文件

在 bash 脚本中,如何确保 youtube-dl 下载播放列表中的所有文件

我正在尝试使用 youtube-dl 通过 bash 脚本自动下载播放列表。当 youtube-dl 没有抛出任何错误时,我就成功了。

假设出现内容太短的错误,那么我会尝试在休眠 90 秒后循环完成播放列表中的文件,以免轰炸网站。

然而,我遇到的情况是,由于某种原因,睡眠功能无法按预期工作,并且网站受到后续请求的轰炸,导致出现 http 429。

我可以做些什么来改进我的脚本...部分脚本显示在这里

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

我使用的循环错误吗?还有更好的方法吗?

感谢您的时间

答案1

您正在将播放列表与命令行选项一起传递给 youtube-dl --ignore-errors。这意味着 youtube-dl 将在退出之前尝试下载整个视频列表;无论在此过程中会遇到多少次失败。因此,如果视频 #2 失败,那么对视频 #3 的请求将紧随其后。我不知道谷歌有多警惕,但这已经可以敲响警钟了。

即使播放列表中的最后一个视频播放完毕,您能确定 youtube-dl 返回的退出代码不是零吗?自述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 的输出。
  • 您需要实施一些计数器来限制重试次数;有些问题不会自行消失。

相关内容