问题描述
我使用youtube-dl从YouTube下载文件。我尝试下载多个文件,但是对我来说不起作用。每当我要下载视频时,我都必须打开多个终端并重新开始。
您能通过一次提及所有URL来帮助我在单个终端窗口中下载多个文件吗?我使用64位的Ubuntu 12.04。
最佳方法
Shortcuts
如果所有视频都在同一播放列表或同一频道中,则可以使用以下快捷方式节省时间。
Playlist
youtube-dl -f FORMAT -ciw -o "%(title)s.%(ext)s" -v <url-of-playlist>
…其中将<url-of-playlist>
替换为播放列表的网址,并将FORMAT
替换为任何可用的视频格式,例如18
。您可以使用-F
选项查看所有有效格式,如下所示:
youtube-dl -F 'http://www.youtube.com/some-alphanumeric-string'
从批次开始到批次结束下载播放列表的一部分
youtube-dl -f FORMAT -ci --playlist-start NUMBER --playlist-end NUMBER <url-of-playlist>
…将<url-of-playlist>
替换为播放列表的URL,将FORMAT
替换为任何可用的视频格式,例如18
和NUMBER
是播放列表中开始/结束下载的视频编号。
Channel
youtube-dl -f FORMAT -ciw -o "%(title)s.%(ext)s" -v <url-of-channel>
…将<url-of-channel>
替换为频道的URL,然后将FORMAT
替换为任何可用的视频格式,例如18
。
不在同一播放列表或频道中的视频
首先创建一个批处理文件,该文件是一个文本文件,其中包含要下载的YouTube视频的URL列表。这些URL应该安排在一个列表中,该列表中只有一个URL,而每行都没有其他内容,并且列表中的每个URL都有一个新行。用易于 memory 的名称(例如batch-file.txt)保存批处理文件。如果多个文件全部位于YouTube的同一播放列表,频道或用户网页上,则可以通过运行以下命令来生成带有列表的文本文件,该列表包含该页面上的所有链接:
sudo apt install jq
youtube-dl -j --flat-playlist "https://<yourYoutubeWebpage>" | jq -r '.id' | sed 's_^_https://youtu.be/_' > batch-file.txt
从终端运行:
youtube-dl -ct --simulate --batch-file='/path/to/batch-file.txt'
这是基本命令,但是您还需要添加要下载的视频的格式,否则您可能会发现自己下载了不需要的格式的视频。因此,首先模拟您的下载以查看所需格式是否可用:
youtube-dl -ct -f 34 --simulate 'http://www.youtube.com/some-alphanumeric-string'
如果视频格式不可用,您将收到一条错误消息:requested format not available
。如果视频格式可用,则使用--simulate
选项时将不会收到任何错误消息。您还可以添加-F选项以查看所有有效格式,如下所示:
youtube-dl -F 'http://www.youtube.com/some-alphanumeric-string'
在第三个命令中,我使用了常见的flv 360p视频格式:-f 34
。您可能更喜欢使用-f 35
尝试flv 480p视频格式。因此,在将所需的视频格式添加到命令后,该命令将变成如下所示:
youtube-dl -ciw -o "%(title)s.%(ext)s" --batch-file='/path/to/batch-file.txt'
笔记:
我没有在最后一个命令中添加--simulate
选项,因此该命令将真正执行。
次佳方法
您可以将网址一个接一个地放在网址之间。 Youtube-dl将顺序下载它们。这比制作批处理文件要简单一些。
注意–help说youtube-dl --help
Usage: youtube-dl [options] url [url...]
输入样例:
youtube-dl http://www.youtube.com/watch?v=fqULJBBEVQE http://www.youtube.com/watch?v=vDbbz-BdyYc http://www.youtube.com/watch?v=OrIFaWJ9Glo
样本输出:
[youtube] Setting language
[youtube] fqULJBBEVQE: Downloading video webpage
[youtube] fqULJBBEVQE: Downloading video info webpage
[youtube] fqULJBBEVQE: Extracting video information
[download] Destination: Web Components - A Tectonic Shift for Web Development - Google I_O 2013-fqULJBBEVQE.mp4
[download] 100% of 238.14MiB in 36:54
[youtube] vDbbz-BdyYc: Downloading video webpage
[youtube] vDbbz-BdyYc: Downloading video info webpage
[youtube] vDbbz-BdyYc: Extracting video information
[download] Paul Irish on Web Application Development Workflow-vDbbz-BdyYc.mp4 has already been downloaded
[youtube] OrIFaWJ9Glo: Downloading video webpage
[youtube] OrIFaWJ9Glo: Downloading video info webpage
[youtube] OrIFaWJ9Glo: Extracting video information
[download] Got server HTTP error. Retrying (attempt 1 of 20)...
[download] Destination: Single Page Web Applications - JavaScript End-to-End (The Hard Stuff)-OrIFaWJ9Glo.mp4
[download] 100% of 553.10MiB in 42:17
第三种方法
第1步:转到您的桌面,制作一个名为list
的文本文档(或任何其他名称)。如果您要下载文件,则将URL复制并粘贴到文件中,每行一个URL
步骤2:打开终端并转到桌面
cd Desktop
步骤3:要下载列表中的文件,请键入(如果您将文件命名为其他名称,请相应地替换list
)
youtube-dl -a list
下载YouTube频道
运行此命令
youtube-dl -citk -format mp4 -yes-playlist VIDEO_PLAYLIST_LINK
-
-c
恢复部分下载的文件 -
-i
忽略任何错误。 -
-t
使用视频标题作为文件名。 -
post-processing完成后,
-k
将视频保留在磁盘上。 -
--format mp4
将视频文件另存为MP4文件。 -
--yes-playlist
确认后面的URL指向视频播放列表。
第四种方法
如果您有多个视频网址,只需创建一个新的或使用现有的一个,即可将它们添加到一个YouTube播放列表中。
然后使用下面的命令。
youtube-dl -f FORMAT --yes-playlist [url-of-playlist]
如果URL指向视频和播放列表,则选项--yes-playlist
将下载该播放列表。
这是我找到的最简单,最快的选择,目的是要从一个网站上下载数百个视频,这些视频具有从YouTube链接的视频。
第五种方法
要下载多个视频,您可以使用此结构。它类似于@coreyb的响应,除了可以在bash中的其他地方使用它(例如,与echo一起使用)。有两种方法:
大括号
youtube-dl -f FORMAT {url1,url2,url...}
重复执行没有最后一个参数的最后一个命令
youtube-dl -f FORMAT url1; !:- url2; !:-url...
第六种方法
最直接的解决方案是制作一个bash脚本,像这样
#!/bin/bash
terminal=`tty`
exec < ~/Documents/youtubevideolinks.txt
while read -r line
do
cd ~/Desktop/TilakDa/
youtube-dl -f 18 "$line"
done
exec < "$terminal"
只需将视频链接复制并粘贴到documents文件夹中该txt文件中,并将每个视频URL插入新行,然后运行此脚本,它将逐个下载视频。默认情况下,-f 18
选项适用于360p视频