使用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
相关产品推荐
相关产品推荐

