使用Pytube开发YouTube下载器:获取分辨率去重问题求助
解决Pytube获取MP4视频分辨率列表重复的问题
问题重现
使用Pytube获取YouTube视频MP4格式的分辨率时,返回的列表存在大量重复项,代码及运行结果如下:
from pytube import YouTube link = "https://www.youtube.com/watch?v=LXb3EKWsInQ" yt = YouTube(link) resolutions = [] video_resolutions = [] video_res = [] for stream in yt.streams.filter(subtype="mp4").order_by("resolution"): video_resolutions.append(stream.resolution) print(video_resolutions)
运行结果:
['144p', '144p', '144p', '240p', '240p', '240p', '360p', '360p', '360p', '360p', '480p', '480p', '480p', '720p', '720p', '720p', '720p', '1080p', '1080p', '1080p', '1440p', '1440p', '2160p', '2160p']
原因分析
重复的核心原因是:同一分辨率下存在多个不同属性的视频流——这些流可能在编码格式(如H.264/H.265)、帧率、是否包含音频等属性上有差异,但分辨率数值相同。
解决方案
方法1:遍历过程中去重(保留原排序)
遍历流时只添加未出现过的分辨率,维持原有排序逻辑:
from pytube import YouTube link = "https://www.youtube.com/watch?v=LXb3EKWsInQ" yt = YouTube(link) video_resolutions = [] for stream in yt.streams.filter(subtype="mp4").order_by("resolution"): res = stream.resolution if res not in video_resolutions: video_resolutions.append(res) print(video_resolutions)
输出结果:
['144p', '240p', '360p', '480p', '720p', '1080p', '1440p', '2160p']
方法2:集合去重后按数值排序
利用集合自动去重的特性,再按分辨率的数值大小重新排序:
from pytube import YouTube link = "https://www.youtube.com/watch?v=LXb3EKWsInQ" yt = YouTube(link) video_resolutions = [] for stream in yt.streams.filter(subtype="mp4"): res = stream.resolution if res: # 过滤无分辨率属性的异常流 video_resolutions.append(res) # 去重并按分辨率数值排序 unique_resolutions = sorted(list(set(video_resolutions)), key=lambda x: int(x[:-1])) print(unique_resolutions)
输出结果:
['144p', '240p', '360p', '480p', '720p', '1080p', '1440p', '2160p']
方法3:筛选特定类型流(按需选择)
如果只需要带音频的MP4流或纯视频流,可以通过过滤参数缩小范围,同时减少重复项:
from pytube import YouTube link = "https://www.youtube.com/watch?v=LXb3EKWsInQ" yt = YouTube(link) video_resolutions = [] # 获取同时包含音视频的MP4流 for stream in yt.streams.filter(subtype="mp4", only_audio=False, only_video=False).order_by("resolution"): res = stream.resolution if res not in video_resolutions: video_resolutions.append(res) print(video_resolutions)
内容的提问来源于stack exchange,提问作者PDX PRO
相关产品推荐
相关产品推荐

