2016-09-21 174 views
1

我一直在試圖下載我的網址列表(youtube視頻)的縮略圖。如何使用youtube-dl下載縮略圖?

我一直在使用YouTube-DL,到目前爲止我已經工作了這樣:

 import os 

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

像這樣我能夠下​​載縮略圖,但我不得不下載的YouTube視頻也是如此。

如何才能下載縮略圖?

回答

0

它看起來像傳遞--list-thumbnails會將url返回到縮略圖圖像,但它只會在調用os.system()時輸出到屏幕。

下面是不是最漂亮的,但它是讓YouTube的-DL的輸出轉換成字符串中使用子進程,解析它來獲取地址,然後用請求下載的快速工作示例:

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) 

希望這有助於!

+0

我收到了一些運行此錯誤的錯誤。你有沒有跑過這個例子,它工作正常? 我似乎無法理解你在imgurl上做了什麼。 謝謝! – TheOlDirtyBastard

+0

對不起,我的工作太快了。我使用pycharm在windows中工作,但在閱讀你的評論後在linux上嘗試過,並得到這個錯誤。 AttributeError:'NoneType'對象沒有屬性'group' 我錯誤地添加了shell = True出於我的壞習慣。在這裏不需要,並且刪除它可以修復錯誤。 我也能夠使它更清潔。我忘記了proc.communicate返回一個元組。拆包,讓我跳過一小部分不必要的解析[:-4]。我使用更正編輯了代碼。希望他們這次能夠工作! –

+0

工作就像一個魅力。非常感謝。我現在明白了!乾杯:) – TheOlDirtyBastard

1

你可以簡單的添加--skip-下載到你的代碼,它會正常工作。像這樣:

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