使用Pytube无法下载高质量720P YouTube视频求助
问题:Pytube/yt-dlp下载的YouTube 720P视频实际画质远低于网页端
我尝试用Pytube下载YouTube的720P视频,代码如下:
from pytube import YouTube yt = YouTube('https://www.youtube.com/watch?v=xxxxxxx') stream = yt.streams.get_by_resolution('720p') stream.download('static/videos/')
我试过get_by_resolution('720p')、get_highest_resolution()、get_by_itag(22)这几种方式,但下载的视频实际画质都很低。用macOS Finder查看文件信息显示分辨率是1280×720,编码为MPEG-4 AAC、H.264,色彩配置文件HD(1-1-1),时长14:08——参数都对,但实际观感像360P,远不如网页端的720P:
- YouTube网页端画质:

- Pytube下载后的画质:

我查过网上没找到类似问题,用yt-dlp下载也得到同样的低画质视频。我需要高质量视频用于后续编码,原画质差的话重编码也没用,求解决办法。
解决方案
1. 选择同分辨率下的高码率流
YouTube的同分辨率视频会提供多个不同码率的流,你之前下载的大概率是低码率版本。可以通过筛选高码率流解决:
Pytube实现(需合并音视频)
YouTube高清流通常音视频分离,需单独下载后合并:
from pytube import YouTube import os yt = YouTube('https://www.youtube.com/watch?v=xxxxxxx') # 筛选720P最高码率视频流(仅视频) best_video = yt.streams.filter(res='720p', only_video=True).order_by('bitrate').desc().first() # 筛选最高码率音频流 best_audio = yt.streams.filter(only_audio=True).order_by('bitrate').desc().first() # 下载临时文件 temp_video = best_video.download(output_path='static/videos/', filename='temp_video') temp_audio = best_audio.download(output_path='static/videos/', filename='temp_audio') # 用ffmpeg合并(需提前安装ffmpeg,macOS可通过brew install ffmpeg安装) output_path = 'static/videos/final_video.mp4' os.system(f'ffmpeg -i "{temp_video}" -i "{temp_audio}" -c copy "{output_path}"') # 删除临时文件 os.remove(temp_video) os.remove(temp_audio)
yt-dlp实现(自动合并)
yt-dlp可直接指定最优流,自动完成音视频合并:
yt-dlp -f 'bestvideo[height=720]+bestaudio/best[height=720]' https://www.youtube.com/watch?v=xxxxxxx -o 'static/videos/%(title)s.%(ext)s'
2. 确认原视频的实际码率
部分视频的720P版本本身码率就低,可在网页端验证:
播放视频时右键选择「统计信息」,查看「视频比特率」。如果网页端720P码率本身不高,那下载的就是对应流;如果网页端码率明显更高,可尝试更换网络环境(比如切换到更稳定的网络)后再下载。
3. 更新工具版本
旧版本的Pytube/yt-dlp可能无法正确解析YouTube的最新流信息,更新到最新版:
- 更新Pytube:
pip install --upgrade pytube - 更新yt-dlp:
pip install --upgrade yt-dlp
内容的提问来源于stack exchange,提问作者Steven Thomas
相关产品推荐
相关产品推荐

