前一段时间,我问我尝试执行的bash脚本出了什么问题,我得到了一个很好的解决方案:What's wrong with this youtube-dl automatic script?
我一直在修改脚本以使其与不同的youtube-dl命令组合一起使用,并处理我的非常不稳定互联网连接(这是while / do循环的原因),并且该脚本可以正常工作,但是,当我尝试使用相同的脚本结构从列表中的特定项目(例如,项目编号15)开始下载Youtube播放列表时,这就是我遇到错误的时间。我仍然是bash脚本的新手(显然),所以我不知道出了什么问题。
有问题的脚本是这样的:
#!/bin/bash
function video {
youtube-dl --no-warnings -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' --socket-timeout 15 --hls-use-mpegts -R 64 --fragment-retries 64 --prefer-free-formats --all-subs --embed-subs -f 'bestvideo[height<=720]+bestaudio/best[height<=720]' "$@"
}
read -p "url: " url
video "$url"
while [ $? -ne 0 ]; do sleep 5 && video "$url" ; done
clear && echo completed!
因此,例如,如果我尝试下载播放列表,则只需在终端上写:
printf https://www.youtube.com/playlist?list=PLS1QulWo1RIYmaxcEqw5JhK3b-6rgdWO_ | list720
(““ list720”当然是脚本的名称)该脚本运行没有问题,并且完全符合我的期望。
但是,如果我在终端机中运行:
printf --playlist-start=15 https://www.youtube.com/playlist?list=PLS1QulWo1RIYmaxcEqw5JhK3b-6rgdWO_ | list720
我收到以下错误消息:
bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]
ERROR: '' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube
如果我颠倒顺序(首先是youtube URL,然后是--playlist-start = 15命令),则脚本会下载整个播放列表,并忽略“ --playlist-start”命令。
我尝试直接在终端中直接运行youtube-dl命令字符串,并在末尾添加了“ --playlist-start”和URL,它可以完美运行:
youtube-dl --no-warnings -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' --socket-timeout 15 --hls-use-mpegts -R 64 --fragment-retries 64 --prefer-free-formats --all-subs --embed-subs -f 'bestvideo[height<=720]+bestaudio/best[height<=720]' --playlist-start=15 https://www.youtube.com/playlist?list=PLS1QulWo1RIYmaxcEqw5JhK3b-6rgdWO_
...所以我认为问题出在脚本上。
欢迎任何帮助,谢谢!