【问题标题】:how to set up default download location in youtube-dl如何在 youtube-dl 中设置默认下载位置
【发布时间】:2015-12-05 13:56:21
【问题描述】:

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

【问题讨论】:

  • youtube-dl --output /path/to/your/dir 设置别名。我不认为有一种永久的方式来设置输出目录。
  • 我刚刚下载了整个播放列表,文件放在哪里?
  • 在您运行youtube-dl 命令的目录中。
  • 在他们添加开关设置输出目录之前,您可以使用pushdpopd 切换到输出目录,从其位置调用youtube-dl,然后切换回来。跨度>
  • 老兄!从终端使用 cd 命令转到您希望将 YouTube 文件下载到的文件夹,然后运行 ​​youtube-dl 命令。

标签: youtube youtube-dl


【解决方案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 链接的原始文本文件,逐行显示

【讨论】:

    【解决方案2】:

    在这个男人身上,有一个具体的答案(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.
    

    我同意将输出文件夹与默认模板分离,以防有一天默认更改,但我猜作者一定有理由这样做。

    【讨论】:

      【解决方案3】:

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

      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 功能。
      • os.path.join() 将是一个更好的跨平台建议。
      【解决方案4】:

      这是精确另一种将视频下载到所需目录保留本机文件名的有用方法 下载。

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

        这是您的配置文件:

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

      找到选项here 配置here

      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 或批处理文件将上面列出的“参数”传递给它。完毕。 (贡献,善良)

      【讨论】:

      • 除了我现在按要求编辑到我的答案中的默认基本名称之外,您的答案似乎没有添加任何我的答案中没有的内容,而且似乎引入了很多过程中的不准确之处。首先,配置文件不必以.conf 结尾 - 只有特定于用户的配置文件才需要,只有当您有多个用户在同一台​​机器上使用 youtube-dl 一个时才需要他们中的一些人想要覆盖全局配置文件。
      • 其次,你提到“本机”文件名的方式让我觉得你相信这是 YouTube 自己的默认值,所以澄清一下,默认文件名 /basename 只是youtube-dl 使用时的任意默认值没有设置-o 选项,如果您使用的是-o,则没有理由不将其设置为您想要的格式。
      • 最后,你没有理由需要一个配置文件来做你想做的事情。我能够毫无问题地运行以下命令: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 会自动创建它。
      • @Prometheus 您似乎对此了解很多。我真为你高兴。但是,当没有人为这样的 NIFTY 可执行文件演示各种方法时,这令人沮丧。我在贡献。我就这样吧。不过,我确实很欣赏部分建设性的批评。谢谢宙斯,我的意思是普罗米修斯,还是造物主?开个玩笑,上帝保佑。
      【解决方案5】:

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

      youtube-dl 上的输出由--output-o 开关处理;将其作为选项传递,然后是您要将下载保存到的目标:

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

      请注意,-o 具有双重功能,它还使用变量为输出文件的命名方式设置模板。在这个例子中,它将输出原始下载视频的标题,后跟文件扩展名,这是我个人的喜好。对于可以在文件名中使用的所有变量,请查看the youtube-dl documentation here

      youtube-dl 还允许使用 配置文件 - 该文件可用于配置您最常用的开关,以便程序可以从那里提取它们,从而使您不必每次运行时显式调用它们。 这是您要查找的默认下载位置所需要的。 配置文件可用于设置默认输出目标,这样您就不必再次显式设置输出。

      要为 youtube-dl 设置配置文件,假设您有 Windows:

      1. %APPDATA%\Roaming 中,创建一个youtube-dl 文件夹(如果尚不存在)。

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

      3. youtube-dl 选项放在文件中,就像您通常在命令行中使用youtube-dl 一样,将每个选项放在一个新行上。例如,对于输出开关,您可以使用:-o %USERPROFILE%\Desktop。有关配置文件的更多信息,请阅读the documentation on it here

      覆盖配置文件

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

      【讨论】:

      • 问题是使用-o 开关需要指定文件名模板。我不想那样做,而宁愿使用默认值(其中不仅包括标题)。确实应该有一个仅指定输出目录的选项(特别是因为 youtube-dl 基于 wget,它有 -P 开关)。
      • youtube-dl 不基于 wget,您只需将 %(title)s-%(id)s.%(ext)s 附加到您的输出模板即可获得默认的基本名称。
      • @phihag - 这正是我所需要的。我上周看到了这个帖子。我很高兴这次我读到了 cmets。我认为这就是为什么没有选择答案的原因。您应该将您的评论添加到此解决方案中(作为编辑解决方案),因为这将是最有帮助和甜蜜的补充。
      • @phihag 还有一件事。我也在上面留言。但是,我只是抱怨一个问题。我想使用 -f 选项,但也想使用 -o 并使用您的建议。它不喜欢那样。你似乎是合适的人选。谢谢!
      • 你必须指定整个格式是荒谬的。它应该只允许您以默认格式将其输出到目录
      【解决方案6】:

      根据configuration documentation,您可以使用全局或用户特定的配置文件来配置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输出目录是直接下载到那个位置还是临时下载到不同的位置然后移动到输出目录?
      【解决方案7】:

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

      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_id = info_dict.get("id", None)
         video_title = info_dict.get('title', None)
         video_length = info_dict.get('duration')
      
      # print(video_title)
      

      【讨论】:

        【解决方案8】:

        根据您的需要,我认为之后移动文件同样有用:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-28
          • 1970-01-01
          相关资源
          最近更新 更多