我一直在尝试下载我所拥有的网址(YouTube视频)列表的缩略图。
我一直在使用youtube-dl,到目前为止我已经解决了这个问题:
import os
with open('results.txt') as f:
for line in f:
os.system("youtube-dl " + "--write-thumbnail " + line)
像这样,我可以下载缩略图,但我也被迫下载了YouTube视频。
我如何才能下载缩略图?
答案 0 :(得分:5)
您可以简单地将--skip-download添加到您的代码中,它将正常工作。像这样:
with open('urls.txt') as f:
for line in f:
os.system("youtube-dl "+"--write-thumbnail "+"--skip-download "+line)
答案 1 :(得分:1)
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)
答案 2 :(得分:0)
看起来像传递--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)
希望这有帮助!
答案 3 :(得分:0)
在其他答案的基础上,您还可以指定-a
或--batch-file
标志来提供要导入的文件列表,从而简化了代码:
youtube-dl -a urls.txt --write-thumbnail --skip-download