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

使用Pytube下载视频时进度仅显示99和100的问题求助

问题原因
  • 核心原因是pytube的on_progress回调默认仅在每下载完成一个大块数据后触发,默认单块大小为9MB左右。如果你的视频总大小仅十几MB,仅需要2个数据块就能完成下载,自然只会触发2次回调,对应输出99、100两个进度值。
  • 附加影响因素:你对进度值做了int()强制转换,会抹除进度的小数部分,进一步减少了可显示的进度值数量。
解决方案

修改pytube的默认下载块大小,调小单块阈值即可增加回调触发频率,输出连续的进度值。你可以在代码开头添加修改块大小的配置,建议设置为1MB(1024*1024字节),如果需要更细的进度可以进一步调小到128KB等。

修复后完整代码
from pytube import YouTube
from pytube import request
import os

# 调小下载块大小为1MB,可根据需求调整
request.default_range_size = 1024 * 1024

max_file_size = 0

def on_progress(stream, data_chunk, bytes_remaining):
    # 保留1位小数提升进度精度
    percent = round(100 - (100 * (bytes_remaining/max_file_size)), 1)
    print(percent)

def on_comp(stream, path):
    print('Completed')

yt = YouTube('https://www.youtube.com/watch?v=qxYbHzn8bbU&t=84s', 
    on_progress_callback=on_progress, on_complete_callback=on_comp)       
# 兼容新版pytube的流筛选写法
video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
max_file_size = video.filesize
video.download(os.getcwd())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:03