BaiduPCS-Py icon indicating copy to clipboard operation
BaiduPCS-Py copied to clipboard

下载速度最多 3MB/s 的问题

Open Pandaft opened this issue 3 years ago • 10 comments

#47 这个问题在我这也出现了。

我的账号是 SVIP4 ,无论用手机官方 App 还是 pc 端都可以满速下载,宽带能跑满 11MB/s ,手机 5G 实测可以跑到 80+MB/s ,因此可推断账号是没有黑号的。

我在 Win10 上运行 BaiduPCS-Py 无论如何都是最多只有 3MB/s,也尝试了提高线程数和减小分块大小,但都没有用。楼上提到换 Linux 可以满速,但我在虚拟机 Linux 中运行 BaiduPCS-Py 实测还是一样。

但上述操作中,Win10 和 Linux 中使用的网络环境和账号都是相同的,因此我在 Win10 和 Linux 中分别测试了 电信 100Mbps 和 移动 300Mbps,但结果都是不超过 3MB/s。看起来似乎和网络没有关系。

我想换个账号试试但我没有其他的 SVIP 账号,但我注意到 github 上的另外一个项目 BaiduPCS-Go 。我在 Win10 和 Linux 上分别运行那个程序,都能达到 10MB/s,只不过有点波动,我只用了 电信 100Mbps 网络测试,如果用更快的网络也许还会超过 10MB/s。

同一个账号,同一个硬件环境,同一个网络环境,但不同的程序,我觉得是 BaiduPCS-Py 的问题(没有批判的意思,这个项目对我帮助很大,所以我才来提 issue 希望能帮助改进)。

我注意到 BaiduPCS-Py 和 BaiduPCS-Go 的登陆方式不一样,前者是使用者自行在网页版获取 BDUSS 和 cookies ;后者是使用者输入账号和密码,程序模拟登陆后获取登录信息。不知道问题是否跟这个有关?

Pandaft avatar Jul 08 '21 02:07 Pandaft

感谢反馈。

可否能贴出你上面测试用的具体命令(文件名用 abc 代替就可)和测试环境,包括 BaiduPCS-Py 和 与之对比的 BaiduPCS-Go 命令。 这样我可以检测什么地方出了问题。

PeterDing avatar Jul 08 '21 03:07 PeterDing

BaiduPCS-Go 默认分块大小是 64 KB

D:\BaiduPCS-Go d --save /4k.mp4

[0] 提示: 当前下载最大并发量为: 8, 下载缓存为: 65536 [1] 加入下载队列: /4K.mp4

[1] ---- 类型 文件 文件路径 /4K.mp4 文件名称 4K.mp4 文件大小 493295519, 470.443267MB md5 (可能不正确) 155ad5260hd9c983632f3fea8723fff0 app_id 250528 fs_id 1004526498096982 创建日期 2020-05-09 22:25:29 修改日期 2021-07-08 11:45:15

[1] 准备下载: /4K.mp4 [1] 将会下载到路径: 4K.mp4

[1] ↓ 213.81MB/470.44MB 10.86MB/s in 21s, left 23s ............

默认参数下载:

D:\>BaiduPCS-Py d /4k.mp4 ⠇ 4k.mp4.tmp -- ------------------------------------- 6.2% • 30.5/493.3 MB • 3.0 MB/s • 0:02:36

提高线程数、减小分块大小:

D:\>BaiduPCS-Py d -s 10 -k 500k /4k.mp4 ⠦ 4k.mp4.tmp - -------------------------------------- 2.9% • 14.3/493.3 MB • 1.9 MB/s • 0:04:09

进一步提高线程数、减小分块大小至与 BaiduPCS-Go 相等:

D:>BaiduPCS-Py d -s 20 -k 64k /4k.mp4 ⠹ 4k.mp4.tmp ---------------------------------------- 0.4% • 1.9/493.3 MB • 315.1 kB/s • 0:26:00

意外的是我发现如果增加分块大小,速度提上去了,在 5-8MB/s 之间波动:

D:\>BaiduPCS-Py d -s 20 -k 5120k /4k.mp4 ⠏ 4k.mp4.tmp --------------- ------------------------ 38.3% • 188.7/493.3 MB • 8.2 MB/s • 0:00:38

提高线程数,没有改善:

D:\>BaiduPCS-Py d -s 30 -k 5120k /4k.mp4 ⠧ 4k.mp4.tmp ------ --------------------------------- 15.9% • 78.6/493.3 MB • 8.2 MB/s • 0:00:51

减少线程数,没有改善

D:\>BaiduPCS-Py d -s 5 -k 5120k /4k.mp4 ⠦ 4k.mp4.tmp --------- ------------------------------ 24.4% • 120.6/493.3 MB • 8.2 MB/s • 0:00:46

不改线程数、增大分块大小,前期速度波动在 6-10MB/s,后期稳定在 2MB/s:

D:\>BaiduPCS-Py d -s 20 -k 10240k /4k.mp4 ⠧ 4k.mp4.tmp ---------------------------------- ----- 87.1% • 429.8/493.3 MB • 1.8 MB/s • 0:00:36

我现在换到移动 300Mbps 网络试试……

Pandaft avatar Jul 08 '21 04:07 Pandaft

移动 300Mbps 网络:

前期 10-20MB/s 波动,后期 1-5MB/s 波动:

D:\>BaiduPCS-Py d -s 20 -k 10240k /8k.mp4 ⠋ 8k.mp4.tmp ---------------- ----------------------- 42.2% • 419.4/995.0 MB • 21.8 MB/s • 0:00:27

将线程数改为 1 ,结果和上面相同:

D:\>BaiduPCS-Py d -s 1 -k 10240k /8k.mp4 ⠋ 8k.mp4.tmp ------------------- -------------------- 47.8% • 475.5/995.0 MB • 1.3 MB/s • 0:06:52

将分块大小提高至30MB,速率在 20-30MB/s 波动:

D:\>BaiduPCS-Py d -s 1 -k 30720k /8k.mp4 ⠹ 8k.mp4.tmp ----------------- ---------------------- 44.6% • 443.4/995.0 MB • 33.0 MB/s • 0:00:17 用上面这条命令实测用时 103s,平均 9.6MB/s,中间网速波动很大,一时很快(30+MB/s),一时很慢(1MB/s)。 我在手机APP中下载实测用了 35s,平均 33.1 MB/s,网速波动很小。

不过这个速度也很满意了,感谢!

Pandaft avatar Jul 08 '21 04:07 Pandaft

忘了说环境都是Win10专业版,性能应该不是瓶颈,R7 4800H 3060 24G内存 500G SSD(sn550)

Pandaft avatar Jul 08 '21 04:07 Pandaft

抱歉,是我没把文档写清楚。

对于下载命令 d,如果不加 -d 来指定下载器,都是默认使用 me 下载器。所有你以上使用的命令都是用 me 下载器。me 下载器只使用一个连接下载,并发选项 -s 是指同时并发下载文件的数量,而不是下载一个文件使用的连接数量。所以你上面的命令都只使用了一个连接来下载文件,而 BaiduPCS-Go 是使用了8个连接来同时下载一个文件。我想 App 也是一样的。

如果想对一个文件同时使用多个连接同时下载,你需要指定下载器为 aget_pyaget_rs,前者默认安装,后者需要手动安装。

对于 svip 帐号,-k 设置为 40m ~ 50m 比较好,如果带宽跑不满,可以增加 -s 并发值。 比如,你可以试试下面的命令,应该可以跑满带宽:

BaiduPCS-Py d /abc -d aget_py -s 10 -k 50m

PeterDing avatar Jul 08 '21 09:07 PeterDing

原来如此,十分感谢!!!

是我没认真看文档,这次尝试了你给的那条命令,下载单文件 995MB 只用了 35s,平均速度 28.4MB/s,快太多了。

Pandaft avatar Jul 08 '21 11:07 Pandaft

-s 一般设为 5,太大可能有被封的风险。

PeterDing avatar Jul 08 '21 11:07 PeterDing

好的,不过我还有几个问题:

  1. BaiduPCS-Py 计算文件大小是除以 1000,这是正常的吗(上面的 995MB 实际是 995,043,234 字节,除 1024 再除 1024 的话是 948MB 和 Win10 显示一致)

  2. 使用 aget_py 下载器后不显示进度和速度了,一直都是 0% 和 0MB/s,但实际是正常下载的。

  3. 这个是我个人的问题,买个欧美地区的 1Gbps 大带宽 vps 运行此项目可以实现高速下载吗?我在手机上挂梯子如果选用香港节点貌似下载不了文件,但是美国的节点能正常下载文件,只不过不是很快。

Pandaft avatar Jul 08 '21 12:07 Pandaft

  1. 这是个 bug,会在下个版本修复。
  2. 不显示进度和速度是 aget_py 设计问题,它要下载完一个 -k 的大小的块才会更新进度。 最近不会修复这个问题。如果你在意这个问题,可以换用 aget_rs 试试,它的进度显示是正常的。
  3. 用国外的服务器只会减慢下载速度。毕竟数据要绕去国外再转回来。

PeterDing avatar Jul 08 '21 12:07 PeterDing

好的,感谢耐心解答!

Pandaft avatar Jul 08 '21 13:07 Pandaft