为何Pytube中部分MP4格式视频流的分辨率显示为None?
问题
使用Pytube获取YouTube视频流时,发现部分MP4格式的流分辨率(resolution)显示为None。测试代码如下:
yt = YouTube("https://www.youtube.com/watch?v=LXb3EKWsInQ") for stream in yt.streams.filter(adaptive=True): print(stream)
输出结果中,itag=700、701等MP4流的res字段显示为None,但实际下载itag=700的流后,确认是1440p且播放正常,疑惑该现象的原因。
原因分析
这类res显示为None的MP4流(itag范围694-701),是YouTube推出的AV1编码高帧率视频流。出现该问题的核心原因是Pytube的元数据解析逻辑未完全覆盖这类新的流标识:
- YouTube在返回这类流的元数据时,分辨率字段的存储位置或格式与传统MP4流(如itag299、400等)不同;
- Pytube的流信息解析规则(如正则匹配、字段映射)尚未适配这类新itag的属性提取逻辑,导致
res属性无法正确填充,但流本身的实际分辨率是完整的。
临时处理方案
- 通过itag映射分辨率:根据YouTube公开的itag对应关系,694对应144p/60fps、695对应240p/60fps、696对应360p/60fps、697对应480p/60fps、698对应720p/60fps、699对应1080p/60fps、700对应1440p/60fps、701对应2160p/60fps,可手动建立映射关系获取分辨率;
- 升级Pytube版本:执行
pip install --upgrade pytube升级到最新版,开发者可能已修复这类新流的解析问题; - 解析流的原始元数据:通过
stream.raw_data访问YouTube返回的原始流数据,从中提取height字段来获取正确分辨率。
内容的提问来源于stack exchange,提问作者duruburak
相关产品推荐
相关产品推荐

