You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:15:35