我正在尝试使用 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 的输出。
- 您需要实施一些计数器来限制重试次数;有些问题不会自行消失。