PyTube异常:选中160kbps OPUS WEBM却下载64kbps低音质音频
问题
原本代码可正常下载YouTube对应URL的160kbps OPUS WEBM音频,但目前终端明明显示选中了该流,实际下载的却是低于要求的低音质版本。
我的代码
from pytube import YouTube from sys import argv link = argv[1] yt = YouTube(link) print("Title: ", yt.title) print("Ciew:", yt.views) print(yt.streams.filter(only_audio=True)) video = yt.streams.filter(only_audio=True).last() print(video) video.download(r'E:\Users\XXXX\Desktop\YTDTEST') print("DONE")
终端输出
PS E:\Users\XXX\Desktop\PyTube> python pydl2.py "https://www.youtube.com/watch?v=GaJcBJQi7bY" Title: Prince & The Revolution - Purple Rain (Official Video), HD (Digitally Remastered and Upscaled) Ciew: 56547 [<Stream: itag="139" mime_type="audio/mp4" abr="48kbps" acodec="mp4a.40.5" progressive="False" type="audio">, <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">, <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus" progressive="False" type="audio">, <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus" progressive="False" type="audio">, <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">] <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio"> DONE
解决方法
- 精准指定目标流,不要依赖
.last():.last()的排序逻辑可能随pytube版本变化,直接通过itag或明确过滤条件锁定160kbps OPUS流:# 方式1:用itag直接获取(251对应目标流) video = yt.streams.get_by_itag(251) # 方式2:多条件过滤后取第一个匹配项 video = yt.streams.filter(only_audio=True, mime_type='audio/webm', abr='160kbps').first() - 升级pytube到最新版:旧版本可能存在流解析bug,执行命令更新:
pip install --upgrade pytube - 验证下载文件的实际码率:系统属性显示的码率可能不准确,用FFmpeg检查真实码率:
查看输出里的ffmpeg -i "你的下载文件.webm"bitrate字段确认实际音质。 - 清除pytube缓存:缓存的旧流信息可能导致错误,删除
%LOCALAPPDATA%\pytube目录后重新运行脚本。
内容的提问来源于stack exchange,提问作者Liam Harvey
相关产品推荐
相关产品推荐

