如何在基本的 digitalocean droplet/VPS 上同时下载多个文件/视频?

如何在基本的 digitalocean droplet/VPS 上同时下载多个文件/视频?

如何在基本的 digitalocean droplet 上同时下载多个文件/视频?

假设我创建了一个基本的 digitalocean droplet/VPS,运行 Ubuntu

在此处输入图片描述

我启动控制台

在此处输入图片描述

我会的,apt install python而且wget https://youtube-dl.org/downloads/latest/youtube-dlchmod 777 youtube-dl

我想下载一些文件,例如这两个视频文件

https://www.youtube.com/watch?v=iXFvkJLqPqo (约翰尼·德普那个,大约 11 分钟长)

https://www.youtube.com/watch?v=-QwtKBC6iQY(Ricky Gervais 的一个)

我有一个包含这两个视频的文件

user@basicdroplettest1:~# cat vidfilelist.txt 
https://www.youtube.com/watch?v=iXFvkJLqPqo
https://www.youtube.com/watch?v=-QwtKBC6iQY 

如果我要做while read in; do ./youtube-dl "$in"; done < vidfilelist

它在文件的每一行上运行 youtube-dl,因此它会执行例如youtube-dl https://www.youtube.com/watch?v=iXFvkJLqPqo 然后youtube-dl https://www.youtube.com/watch?v=-QwtKBC6iQY

因此它先下载第一个,然后当第一个下载完成后,它开始下载第二个。

所以不是同时的

如果我在每行末尾加上一个 & 符号

user@basicdroplettest1:~# cat ./vidfilelist.txt 
https://www.youtube.com/watch?v=iXFvkJLqPqo &
https://www.youtube.com/watch?v=-QwtKBC6iQY &

然后做

(此 bash while 命令由https://stackoverflow.com/questions/13939038/how-do-you-run-a-command-eg-chmod-for-each-line-of-a-file

user@basicdroplettest1:~# while read in; do ./youtube-dl "$in"; done < vidfilelist.txt 
[youtube] iXFvkJLqPqo: Downloading webpage
[download] Destination: Top Johnny Depp Comebacks & Reactions to Questioning While Testifying-iXFvkJLqPqo.mp4
[download]   2.5% of 20.67MiB at 50.65KiB/s ETA 06:47

[download]   3.0% of 20.67MiB at 50.90KiB/s ETA 06:43



[download]   3.2% of 20.67MiB at 50.95KiB/s ETA 06:41

[download]   5.5% of 20.67MiB at 51.04KiB/s ETA 06:31

参见上面,我按下了 ENTER,但它并没有进入后台并进入下一个...

所以这并没有起作用。

有什么想法可以让它在后台下载文件中的每个视频文件?

(而不是先下载一个,然后再下载另一个)。

答案1

您的操作是正确的&,但您不希望它成为文件名的一部分。您想运行此命令:

youtube-dl "https://www.youtube.com/watch?v=iXFvkJLqPqo" &

&但是因为文件中有,所以您实际上正在运行这个:

youtube-dl "https://www.youtube.com/watch?v=iXFvkJLqPqo &"

此外,您可能希望重定向标准错误,以便您的终端不受进度报告的污染。试试这个:

while read in; do ./youtube-dl "$in" 2>/dev/null & done < vidfilelist 

对于 URL 列表来说这应该没问题,但作为在 shell 中解析文本文件的一般规则,您还需要清除输入字段分隔符IFS=并确保不会扩展\-escape 序列,因此请执行以下操作:

while IFS= read -r in; do ./youtube-dl "$in" 2>/dev/null & done < vidfilelist 

答案2

除了 Terdon 的回答。

我会说

a)使用 yt-dlp ,因为它比 youtube-dl 快得多。它是 youtube-dl 的一个分支。

b)使用 screen(screen 命令)。否则,当您断开会话(例如,通过关闭窗口)时,下载就会停止!运行 screen 并按 ENTER。有快捷键,如 ctrl-a、ctrl-d 和命令 screen -r,用于附加和从“屏幕”中分离,以及 screen -ls 用于列出“屏幕”。youtube 上有关于 screen 命令的视频。它还可用于创建一种平铺视图,但您不需要该功能。

c) 如果您选择不同时下载它们,例如担心可能会被阻止,可以向 yt-dlp 传递一个带有 URL 列表的文件名。并且可能有一个在每条命令之间暂停的选项,或者您可以只运行一个命令列表(例如 yt-dlp http://..../watch?v=adfsdf),并在它们之间设置休眠。

d) 如果您有 YouTube URL 列表,则可能会有一些不同的文件格式,例如,某个文件可能以 .webm 格式输出,如果出于某种原因文件无法正确下载,则某个文件可能以 .part 格式输出或类似格式输出。因此,请使用 DIR 或 if *nix then ls 和 find 等命令,这样不仅可以查看下载的文件总数,还可以查看文件类型。

答案3

主題:这个答案可能会对某人有帮助

在任何 bshel​​l 中你都可以使用youtube-dl

编辑:yt-dlp是 youtube-dl 的增强分支,可以替代任何脚本,正如 @barlop 提到的(但它似乎只能从 pip 安装和升级 - 而不是系统包管理器)


Ubuntu 上的 youtube-dl 安装

包管理器(apt/yum/... 仓库)

sudo apt install youtube-dl

仅限 youtube-dl:此方法不适用于 yt-dlp

python 包 (python scriptable) (大部分已更新)

# you will need pip installed
sudo apt install python3 python3-pip

# always use latest version or upgrade
# you may use sudo for system-wide installation (not recommended)
# if the instlation is successful and still command-not-found
# - add python's `dist-packages` dir to path on your system
pip install -U youtube-dl

记住: 大多数情况下,只有最新版本才有效


下载一个链接视频(文件/播放列表/搜索)

# replace `mp4` with extention needed
# replace `https://link/to/download` with desired download link
youtube-dl -f mp4 "https://link/to/download"

下载多个文件

来自包含链接的文件

while IFS= read -r line; do ( youtube-dl "$line" ); done < file.txt 

请参阅@terdon 对这个问题的回答,了解无声翻译

来自搜索链接或播放列表 你可以让 youtube-dl 将其下载为文件

或者参考我之前问题的答案,获取更结构化的下载 https://stackoverflow.com/a/67144906/9907243

相关内容