You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:31:12