
本文详解 pytube 库中获取音视频下载链接的正确方式,解决因误用不存在方法(如 get_video_url())导致的 AttributeError,并提供可直接运行的代码示例与关键注意事项。
本文详解 `pytube` 库中获取音视频下载链接的正确方式,解决因误用不存在方法(如 `get_video_url()`)导致的 attributeerror,并提供可直接运行的代码示例与关键注意事项。
在使用 pytube 下载 YouTube 内容时,开发者常因沿用过时文档或混淆自定义类名而触发类似 'Ytube' object has no attribute 'get_video_url' 的 AttributeError。该错误本质源于两点:一是实例化了不存在的类(如 Ytube),二是调用了 pytube 官方 API 中根本不存在的方法(如 get_audio_url() 或 get_video_url())。pytube 自 v12.0+ 起已全面采用流式(Stream)对象模型,所有媒体资源均需通过 .streams 属性筛选并访问其 .url 属性获取真实下载地址。
以下是推荐的标准化实现方式:
from pytube import YouTube
def get_download_url(url: str, format: str) -> str:
try:
# ✅ 正确初始化:使用官方类名 YouTube(非 Ytube、YouTube24 等)
yt_video = YouTube(url)
if format == 'mp3':
# ✅ 获取首个仅含音频的 stream(通常为 m4a 格式,兼容性好)
stream = yt_video.streams.filter(only_audio=True).first()
elif format == 'mp4':
# ✅ 获取最高分辨率的视频流(含音轨)
stream = yt_video.streams.get_highest_resolution()
else:
raise ValueError("format must be 'mp3' or 'mp4'")
if not stream:
raise RuntimeError(f"No {format} stream found for this video.")
# ✅ 正确获取下载 URL:通过 stream.url 属性
return stream.url
except Exception as e:
raise RuntimeError(f"Download error: {e}")
# 使用示例
video_url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
print(get_download_url(video_url, 'mp3')) # 输出音频流 URL
print(get_download_url(video_url, 'mp4')) # 输出视频流 URL
⚠️ 重要注意事项:
-
pytube不再提供get_video_url()/get_audio_url()这类便捷方法,请务必通过.streams筛选后访问.url; -
only_audio=True返回的是纯音频流(如audio/mp4),适合转 MP3 场景;若需完整 MP4(含画面+声音),请用get_highest_resolution()或filter(progressive=True).first(); - 部分视频受版权限制可能无可用
progressive流,此时需组合video-only与audio-only流(进阶场景,需自行处理 mux); - 建议始终捕获异常并校验
stream是否为None,避免运行时AttributeError; - 确保安装的是最新稳定版:
pip install --upgrade pytube。
掌握这一流式访问模式,即可稳定、高效地集成 YouTube 音视频 URL 获取能力到你的应用中。











