Linux shell中的youtube-dl简单队列

9 投票
2 回答
8697 浏览
提问于 2025-04-16 03:39

youtube-dl 是一个用 Python 编写的脚本,可以用来下载 YouTube 视频。它支持批量下载的功能:

-a FILE, --batch-file=FILE
这个文件里包含了要下载的链接(用 '-' 表示从标准输入读取)

我想设置一个队列,这样我就可以简单地把链接添加到一个文件里,然后让 youtube-dl 来处理这些链接。目前,它不会从批量文件中删除已下载的文件。我看到有 '-' 这个选项,但不太清楚怎么利用它。

实际上,我想让 youtube-dl 像一个守护进程一样运行,定期检查队列文件,并下载里面的文件名。

我该怎么做呢?

2 个回答

1

你可以试试用 tail -f 来读取你的文件。这个命令不会在文件读到末尾时退出,而是会一直等着,直到文件中有新数据被添加进来。

>video.queue  # erase and/or create queue file
tail -f video.queue | youtube-dl -a -

因为 tail -f 不会退出,所以 youtube-dl 就可以一直从标准输入中读取文件名,也不会停止。

5

因为这个脚本一次性读取所有输入,所以使用 tail -f 是不行的。

如果你修改这个脚本,让它持续不断地读取 batch 文件,就可以用了。

然后只需要这样运行脚本:

% ./youtube-dl -a batch.txt -c

当你往 batch.txt 里添加一些数据,比如:

% echo "http://www.youtube.com/watch?v=j9SgDoypXcI" >>batch.txt

这个脚本就会开始下载你添加的视频到批处理里。

这是你应该应用到最新版本的 "youtube-dl" 的补丁:

2278,2286d2277
<       while True:
<           batchurls = batchfd.readlines()
<           if not batchurls:
<               time.sleep(1)
<               continue
<           batchurls = [x.strip() for x in batchurls]
<           batchurls = [x for x in batchurls if len(x) > 0]
<           for bb in batchurls:
<               retcode = fd.download([bb])

希望这对你有帮助,祝你看视频愉快!

注意:由于代码结构的调整,这个补丁将不再有效。如果能把这个功能加入到主代码里,我会很感兴趣。

撰写回答