使用pytube下载YouTube视频:1080p无法下载的原因排查
问题原因
YouTube对1080p及更高分辨率的视频采用音视频分离存储的机制:720p及以下分辨率存在包含音视频的合并流,但1080p及以上仅提供纯视频流(无音频)。你的代码中get_by_resolution('1080p')找不到带音频的合并流,返回None,后续调用download()自然会抛出NoneType object has no attribute download的错误。
解决方案
需要分别下载对应分辨率的纯视频流和最高质量的音频流,再通过第三方工具将两者合并。具体实现如下:
from pytube import YouTube import os def download_video(url, quality): yt = YouTube(url, use_oauth=False, allow_oauth_cache=True) title = yt.title # 获取指定分辨率的纯视频流 video_stream = yt.streams.filter(res=quality, only_video=True).first() if not video_stream: return f"找不到{quality}分辨率的视频流" # 获取最高质量的音频流 audio_stream = yt.streams.filter(only_audio=True).order_by('abr').desc().first() if not audio_stream: return "找不到音频流" # 分别下载视频和音频临时文件 video_path = video_stream.download(filename_prefix='temp_video_') audio_path = audio_stream.download(filename_prefix='temp_audio_') # 使用FFmpeg合并音视频(需提前安装FFmpeg并配置到环境变量) output_file = f"{title}_{quality}.mp4" os.system(f'ffmpeg -i "{video_path}" -i "{audio_path}" -c:v copy -c:a aac "{output_file}"') # 删除临时文件 os.remove(video_path) os.remove(audio_path) return "下载并合并完成" url = 'https://www.youtube.com/watch?v=DVqFyinDgE4' quality = '1080p' print(download_video(url, quality))
注意事项
- 需提前安装FFmpeg并将其配置到系统环境变量中,否则无法执行合并操作。
- 如果仅需要无音频的纯视频文件,可直接调用
video_stream.download(),跳过音频下载和合并步骤。
内容的提问来源于stack exchange,提问作者Abhishek Kashyap
相关产品推荐
相关产品推荐

