如何用Pytube下载不超过1080P的最高可用分辨率视频?
YouTube视频下载优化方案
现有代码
url = message.text file = YouTube(url) stream = file.streams.get_by_resolution(360) stream.download(filename='qwe.mp4')
问题背景
目前仅掌握两种获取视频流的方式:通过itag或指定固定分辨率(示例中为360P),但部分视频不存在360P分辨率,最高仅为240P或120P,因此需要更灵活的流选择逻辑。
解决方案
1. 下载不超过1080P的最高可用分辨率视频
完全可以实现,核心思路是筛选出所有分辨率≤1080P的视频流,再按分辨率从高到低排序,取优先级最高的流即可。
如果需要直接下载包含音视频的完整流(无需后期合并),使用以下代码:
url = message.text file = YouTube(url) # 筛选不超过1080P、包含音视频的流,按分辨率降序排列 valid_streams = file.streams.filter(resolution__lte='1080p', progressive=True).order_by('-resolution') if valid_streams: highest_stream = valid_streams.first() highest_stream.download(filename='qwe.mp4') else: print("未找到符合条件的视频流")
如果需要支持分离式音视频流(部分高分辨率视频仅提供分离流),可以去掉progressive=True参数,后续自行合并音视频即可。
2. 通过首个存在的itag下载视频
如果上述方案因特殊场景不可行,直接获取列表中第一个可用的流即可,对应的代码如下:
url = message.text file = YouTube(url) first_stream = file.streams.first() first_stream.download(filename='qwe.mp4')
streams.first()会返回默认排序中第一个可用的流,通常是兼容性较好的低分辨率选项。
内容的提问来源于stack exchange,提问作者Goorhatar
相关产品推荐
相关产品推荐

