使用youtube-dl下载多个文件

我使用youtube-dl从YouTube下载文件。我尝试过下载多个文件,但是对我来说效果不好。每次想要下载一个视频时,我都必须打开多个终端并重新开始。
你能帮助我通过只在一个终端窗口中一次性提及所有URL来下载多个文件吗?我使用的是Ubuntu 12.04 64位操作系统。

2这不是对你问题的回答,但其他人可能会遇到类似情况。如果这些视频有关联,记住可以使用youtube-dl工具下载播放列表、用户或频道中的所有视频。 - Dennis
2请勿只在网址之间添加空格,就认为翻译完成了。 - gota
11个回答

快捷方式

如果所有视频都在同一个播放列表或同一个频道中,您可以使用以下快捷方式来节省时间。

播放列表

youtube-dl -f FORMAT -ciw -o "%(title)s.%(ext)s" -v <url-of-playlist>

...其中<url-of-playlist>被替换为播放列表的URL,将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是播放列表中要开始/结束下载的视频编号。

频道

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都应该有一个新行。使用易于记忆的名称保存批处理文件,例如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'

如果视频格式不可用,您将收到一个错误消息,内容为:“请求的格式不可用”。如果视频格式可用,则在使用--simulate选项时不会收到任何错误消息。您还可以添加-F选项以查看所有有效格式,如下所示:
youtube-dl -F 'http://www.youtube.com/some-alphanumeric-string'

在第三个命令中,我使用了常见的flv 360p视频格式:
-f 34。你可能更喜欢尝试flv 480p视频格式,可以使用-f 35。所以在将你想要的视频格式添加到命令之后,命令会变成这样:
youtube-dl -ciw -o "%(title)s.%(ext)s" --batch-file='/path/to/batch-file.txt'

注意:
我在上一个命令中没有添加--simulate选项,所以这个命令将会真正执行。

真的,我更希望得到一个更简短的回答。我把你的和别人的意见结合起来了。 - MrMesees

你可以将URL一个接一个地放置,中间用空格隔开。Youtube-dl会按顺序下载它们。这比制作批处理文件要简单一些。
注意--help中的说明: youtube-dl --help 使用方法:youtube-dl [选项] 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

从YouTube下载多个文件
  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 使用视频标题作为文件名。
  • -k 在后处理完成后保留视频在磁盘上。
  • --format mp4 将视频文件保存为MP4格式。
  • --yes-playlist 确认跟随的URL指向一个视频播放列表。

2-citk非常具有误导性,可能会导致错误。-c强制恢复,即使这样做并没有太多意义。默认情况下已经是继续操作。-i可能还可以,但要注意可能会错过一些视频的错误。-t已经是默认设置,并且已被弃用。-k-f mp4结合没有意义。请参阅youtube-dl FAQ获取更多详细信息。 - phihag
请问有足够声望/权限的任何人(@pomsky),请将“-format mp4 -yes-playlist”更正为“--format mp4 --yes-playlist”,这只是一个两个字符的编辑,由于明显的原因我无法自己完成。 - Ivan Shatsky

最直接的解决方案是创建一个像这样的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"

只需将视频链接复制并粘贴到文档文件夹中的txt文件中,每个视频链接占一行,然后运行此脚本。它会逐个下载视频。默认情况下,-f 18选项是用于360p视频。

1这绝对不是最直接的方法。现在有一个--batch-file脚本(我不知道它存在多久了),它将文本文件的每一行作为一个URL处理。 - MrMesees

youtube-dl -cit --format=mp4 --batch-file=./list-of-youtube-videos-link.txt 是我结合 https://askubuntu.com/a/947676/481688https://askubuntu.com/a/334097/481688 的解决方案,对我起作用。我在这里单独记录下来,以便将来不再滚动多个答案。

  • --batch-file=./list-of-youtube-videos-link.txt 是一个包含YouTube链接列表的文件
  • --format=mp4 期望输出为mp4格式
  • -c 恢复部分下载的文件
  • -i 忽略任何错误
  • -t 使用视频标题作为文件名

如果您有多个视频URL,请将它们添加到一个播放列表中,可以创建一个新的播放列表或使用现有的播放列表。然后使用以下命令。
youtube-dl -f FORMAT --yes-playlist [url-of-playlist]

选项--yes-playlist将下载播放列表,如果URL引用的是视频和播放列表。
这是我为了从一个网站下载数百个来自YouTube链接的视频而找到的最简单和最快的选项。

这对于从同一个频道下载大量视频非常有用。您可以使用未列出的播放列表来保持其不公开。 - qwr

尝试使用bash脚本:
while read LL ; do youtube-dl "$LL" ; done < your_file

要下载多个视频,您可以使用这个结构。它类似于@coreyb的回答,但是还可以在bash中的其他地方使用,例如与echo一起使用。以下是两种方法:
大括号
youtube-dl -f FORMAT {url1,url2,url...}

重复上一个命令,但不包括最后一个参数。
youtube-dl -f FORMAT url1; !:- url2; !:-url...

输入命令,然后输入&&,再输入下一个命令,如:

youtube-dl--add-metadata -xic http://(the url) && youtube-dl--add-metadata -xic http://(the url) 

主题仍然相关,因此:

获取您的YouTube链接。 删除以“?”开头的第一个视频参数。 像这样使用 :-) youtube-dl.exe --yes-playlist https://www.youtube.com/watch?list=yourlistlink
这对我来说很有效。