youtubedl,作为子进程调用,无法识别链接

2024-04-26 10:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我正在编写一个基本的python脚本,使用youtube dl从视频中下载高质量的缩略图。使用命令行youtube dl,您可以运行“youtube dl——列出缩略图[LINK]”,它将输出一个不同质量的链接列表,指向缩略图图像。通常,最高分辨率的链接中有“maxresdefault”。我希望能够使用wget从命令行下载此图像。这是我迄今为止实现它的代码。我不熟悉regex,但根据这个网站:regexr.com,它应该在链接中与“maxresdefault”匹配

import subprocess
import sys
import re
youtubeoutput = subprocess.call(['youtube-dl', '--list-thumbnails', 'https://www.youtube.com/watch?v=t2U2mUtTnzY'], shell=True, stdout=subprocess.PIPE)
print(str(youtubeoutput))
imgurl = re.search("/maxresdefault/g", str(youtubeoutput)).group(0)
print(imgurl)
subprocess.run('wget', str(imgurl))

我把打印语句放在那里,看看输出是什么。当我运行代码时,我可以看到youtube dl无法识别其中的链接youtube-dl: error: You must provide at least one url。由于输出中没有链接,因此重新搜索将变为非类型,并给我一个错误。我不知道为什么youtube dl无法识别该链接。我甚至不确定它是否能识别--list-thumnails。有人能帮忙吗


Tags: 代码命令行图像importcomyoutube链接wget
1条回答
网友
1楼 · 发布于 2024-04-26 10:06:07

您要求subprocess使用shell(shell=True),因此通常会将整个命令传递给call,如下所示:

youtubeoutput = subprocess.call("youtube-dl  list-thumbnails https://www.youtube.com/watch?v=t2U2mUtTnzY", shell=True, stdout=subprocess.PIPE)

但实际上,您可能不需要外壳。尝试以下方法:

youtubeoutput = subprocess.check_output(['youtube-dl', ' list-thumbnails', 'https://www.youtube.com/watch?v=t2U2mUtTnzY'])

注意call实际上并不返回程序的标准输出check_output没有

Reference

相关问题 更多 >