
本文详解 pytube 中获取音视频下载 url 的标准方法,纠正常见类名误写(如 ytube → youtube)及已废弃方法(如 get_video_url),提供可直接运行的流式筛选示例代码。
本文详解 pytube 中获取音视频下载 url 的标准方法,纠正常见类名误写(如 ytube → youtube)及已废弃方法(如 get_video_url),提供可直接运行的流式筛选示例代码。
在使用 pytube 库下载 YouTube 音视频时,开发者常因沿用过时文档或拼写错误而触发类似 'Ytube' object has no attribute 'get_video_url' 的 AttributeError。该错误本质源于两点:一是实例化对象时使用了不存在的类名(如 Ytube),二是调用了 pytube 当前版本(v15.0+)中早已移除的旧方法(如 get_audio_url()、get_video_url())。自 pytube 重写流式架构后,所有媒体资源必须通过 .streams 属性筛选并调用 .url 获取有效下载地址。
✅ 正确做法如下:
-
导入并实例化标准类:使用
from pytube import YouTube,而非自定义或拼错的类名(如Ytube或YouTube24); -
通过 streams 筛选目标流:
- 音频(MP3):
yt.streams.filter(only_audio=True).first() - 视频(MP4,最高清):
yt.streams.get_highest_resolution()或按分辨率/编码精细筛选,如yt.streams.filter(res="1080p", mime_type="video/mp4").first();
- 音频(MP3):
-
统一通过
.url属性获取下载链接:每个 Stream 对象均暴露url属性,无需额外方法。
完整可运行示例:
from pytube import YouTube
url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
yt = YouTube(url)
format = "mp3" # 或 "mp4"
try:
if format == "mp3":
stream = yt.streams.filter(only_audio=True).first()
if not stream:
raise ValueError("No audio stream available")
elif format == "mp4":
stream = yt.streams.get_highest_resolution()
if not stream:
raise ValueError("No video stream available")
else:
raise ValueError("Unsupported format. Use 'mp3' or 'mp4'")
download_url = stream.url
print(f"Download URL: {download_url}")
except Exception as e:
print(f"Download error: {e}")
⚠️ 注意事项:
-
pytube不直接生成 MP3 文件,only_audio=True返回的是包含音频的 M4A/WEBM 流(通常为audio/mp4MIME 类型),需后续用 FFmpeg 转码; - 若需确保 MP3 输出,建议搭配
ffmpeg-python实现下载 + 转换流水线; - 某些视频可能禁用嵌入式流(如受版权保护内容),此时
stream可能为None,务必添加空值校验; - 始终使用最新版
pytube(pip install --upgrade pytube),旧版本存在兼容性与反爬失效风险。
掌握 streams 的灵活筛选逻辑,是高效、稳定使用 pytube 的核心能力——告别硬编码方法名,拥抱面向流(Stream)的现代 API 设计。











