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

PyQt5程序结合pytube库更新进度条,回调晚触发问题如何解决?

pytube实时进度回调修复方案

现存代码问题

  • 基础语法错误:定义流列表时变量名为stream,后续调用时误用为streams,get_by_itag、download方法的括号未正确闭合
  • 回调绑定不规范:新版pytube的YouTube构造函数需要显式指定on_progress_callback参数绑定进度回调,直接位置传参不会生效
  • 终端输出缓冲:Python默认print函数会开启输出缓冲,内容会攒到缓冲区满或者程序结束才打印,视觉上表现为回调在下载结束后才统一执行

修复后可运行代码

from pytube import YouTube

def video_progress(stream, chunk, bytes_remaining):
    size = stream.filesize
    progress = (float(abs(size - bytes_remaining) / size)) * float(100)
    # 加flush=True关闭输出缓冲,实时打印进度
    print(f"当前进度:{progress:.2f}%", flush=True)
    # self.progressBar1.setValue(int(progress))

def download():            
    v_url = input('enter your url : ')
    v_location = input('enter save place : ')
    # 显式指定on_progress_callback参数绑定回调
    video = YouTube(v_url, on_progress_callback=video_progress)
    print("开始获取视频流信息")
    streams = video.streams.filter(progressive=True, file_extension='mp4')
    for s in streams:
        print(s) 
    wanted_stream = streams.get_by_itag(input('输入你选择的流对应的itag : '))
    wanted_stream.download(output_path=v_location)
    print("下载完成")

download()

补充说明

按照以上修改后即可实现进度实时更新,无需额外调用其他方法。如果仍有延迟问题,可将pytube升级到最新正式版验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:10