使用Pytube下载YouTube视频时出现KeyError: 'bitrate'问题求助
KeyError: 'bitrate' 问题分析与解决
错误原因
这个错误的核心是YouTube返回的视频流元数据中缺失了bitrate字段,而你使用的pytube版本代码直接通过键取值(stream["bitrate"]),没有处理字段缺失的异常情况。
常见触发场景:
- 部分特殊类型的YouTube视频流(比如某些自适应流、低分辨率流或新格式流)的元数据结构和常规流不同,未包含
bitrate字段; - 你使用的pytube版本过旧,官方后续修复了字段缺失的兼容逻辑,但你的版本未覆盖该处理。
解决方法
1. 升级pytube到最新版本
这是最直接的解决方案,官方大概率已经修复了这类字段缺失的异常处理。执行以下命令升级:
pip install --upgrade pytube
如果升级后仍有问题,可尝试强制重装:
pip install pytube --force-reinstall
2. 手动修改pytube源码兼容缺失字段
如果暂时无法升级版本,可直接修改报错的streams.py文件:
找到第60行的代码,将:
self.bitrate: Optional[int] = stream["bitrate"]
替换为使用get方法安全取值:
self.bitrate: Optional[int] = stream.get("bitrate")
这样当bitrate字段不存在时,会返回None而非抛出KeyError。
3. 过滤掉无bitrate字段的流
在获取视频流时,主动过滤掉不包含bitrate的流,避免触发错误:
from pytube import YouTube yt = YouTube("https://www.youtube.com/watch?v=kMKS2QpFTVI") # 只保留包含bitrate的流 valid_streams = yt.streams.filter(bitrate__isnot=None) # 选择需要的流下载,比如最高分辨率的视频流 valid_streams.get_highest_resolution().download()
4. 尝试启用OAuth验证(可选)
部分视频虽然可直接访问,但YouTube的API响应可能需要验证才能返回完整的流元数据,可尝试启用OAuth:
yt = YouTube("https://www.youtube.com/watch?v=kMKS2QpFTVI", use_oauth=True, allow_oauth_cache=True) yt.streams.get_highest_resolution().download()
首次运行会提示你登录YouTube账号,后续会缓存验证信息。
内容的提问来源于stack exchange,提问作者tealy
相关产品推荐
相关产品推荐

