如何在youtube-dl中设置默认下载位置

50

如何在youtube-dl中设置默认下载位置,以便使用youtube-dl下载的所有内容都进入该默认目录?


创建一个别名到 youtube-dl --output /path/to/your/dir。我认为没有一种永久设置输出目录的方法。 - JAL
3
我刚刚下载了一个完整的播放列表,文件在哪里? - user101
5
在运行youtube-dl命令的目录中。 - JAL
在他们添加一个设置输出目录的开关之前,您可以使用 pushdpopd 切换到输出目录,从其位置调用 youtube-dl,然后切换回来。 - Synetech
兄弟!从终端进入你想要下载YouTube文件的文件夹,使用cd命令,然后运行youtube-dl命令。 - ashubuntu
@Synetech 我希望 youtube-dl 团队能够接受我的功能请求 :-) - SebMa
8个回答

55

你需要在配置文件中使用-o开关

youtube-dl的输出是通过--output-o开关处理的;将其作为选项传递,后跟您想要保存下载内容的目标:

youtube-dl -o "%USERPROFILE%\Desktop\%(title)s-%(id)s.%(ext)s" www.youtube.com/link/to/video

请注意,-o具有双重功能,它还设置了用于命名输出文件的模板,使用变量。在此示例中,它将输出原始下载视频的标题,后跟文件扩展名,这是我的个人偏好。有关可用于文件名的所有变量,请参阅youtube-dl文档

youtube-dl还允许使用配置文件 - 这是一种可以用于配置您最常使用的开关的文件,因此程序可以从那里获取它们,而无需每次运行时显式调用它们,节省您的时间。 这就是您寻找的默认下载位置所需的功能。配置文件可用于设置默认输出目标,以便您永远不必再次显式设置输出。

要为youtube-dl设置配置文件,假设你使用的是Windows:

  1. %APPDATA%\Roaming中,如果不存在,请创建一个名为youtube-dl的文件夹。

  2. 在该文件夹中,创建一个名为config.txt的纯文本文件。

  3. youtube-dl选项与命令行中使用的方式一样放入文件中,每个选项占用一行。例如,对于输出开关,您可以使用:-o %USERPROFILE%\Desktop。要了解更多有关配置文件的信息,请阅读此处的文档

覆盖配置文件

即使在配置文件中配置了选项,也可以通过在命令行中显式调用来覆盖它。因此,如果您已经在配置文件中设置了-o以便默认下载到某个位置,但希望在当前作业中将下载保存到其他位置,只需在命令行上调用-o即可覆盖当前程序运行时的配置文件。


5
问题在于使用“-o”开关需要指定文件名模板。我不想这样做,宁愿使用默认值(其中包括除标题之外的其他信息)。确实应该有一个选项只指定输出目录(特别是因为youtube-dl基于wget,后者有一个用于此目的的“-P”开关)。 - Synetech
12
Youtube-dl不是基于wget,你只需要将%(title)s-%(id)s.%(ext)s添加到输出模板中就可以获得默认的基本文件名。 - phihag
@phihag - 这正是我所需要的。我上周看到了这篇帖子。我很高兴这次读了评论。我认为这就是答案没有被选择的原因。你应该将你的评论添加到这个解决方案中(作为编辑解决方案),因为它会非常有帮助并且是一个不错的补充。 - ejbytes
2
你必须指定整个格式,这太荒谬了。它应该允许你以默认格式将其输出到目录中。 - Levi H
1
这非常有用!我想补充一下,截至2022年1月,在Windows文件系统中,-o需要使用正斜杠。因此,-o c:\yt-transcripts = 不起作用,而-o c:/yt-transcripts则可以。 - aschultz
显示剩余5条评论

21

我找到了一种直接下载“Downloads”文件夹中文件的方法,花费了很长时间进行搜索。我复制了整个函数,这样你就可以理解上下文了。这是我的代码,它可能对某些人有所帮助:

import os

def download_audio(request):
    SAVE_PATH = '/'.join(os.getcwd().split('/')[:3]) + '/Downloads'

    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'outtmpl':SAVE_PATH + '/%(title)s.%(ext)s',
    }

    link = request.GET.get('video_url')

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.download(["https://www.youtube.com/watch?v="+link])

如果有问题,请告诉我。


你好,NiceOyester。我该如何将下载目录设置为Google Cloud存储?我正在使用Nodejs的Google Cloud函数。 - Lydia halls
1
os.path.join() 将是更好的跨平台建议。 - Arpan Srivastava

8
根据配置文档,您可以使用全局或用户特定的配置文件来配置youtube-dl:

您可以通过将任何支持的命令行选项放入配置文件中来配置youtube-dl。 在Linux和macOS上,系统范围的配置文件位于/etc/youtube-dl.conf,用户范围的配置文件位于~/.config/youtube-dl/config。 在Windows上,用户范围的配置文件位置为%APPDATA%\youtube-dl\config.txtC:\Users\<user name>\youtube-dl.conf。 请注意,默认情况下可能不存在配置文件,因此您可能需要自己创建。

在Linux中,这将是您的用户配置文件:
# Save all my videos to the Videos directory: 
-o ~/Videos/%(title)s.%(ext)s

如果我们设置了“-o”输出目录,它会直接下载到该位置,还是会暂时下载到不同的位置,然后移动到输出目录? - Chang Zhao

4

根据您的需求,我认为将文件移动后会非常有用:

--exec CMD                       Execute a command on the file after
                                 downloading, similar to find's -exec
                                 syntax. Example: --exec 'adb push {}
                                 /sdcard/Music/ && rm {}'

通过创建一个移动文件的函数

4

这是我使用的完整解决方案:

from youtube_dl import YoutubeDL
ydl_opts = {
  'format': 'best',
  'outtmpl': 'DIR-PATH-HERE%(title)s'+'.mp4',
  'noplaylist': True,
  'extract-audio': True,
  }

video = "https://www.youtube.com/watch?v=SlPhMPnQ58k"
with YoutubeDL(ydl_opts) as ydl:
  info_dict = ydl.extract_info(video, download=True)
  video_url = info_dict.get("url", None)
  video_title = info_dict.get('title', None)
  video_length = info_dict.get('duration')

  # print(video_title)

你好,有什么想法可以让我直接下载视频到客户端浏览器吗?我在使用Django,现在当客户点击下载链接时,视频会被下载到我的项目中。我们如何在浏览器内直接下载,有什么建议吗? - Ajji

1
在命令行或bash文件中使用双引号,如下所示:
"%userprofile%/Desktop/DL/%(title)s-%(id)s.%(ext)s"

我的Bash命令:

youtube-dl -c -i -f "mp4" -o "/home/Youtube_Downloads/%(title)s-%(id)s.%(ext)s" -a youtube_list

'youtube_list'是一个包含Youtube链接的原始文本文件,每行一条链接。


1
我发现作者对这个具体问题有官方评论。
在手册中,他们说:(man youtube-dl)
How do I put downloads into a specific folder?
    Use the -o to specify an output template, for example -o "/home/user/videos/%(title)s-%(id)s.%(ext)s".  If you want this for all of your downloads, put the option into your configuration file.

那个文件名模式是默认的,正如 man 页面所述:
The current default template is %(title)s-%(id)s.%(ext)s.

我同意,如果默认模板改变了,将输出文件夹与默认模板解耦会很好,但我猜作者们肯定有他们这样做的原因。

0

这是另一种有用的方法,可以将您的视频下载到所需目录中,并且还可以保留下载的原始文件名

  1. 决定在哪里创建配置文件。
  2. 创建一个名为“youtube-dl.conf”的文件。如果先创建一个youtube-dl.txt更容易,但文件必须是“youtube-dl.conf”。
  3. 以下是配置文件的基本示例:这是您想要下载的位置。这就是您要放入文件的所有内容。其中-o是标志,%userprofile%/Desktop/DL/是我想要下载的位置,%(title)s-%(id)s.%(ext)s是保留原始文件名的命令。

    以下是您的配置文件:

-o %userprofile%/Desktop/DL/%(title)s-%(id)s.%(ext)s

在此找到选项这里 配置这里

  1. 命令参数:
    %program% -f %option% "%youtubelink%" "%MYCONFIG%" "%MYPATH%"

批处理文件设置:

::Variables:
Set program="%USERPROFILE%\Desktop\YOUTUBE-DL\v20201209\youtube-dl.exe"
Set option=best
SET MYPATH="%USERPROFILE%\Desktop\YOUTUBE-DL\v20201209\config"
SET MYCONFIG="--config-location"
SET MYDLDIR="%USERPROFILE%\Desktop\DL"
SET INSTR='%%(title)s-%%(id)s.%%(ext)s'
MKDIR "%USERPROFILE%\Desktop\DL"

::Ask user for input.
Set /P youtubelink=[Past Link]:

:: For use of config file, for default download location.
%program% -f %option% "%youtubelink%" "%MYCONFIG%" "%MYPATH%"

:: There are many ways to accomplish this:
:: For Batch File, NOTE extra (%) character needed.
:: "%program%" -f "option" --merge-output-format mp4 -o "%MYDLDIR%"\%%(title)s-%%(id)s.%%(ext)s %youtubelink%
:: or this use of variable
:: "%program%" -f "option" --merge-output-format mp4 -o "%MYDLDIR%"\%INSTR% %youtubelink%

注意:在变量选项中有空格时使用“引号”。

最终信息:
创建配置文件,将其放入您希望引用的文件夹(目录)中。转到您的youtube-dl.exe文件,并使用CMD或批处理文件将上面列出的“参数”传递给它。完成。(贡献和友善)


除了我现在已经按要求编辑到我的答案中的默认basename之外,您的答案似乎没有添加任何不在我的答案中的内容,并且在此过程中似乎引入了许多不准确之处。首先,配置文件不必以“.conf”结尾 - 只有用户特定的配置文件需要以此结尾,当您有多个用户在同一台机器上使用youtube-dl 并且其中一个想要覆盖全局配置文件时才需要这样做。 - Hashim Aziz
其次,你提到的“本地”文件名的方式让我觉得你认为这是YouTube自己的默认设置,所以澄清一下,youtube-dl使用的默认文件名/基本名称只是一个任意的默认设置,当没有设置-o选项时使用,如果你已经使用了-o选项,那么你应该将其设置为你想要的格式,没有理由不这样做。 - Hashim Aziz
最后,这里没有任何理由需要配置文件来完成您想要做的事情。我能够成功地运行以下命令而没有任何问题:youtube-dl -f best -o "%userprofile%/Desktop/DL/%(title)s-%(id)s.%(ext)s" --ignore-config https://www.youtube.com/watch?v=T6vKZhfI7qY - 请注意,最后一个选项确保我根本没有使用我的配置文件,并且我仍然按预期获得下载。输出目录甚至不需要存在,因为 youtube-dl 会自动创建它。 - Hashim Aziz
2
@Prometheus,你似乎对这个非常了解。我真的为你感到高兴。但是当没有人演示像这样的NIFTY可执行文件的各种方法时,这真的很令人沮丧。我正在做出贡献。就这样吧。虽然我很感激部分建设性的批评。谢谢Zeus,我的意思是Prometheus,还是创造者?开个玩笑,上帝保佑。 - ejbytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接