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

Python中pytube分辨率参数失效问题求助

解决Pytube选择分辨率下载失败误报链接错误的问题

问题根源

  1. 异常捕获过于笼统:你代码中的except块捕获了所有异常,不管是链接无效、视频不可用还是找不到指定分辨率的流,都统一输出"Please enter right link",导致错误提示完全误导。
  2. 未检查流是否存在:当yt.streams.filter()找不到匹配videoRes的MP4流时,调用download()会抛出异常,但被你的通用except拦截,错误归因到链接上。

修复方案

修改代码,拆分异常处理逻辑,先验证目标流是否存在,再执行下载操作:

import pytube
from pytube import YouTube
from pytube.exceptions import VideoUnavailable, RegexMatchError

videoURL = input("Enter Your Video Link : ")
videoRes = input("Enter Your Quality (e.g., 144p, 360p): ")

try:
    yt = YouTube(videoURL)
    print("Fetching video streams...")
    # 过滤MP4格式与指定分辨率的流
    target_streams = yt.streams.filter(file_extension='mp4', resolution=videoRes)
    
    if not target_streams:
        print(f"错误:未找到分辨率为 {videoRes} 的MP4流")
        # 可选:列出当前视频支持的所有MP4分辨率
        print("该视频可用的MP4分辨率:")
        available_resolutions = sorted(set(stream.resolution for stream in yt.streams.filter(file_extension='mp4') if stream.resolution))
        for res in available_resolutions:
            print(f"- {res}")
    else:
        print("Downloading...")
        target_streams.first().download(output_path="C:\\Users\\pc\\Desktop")
        print("下载成功!")

except VideoUnavailable:
    print("错误:视频不可用或为私有视频")
except RegexMatchError:
    print("错误:请输入有效的YouTube视频链接")
except Exception as e:
    print(f"意外错误:{str(e)}")

关键修改点

  • 精准异常捕获:导入Pytube内置的VideoUnavailable和RegexMatchError,分别处理视频不可用、链接无效的情况,其他异常单独提示具体信息。
  • 流存在性检查:先确认过滤后的流列表非空,再执行下载,否则明确提示分辨率不存在,并可选列出可用分辨率供用户参考。
  • 明确获取流:用first()方法显式获取第一个匹配的流,避免隐式调用可能带来的问题。

内容的提问来源于stack exchange,提问作者Mido

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:05:07