【问题标题】:How can I download just thumbnails using youtube-dl?如何使用 youtube-dl 仅下载缩略图?
【发布时间】:2017-01-29 02:32:25
【问题描述】:

我一直在尝试下载我拥有的 URL(YouTube 视频)列表的缩略图。

我一直在使用 youtube-dl,到目前为止我已经解决了这个问题:

     import os

     with open('results.txt') as f:
          for line in f:
              os.system("youtube-dl " + "--write-thumbnail " + line)

像这样我可以下载缩略图,但我也不得不下载 youtube 视频。

我怎样才能只下载缩略图?

【问题讨论】:

标签: python youtube youtube-dl


【解决方案1】:

您可以简单地将 --skip-download 添加到您的代码中,它会正常工作。像这样:

with open('urls.txt') as f:
for line in f:
    os.system("youtube-dl "+"--write-thumbnail "+"--skip-download "+line)

【讨论】:

    【解决方案2】:

    在其他答案的基础上,您还可以指定 -a--batch-file 标志以提供要从中导入的文件列表,这会稍微简化代码:

    youtube-dl -a urls.txt --write-thumbnail --skip-download

    【讨论】:

      【解决方案3】:

      Python 3.6+

      import os
      
      with open('urls.txt') as urls:
          for url in urls:
              os.system(f"youtube-dl --write-thumbnail --skip-download {url}")
      

      Python 2.7(已弃用)

      import os
      
      with open('urls.txt') as urls:
          for url in urls:
              os.system("youtube-dl --write-thumbnail --skip-download " + url)
      

      【讨论】:

      • 您的 `Python 2.7 解决方案在 Python 3.x 上等效地工作(不仅在 Python 3.6+ 上)。
      • + __import__('pipes').quote(url)替换`+url`来防御shell注入攻击,例如; rm -rf ~ /urls.txt.
      【解决方案4】:

      看起来传递 --list-thumbnails 会将 url 返回到缩略图图像,但它只会在调用 os.system() 时输出到屏幕。

      以下不是最漂亮的,但它是一个使用子进程将 youtube-dl 的输出转换为字符串、解析它以获取 url 并使用请求下载的快速工作示例:

      import re
      import requests
      import subprocess
      
      with open('results.txt') as f:
          for line in f:
              proc = subprocess.Popen(['youtube-dl', '--list-thumbnails', line], stdout=subprocess.PIPE)
              youtubedl_output, err = proc.communicate()
              imgurl = re.search("(?P<url>https?://[^\s]+)", youtubedl_output).group('url')
              r = requests.get(imgurl)
              if r.status_code == 200:
                  with open(imgurl.split('/')[4] + '.jpg', 'wb') as file:
                      for chunk in r.iter_content(1024):
                          file.write(chunk)
      

      希望这有帮助!

      【讨论】:

      • 运行此程序时遇到一些错误。您是否在示例上运行过它并且效果很好?我似乎也无法理解您在 imgurl 上所做的事情。谢谢!
      • 抱歉,我处理得太快了。我让它在带有 pycharm 的 Windows 中工作,但在阅读您的评论后在 linux 上尝试了它并得到了这个错误。 AttributeError: 'NoneType' object has no attribute 'group' 我错误地添加了 shell=True 出于我的坏习惯。这里不需要它,删除它可以修复错误。我也可以让它更干净一些。我忘记了 proc.communicate 返回一个元组。解包让我跳过了一点不必要的解析 [:-4]。我已经用更正编辑了代码。希望他们这次能成功!
      • 工作就像一个魅力。太感谢了。我现在明白了!干杯:)
      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 2020-02-01
      • 2018-08-09
      • 2021-06-26
      • 2015-02-12
      • 1970-01-01
      • 2018-07-03
      相关资源
      最近更新 更多