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

Python使用pytube模块获取YouTube视频大小提示无filesize属性报错

pytube 读取文件大小报错解决方法

报错原因

  • filesize 属性不属于YouTube根实例,而是绑定在单条视频流Stream对象上。一个YouTube视频会提供多套不同分辨率、编码、音轨配置的下载流,每套流的体积完全不同,因此不存在全局统一的文件大小属性。
  • 你直接调用video_link.filesize自然会触发属性不存在的错误。

修正方案

你需要先选定要操作的具体流,再从流对象上读取filesize属性,同时你原代码还有两处逻辑错误需要调整:

  1. 进度回调需要在调用下载方法前注册,且要传入函数本身,不能直接执行函数
  2. streams.first()的返回规则不明确,推荐用get_highest_resolution()等方法明确指定要使用的流

修正后完整代码

from tkinter import * 
from pytube import *
import tkinter.messagebox as tmsg

# 进度回调函数
def on_progress(stream, chunk, bytes_remaining):
    total = stream.filesize
    downloaded = total - bytes_remaining
    print(f"下载进度:{round(downloaded / total * 100, 1)}%")

video_link = YouTube("https://www.youtube.com/watch?v=vvpb8IdDZZI&t=187s")
print(f"视频标题:{video_link.title}")
# 选择最高分辨率的视频流
target_stream = video_link.streams.get_highest_resolution()
# 打印文件大小,单位转换为MB
print(f"视频大小:{round(target_stream.filesize / 1024 / 1024, 2)} MB")
# 注册进度回调
video_link.register_on_progress_callback(on_progress)
# 执行下载
target_stream.download()
print("视频下载完成")

可选操作:查看所有流的大小

如果需要遍历所有可选下载流的大小,可使用如下代码:

for stream in video_link.streams:
    print(f"流配置:{stream} | 体积:{stream.filesize if stream.filesize else '无数据'} 字节")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:06