如何使用 youtube-dl 批量下载视频并同时重命名?

如何使用 youtube-dl 批量下载视频并同时重命名?

我正在使用 Ubuntu 16.04 LTS。我想下载一些YouTubeyoutube-dl视频。我是通过这个视频了解命令行工具的问题。正如 Yasser 所提到的,使用命令,

youtube-dl youtube.com/videolink --format mp4

我可以下载 mp4 格式的视频文件。

现在我想从不同的频道下载十个视频。我有一个文本文件,其中包含 YouTube 链接和我想要保存它们的名称。名称为文本文件的文本文件data.txt如下所示:

http://youtube.com/link1    name1
http://youtube.com/link2    name2
http://youtube.com/link3    name3 
.........                   ......
.........                   ......
http://youtube.com/link10    name10

现在我只想运行youtube-dl一次命令,以便它自动从该文本文件中获取参数并使用所需的名称保存它们。

如果我只有中的链接data.txt,即

http://youtube.com/link1
http://youtube.com/link2
http://youtube.com/link3 
.........
.........
http://youtube.com/link10

我只能使用命令一次并附带选项来下载视频-a

youtube-dl --format mp4 -a data.txt

但我无法同时重命名它们。从man页面youtube-dl我发现有一个选项--output可以设置文件名。

我怎能这样做?

答案1

如果您只是因为不喜欢命名文件的样式而重youtube-dl命名文件,那么您可以使用--output(或-o)和模板来自定义从 Youtube 元数据中命名所有文件的方式。

例如,-o %(title)s.%(ext)s将导致它从所有文件名中省略 Youtube ID。

有很多选项,可能取决于您的版本youtube-dl,因此可以在终端上输入以下内容来找到完整的详细信息:

man youtube-dl
/OUTPUT

但是,如果您确实想单独命名每个文件,您可以youtube-dl对文本文件中的每一行运行一次,如下所示:

(while read URL NAME; do [ "$URL" ] && youtube-dl --format mp4 -o "$NAME" "$URL"; done) < data.txt

对于每一行,在第一次运行一个或多个制表符和空格时将其拆分为 URL 和 NAME,然后如果该行不是空白,则将它们传递给youtube-dl。如果该行只有一个 URL,则不会重命名该文件。

答案2

您的解决方案是使用config文件。在 Linux 和 OS X 上,系统范围的配置文件位于,/etc/youtube-dl.conf而用户范围的配置文件位于~/.config/youtube-dl/config。请注意,默认情况下配置文件可能不存在,因此您可能需要自己创建。我的 中没有任何配置文件~/.config,所以我不得不创建我的配置文件。在那里,您可以传递通常在 youtube-dl 中使用内联命令的任何参数。好用例是使用.netrc文件进行身份验证,常见用途是输出格式。这是示例config文件:

#Authentication with .netrc file
--netrc

# Save all videos in a directory named vimeo in your home directory
-o "~/Vimeo/%(title)s %(upload_date)s i%(id)s.%(ext)s"


# Download best format available via direct link over HTTP/HTTPS protocol
-f '(bestvideo+bestaudio/best)[protocol^=http]'

# Simple file name
--restrict-filenames

如果您想禁用特定 youtube-dl 运行的配置文件,可以使用--ignore-config。本质上,就像您使用-aswitch 进行批量下载一样,您可以使用config文件批量重命名下载,并根据需要进行大量其他自定义。所有内容都记录在youtube-dl 官方文档,特意阅读配置 &输出模板部分。

相关内容