
本文详解 pytube 中获取音视频下载 URL 的标准方法,纠正常见类名误写(如 Ytube)及已废弃方法(如 get_video_url),并提供可直接运行的流式选择代码示例。
本文详解 `pytube` 中获取音视频下载 url 的标准方法,纠正常见类名误写(如 `ytube`)及已废弃方法(如 `get_video_url`),并提供可直接运行的流式选择代码示例。
在使用 pytube 库下载 YouTube 内容时,开发者常因沿用过时文档或拼写错误而遇到类似 'Ytube' object has no attribute 'get_video_url' 的 AttributeError。根本原因有二:一是实例化了不存在的类(如自定义或误写的 Ytube),二是调用了早已移除的旧版 API 方法(get_audio_url() / get_video_url() 在现代 pytube(v12.0+)中完全不存在)。
✅ 正确做法是:使用官方 YouTube 类,并通过 streams 属性筛选并获取对应媒体流,再访问其 .url 属性:
from pytube import YouTube
url = "https://www.youtube.com/watch?v=..." # 替换为实际视频 URL
yt_video = YouTube(url) # 注意:类名是 YouTube,不是 Ytube 或 YouTube24(后者为非官方 fork)
if format == 'mp3':
# 获取首个仅含音频的流(通常为 opus/webm 或 mp4a)
stream = yt_video.streams.filter(only_audio=True).first()
elif format == 'mp4':
# 获取最高分辨率的 MP4 视频流(含音视频)
stream = yt_video.streams.get_highest_resolution()
else:
raise ValueError("format must be 'mp3' or 'mp4'")
if stream is None:
raise RuntimeError(f"No suitable {format} stream found for this video.")
download_url = stream.url # ✅ 正确获取直链 URL
print("Download URL:", download_url)
⚠️ 注意事项:
-
pytube不提供“一键生成下载链接”的高层方法;所有资源均需通过stream对象显式选取; -
only_audio=True返回的是纯音频流(如audio/mp4),适合转 MP3;若需.mp3文件,需后续用ffmpeg转码; -
get_highest_resolution()默认返回video/mp4流,但部分视频可能无mp4封装的高清流,此时可改用.filter(file_extension='mp4').order_by('resolution').desc().first()更精确控制; - 首次运行建议添加异常处理(如
PytubeError、VideoUnavailable),因 YouTube 可能限制访问或更改响应结构; - 确保安装的是主流维护版本:
pip install --upgrade pytube(避免使用已停更的pytube3或非标分支)。
总结:摒弃 get_audio_url() 等幻影方法,拥抱 streams 过滤器 + stream.url 模式,是当前 pytube 开发的唯一可靠路径。











