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

如何将pytube下载进度信息同步到tqdm进度条中?

Python实现YouTube下载实时进度条方案

pytube框架原生支持进度回调钩子,可以直接获取视频总大小、实时已下载字节数,和tqdm联动即可实现真实进度展示,你原有代码中的进度条为模拟进度,还包含错误的多余文件写入逻辑,修改后的可运行代码如下:

import os
from pytube import YouTube
from tqdm import tqdm

# 全局进度条实例
pbar = None

def progress_callback(stream, chunk, bytes_remaining):
    global pbar
    # 更新进度条,增量为本次下载的块大小
    pbar.update(len(chunk))

if __name__ == "__main__":
    al = str(input("Command:"))
    if al == "4":
        af = input("Link:")
        # 注册进度回调函数
        you = YouTube(af, on_progress_callback=progress_callback)
        # 创建下载目录,已存在时不报错
        os.makedirs("Download", exist_ok=True)
        # 获取最高清视频流
        res = you.streams.get_highest_resolution()
        # 初始化进度条,总大小为视频真实大小
        with tqdm(total=res.filesize, unit='B', unit_scale=True, desc=you.title) as pbar:
            # 下载到指定Download目录
            res.download(output_path="Download")
        print("下载完成")

关键改动说明

  • 新增progress_callback进度回调函数,pytube每下载完一段数据就会自动触发该函数,直接读取视频流的总大小计算实时进度
  • 移除原有模拟进度的循环逻辑和错误的手动写文件逻辑:pytube的download()方法已自动完成文件写入操作,原有代码中的open("\Download", "w")不仅路径错误,还会损坏已下载的视频文件
  • 进度条直接使用视频真实大小作为总进度值,支持自动转换字节单位为KB/MB/GB,进度精度为字节级
  • 优化目录创建逻辑,避免重复创建目录时抛出异常

如果运行时出现回调参数不匹配的问题,升级pytube到最新版本即可:
pip install --upgrade pytube tqdm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:06:03