-
各位如果对这个问题有什么看法可以在这里讨论 🤗 通过分析b站前端js,以及API收集项目中提供的文档(感谢🙏),获取b站弹幕的方式主要有两种方式,一个是旧的XML形式,另一种是b站前端现在采用的protobuf形式,本项目使用的是protobuf形式的获取方式。
考虑到本项目主要目的是快速下载视频,以及视频的各种附属文件(弹幕,字幕,封面),经过我测试XML接口如果访问过快容易被限流,并且未来可能被b站废弃,初步判断并不适合在本项目中采用。
在目前的下载过程中,会先访问b站弹幕API的view元数据接口,然后解析出弹幕的分片总数,从而并发获取各个分片弹幕文件。因此,在python依赖中添加了 对于弹幕本体,在下载完各个分片后会将其合成为一个二进制文件,经过测试,在弹幕非常多的时候解析这个二进制文件比较耗时,不适合在下载的过程中进行解析,并且这个解析说的是json解析,即使解析好了也不能直接放到本地播放器中使用,所以目前仅下载好所有分片文件,合并后不做任何额外操作,在下载目录下的
作者暂时不知道是否有项目可以高效的将protobuf解析成ASS,各位如果知道可以在下面告诉我,如果有可以引入进来,这样就能在本地播放器中使用了。但是作者自己并不熟悉这两种格式,可能也不是本项目的重点,我可能在未来不会提供这方面的支持
你可以自己解析成json形式保存,我提供了一个方法 from bilix.dm import parse_seg
with open('videos/extra/xxx-弹幕.bin', 'rb') as f:
d = parse_seg(f.read())
print(d)
|
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 1 reply
-
biliass项目或许已经提供了支持👍 不过经过我测试,解析时间长的问题仍然存在 |
Beta Was this translation helpful? Give feedback.
-
版本0.6.5已支持ASS格式的弹幕,基于biliass,并使用进程池在下载的同时进行转换
考虑到弹幕文件较大时,转换属于CPU瓶颈任务,M1芯片转换5MB的一个弹幕文件需要数十秒的时间,因此使用了进程池配合协程,在下载的同时进行转换,充分利用多核cpu资源
在用户中断的情形下,未完成转换的弹幕需要重新进行转换,可能出现视频下载完成了也没转换好的情况,在这种情况下进度条卡在100%并等待转换完成后才开始下一个视频的下载(收到了设置的最大并发数的限制),未来可能对biliass进行一定的修改,支持中断后的继续转换 |
Beta Was this translation helpful? Give feedback.
-
感谢作者的项目,比用浏览器扩展或脚本下载快好多了,弹幕个人还是喜欢转成ass后外挂字幕 |
Beta Was this translation helpful? Give feedback.
-
作者正在新项目上做弹幕转换加速的相关工作 |
Beta Was this translation helpful? Give feedback.
版本0.6.5已支持ASS格式的弹幕,基于biliass,并使用进程池在下载的同时进行转换
考虑到弹幕文件较大时,转换属于CPU瓶颈任务,M1芯片转换5MB的一个弹幕文件需要数十秒的时间,因此使用了进程池配合协程,在下载的同时进行转换,充分利用多核cpu资源
在用户中断的情形下,未完成转换的弹幕需要重新进行转换,可能出现视频下载完成了也没转换好的情况,在这种情况下进度条卡在100%并等待转换完成后才开始下一个视频的下载(收到了设置的最大并发数的限制),未来可能对biliass进行一定的修改,支持中断后的继续转换