使用Python模块yt_dlp获取YouTube播放列表信息慢于命令行的优化咨询
使用Python模块yt_dlp获取YouTube播放列表信息慢于命令行的优化咨询
嗨,我来帮你解决这个问题~你遇到的Python代码比命令行慢的核心原因,是两者使用的参数逻辑不一样!
你在命令行里加了--flat-playlist和--dump-single-json,这两个参数会让yt-dlp只抓取播放列表的基础框架信息,不会逐个拉取每个视频的详细数据(比如视频时长、分辨率、字幕信息这些),所以速度飞快;但你的Python代码里没有设置对应的选项,yt-dlp默认会去获取每个视频的完整详情,自然就慢很多啦。
只需要给Python代码里的ydl_opts加上对应参数,就能让速度和命令行保持一致,同时获取到和命令行输出结构相近的信息。修改后的代码如下:
import yt_dlp url = 'https://www.youtube.com/playlist?list=PLyiJZcChPSpxLQHGf6K5CwGv7QIR55ea6' def get_video_info(url): # 对应命令行的 --flat-playlist 和 --dump-single-json 核心参数 ydl_opts = { "ignoreerrors": True, "extract_flat": "in_playlist", # 只提取播放列表的扁平结构,不深入视频详情 "quiet": True, # 关闭冗余输出,进一步提升速度 "skip_download": True # 明确标记不下载,和download=False作用一致 } with yt_dlp.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info(url, download=False) return info info = get_video_info(url) print(info.get('entries'))
这样修改后,yt-dlp只会获取播放列表里每个视频的基础标识信息(比如视频ID、标题、链接),不会加载额外的详细内容,速度就会和你用命令行时一样快啦,返回的信息结构也会和--dump-single-json的输出几乎一致。
备注:内容来源于stack exchange,提问作者user28976168




