Giter Site home page Giter Site logo

bilix's Introduction

bilix

GitHub license PyPI GitHub commit activity PyPI - Downloads

⚡️Lightning-fast asynchronous download tool for bilibili and more

Features

⚡️ Fast & Async

Asynchronous high concurrency support, controllable concurrency and speed settings.

😉 Lightweight & User-friendly

Lightweight user-friendly CLI with progress notification, focusing on core functionality.

📝 Fully-featured

Submissions, anime, TV Series, video clip, audio, favourite, danmaku ,cover...

🔨 Extensible

Extensible Python module suitable for more download scenarios.

Install

pip install bilix

for macOS, you can also install bilix by brew

brew install bilix

Usage Example

  • If you prefer to use command line interface (cli)
bilix v 'url'

v is a method short alias for get_video

  • If you prefer to code with python
from bilix.sites.bilibili import DownloaderBilibili
import asyncio


async def main():
    async with DownloaderBilibili() as d:
        await d.get_video('url')


asyncio.run(main())

Community

If you find any bugs or other issues, feel free to raise an Issue.

If you have new ideas or new feature requests👍,welcome to participate in the Discussion

If you find this project helpful, you can support the author by Star🌟

Contribute

❤️ Welcome! Details can be found in Contributing

bilix's People

Contributors

boholder avatar chenrui333 avatar cncws avatar evil0ctal avatar hfrost0 avatar journey-ad avatar linbuxiao avatar overflowcat avatar yushiro avatar yzqzss avatar zivgogogo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bilix's Issues

Version 0.8.2无法更新

旧版本0.7.2下运行更新命令pip install click bilix --upgrade,无法更新,提示错误,尝试卸载:pip uninstall bilix后,运行:
pip install bilix安装,提示同样错误。也尝试过卸载python重新安装新版本的Python,重启PC,问题依旧。安装旧版本使用没问题,pip install bilix==0.7.2使用正常,安装0.8版本时均无法安装。
Snipaste_2022-08-20_21-10-06
Snipaste_2022-08-20_21-10-23
Snipaste_2022-08-20_21-10-41

TikTok currently unavailable

In tiktok api

    res = await req_retry(
        client, f'https://api-h2.tiktokv.com/aweme/v1/feed/?aweme_id={key}&version_code=2613&aid=1180')
>>> res.text
''

@Evil0ctal
API可能出了点问题?返回空的信息

关于多P下载时的异常处理

当一个投稿有多p被同时下载时,某p的请求可能会出异常。
这时程序会重试请求,当超过重试次数时,整个程序就会退出。
但这个时候其他p的请求并没有出问题,貌似还可以继续下载。
请问能不能让程序只是停止出现异常的视频下载,而不中断整个程序?

会提出这个请求的原因是,b站的HEAD请求好像总是抽风,然后过一段时间就好了。
但是我的下载总是被某一p的请求失败而打断就很痛苦。

下载bilibili收藏夹报错:KeyError:'data'

bilix 0.10.4,下载bilibili收藏夹报错:KeyError:'data'
下载单个视频没问题

E:\videos>bilix get_favour 'https://space.bilibili.com/37856001/favlist?fid=1740742701'

Traceback (most recent call last):
  File "E:\anaconda3\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "E:\anaconda3\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\anaconda3\Scripts\bilix.exe\__main__.py", line 7, in <module>
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "E:\anaconda3\lib\site-packages\bilix\__main__.py", line 301, in main
    loop.run_until_complete(cor)
  File "E:\anaconda3\lib\asyncio\base_events.py", line 647, in run_until_complete
    return future.result()
  File "E:\anaconda3\lib\site-packages\bilix\download\downloader_bilibili.py", line 179, in get_favour
    fav_name, up_name, total_size, bvids = await api.get_favour_page_info(self.client, url_or_fid, keyword=keyword)
  File "E:\anaconda3\lib\site-packages\bilix\api\bilibili.py", line 95, in get_favour_page_info
    data = json.loads(res.text)['data']
KeyError: 'data'

关于弹幕,各位可以在这里讨论

各位如果对这个问题有什么看法可以在这里讨论 🤗

通过分析b站前端js,以及API收集项目中提供的文档(感谢🙏),获取b站弹幕的方式主要有两种方式,一个是旧的XML形式,另一种是b站前端现在采用的protobuf形式,本项目使用的是protobuf形式的获取方式。

  • 有一些项目可以直接将XML格式的弹幕转换成ASS格式的字幕,为什么下载不用XML形式的弹幕?

考虑到本项目主要目的是快速下载视频,以及视频的各种附属文件(弹幕,字幕,封面),经过我测试XML接口如果访问过快容易被限流,并且未来可能被b站废弃,初步判断并不适合在本项目中采用。

  • protobuf解析

在目前的下载过程中,会先访问b站弹幕API的view元数据接口,然后解析出弹幕的分片总数,从而并发获取各个分片弹幕文件。因此,在python依赖中添加了protobuf以解析元数据。

对于弹幕本体,在下载完各个分片后会将其合成为一个二进制文件,经过测试,在弹幕非常多的时候解析这个二进制文件比较耗时,不适合在下载的过程中进行解析,并且这个解析说的是json解析,即使解析好了也不能直接放到本地播放器中使用,所以目前仅下载好所有分片文件,合并后不做任何额外操作,在下载目录下的extra文件夹中可以看到二进制文件xxx-弹幕.bin

  • 未来会提供protobuf解析成ASS的方式吗?

作者暂时不知道是否有项目可以高效的将protobuf解析成ASS,各位如果知道可以在下面告诉我,如果有可以引入进来,这样就能在本地播放器中使用了。但是作者自己并不熟悉这两种格式,可能也不是本项目的重点,我可能在未来不会提供这方面的支持

  • 目前能对拿到的bin文件做些什么事情

你可以自己解析成json形式保存,我提供了一个方法

from bilix.dm import parse_seg

with open('videos/extra/xxx-弹幕.bin', 'rb') as f:
    d = parse_seg(f.read())
print(d)

Feature: 下载合集的文件夹输出问题

首先非常好用,给 UP 主 一键三连 点赞了

下载合集时能否自动根据名称创建一个文件夹

这样屯视频非常方便,也不需要很复杂的分类,每次一个合集任务放一起就很行

QAQ

jable 视频不能下载

bilix 已经更新到最新 Version 0.10.1

$ bilix v https://jable.tv/videos/ssis-448/

Traceback (most recent call last):
  File "/usr/local/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/bilix/__main__.py", line 301, in main
    loop.run_until_complete(cor)
  File "/usr/local/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.10/site-packages/bilix/download/downloader_jable.py", line 17, in get_video
    video_info = await api.get_video_info(self.client, url)
  File "/usr/local/lib/python3.10/site-packages/bilix/api/jable.py", line 35, in get_video_info
    model_name = soup.find("span", class_="placeholder rounded-circle")['title']
TypeError: 'NoneType' object is not subscriptable

分区获取不全

分区获取不完整,显示了一页的子分区,但其实又许多分区

(bilix) D:\python_project\bilix>bilix get_cate 舞蹈 --order click --num 100
ERROR    舞蹈 是主分区,仅支持子分区,试试 ['宅舞', '街舞', '明星舞蹈', '**舞', '舞蹈综合', '舞蹈教程']

文件名超长

WARNING  STREAM Unexpected Exception class:OSError [Errno 36] Filename too long:
         'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零  
         学会Java                                                               
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/  
         马士兵主讲:JVM真的不难!从零学会Java                                  
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-  
         P34-程序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流 
         !-audio-0-458303'                                                     
Traceback (most recent call last):
  File "/app/main.py", line 36, in <module>
    schedule.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 780, 
in run_pending
    default_scheduler.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 100, 
in run_pending
    self._run_job(job)
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 172, 
in _run_job
    ret = job.run()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 661, 
in run
    ret = self.job_func()
  File "/app/main.py", line 25, in job
    asyncio.run(main())
  File "/usr/local/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.9/asyncio/base_events.py", line 642, in 
run_until_complete
    return future.result()
  File "/app/main.py", line 19, in main
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 197, in get_favour
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 210, in _get_favor_by_page
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 365, in get_series
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 431, in get_video
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 70, in get_media
    file_list = await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 98, in _get_media_part
    async with aiofiles.open(file_path, 'ab') as f:
  File "/usr/local/lib/python3.9/site-packages/aiofiles/base.py", line 78, in 
__aenter__
    self._obj = await self._coro
  File "/usr/local/lib/python3.9/site-packages/aiofiles/threadpool/__init__.py",
line 80, in _open
    f = yield from loop.run_in_executor(executor, cb)
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
OSError: [Errno 36] Filename too long: 
'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/马士兵主讲 
JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-P34-程
序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流程就永远不变!-a
58303'
马士兵主讲:JVM真的不难!从...向未来,学习路线指引与职业规划 100.0% ╸ … … ETA 0…
                                                                      … …       
马士兵主讲:JVM真的不难!从...体系存在,这个流程就永远不变!  0.0%  ━ … ? ETA -…
                                                                      …   

辛苦帮忙看下

ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635)

使用get_series 下载的时候经常会报这个错误,调低并发数也会报同样的错误。
使用get_video下载报错的单个视频时,没有再报错。
下载命令如下,不不知道能不能复现:
bilix s https://www.bilibili.com/video/BV1hS4y1m7Ma --dir /mnt/e/tmp --subtitle --max-con 20

异常信息如下:

Traceback (most recent call last):
  File "/home/liy/.local/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 249, in main
    asyncio.run(download(**kwargs))
  File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 135, in download
    await d.get_series(key, quality=quality,
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 287, in get_series
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 360, in get_video
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 492, in _get_media
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 512, in _get_media_part
    async for chunk in r.aiter_bytes():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1680, in aiter_bytes
    async for raw_bytes in self.aiter_raw():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1734, in aiter_raw
    async for raw_stream_bytes in self.stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_client.py", line 145, in __aiter__
    async for chunk in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_transports/default.py", line 239, in
__aiter__
    async for part in self._httpcore_stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/connection_pool.py", line 346, in
__aiter__
    async for part in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 295, in __aiter__
    raise exc
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 288, in __aiter__
    async for chunk in self._connection._receive_response_body(**kwargs):
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 160, in
_receive_response_body
    event = await self._receive_event(timeout=timeout)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 172, in
_receive_event
    data = await self._network_stream.read(
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/backends/asyncio.py", line 31, in read
    return await self._stream.receive(max_bytes=max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 171, in receive
    data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 108, in
_call_sslobject_method
    result = func(*args)
  File "/usr/lib/python3.8/ssl.py", line 888, in read
    v = self._sslobj.read(len)
ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635)

下载时,HEAD 404异常

bilix 版本

image

下载命令

bilix s https://www.bilibili.com/video/BV1kt411k7A3 --dir E:\tmp --max-con 20

问题描述

重复执行上述命令总是报下方相同的异常,无法定位是某一p的地址404或者是某个分片404。也无法知道是不是我本地的网络导致的问题。

异常信息

Traceback (most recent call last):
  File "c:\python38\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\python38\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "c:\users\showt\.local\bin\bilix.exe\__main__.py", line 7, in <module>
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\_cli.py", line 268, in main
    loop.run_until_complete(task)
  File "c:\python38\lib\asyncio\base_events.py", line 616, in run_until_complete
    return future.result()
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 371, in get_series
    await asyncio.gather(*cors)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 441, in get_video
    await asyncio.gather(*cors)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 577, in _get_media
    res = await self._req(media_urls[0], method='HEAD')
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 545, in _req
    res.raise_for_status()
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\httpx\_models.py", line 1510, in raise_for_status
    raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: Client error '404 Not Found' for url 'https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/16/18/76821816/76821816-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1653679938&gen=playurlv2&os=cosbv&oi=1885228412&trid=fd2cf300307c48e6aa28300fe24ec4d6u&platform=pc&upsig=ec230dd69a0462df746fde23b8ef006e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=139942&logo=80000000'
For more information check: https://httpstatuses.com/404

收藏夾

想請問可以下載個人收藏夾裡面的影片嗎?如果可以,請提供程式範例,感謝

install bilix的方式能否增加homebrew?

install bilix的方式能否增加homebrew? homebrew更新比较方便,一条命令就把所有库和包都更新到最新,希望大佬能考虑下,谢谢~ lux和you-get都能用Homebrew安装,方便更新版本,希望bilix也能加入brew

Apple Music 无法播放下载的音频

使用Vox播放器或其他播放器才可以播放下载的mp3视频,Apple Music 不行
但是 Apple Music 其他 mp3 格式的都可以播放
还有能否将封面和音频合并呢

格式输入正确但仍不能下载杜比音频格式的视频

jialiang@jiadeMacBook-Pro ~ % bilix info https://www.bilibili.com/video/BV1wY411d7wi
[4K 杜比7.1] 小さなてのひら(小小的手心)-riya麻枝准 Voicemeeter+Logic
Pro重混音 音频可视化 5,199👀 367👍 173🪙
┣━━ 画面 Video
┃ ┣━━ 4K 超清
┃ ┃ ┣━━ codec: avc1.640034 total: 31.48MB
┃ ┃ ┗━━ codec: av01.0.13M.08.0.110.01.01.01.0 total: 20.40MB
┃ ┣━━ 1080P 60帧
┃ ┃ ┣━━ codec: avc1.640032 total: 10.97MB
┃ ┃ ┗━━ codec: av01.0.09M.08.0.110.01.01.01.0 total: 6.13MB
┃ ┣━━ 1080P 高清
┃ ┃ ┣━━ codec: avc1.640032 total: 8.27MB
┃ ┃ ┗━━ codec: av01.0.08M.08.0.110.01.01.01.0 total: 5.45MB
┃ ┣━━ 720P 高清
┃ ┃ ┣━━ codec: avc1.640028 total: 5.05MB
┃ ┃ ┗━━ codec: av01.0.05M.08.0.110.01.01.01.0 total: 3.26MB
┃ ┣━━ 480P 清晰
┃ ┃ ┣━━ codec: avc1.64001F total: 2.98MB
┃ ┃ ┗━━ codec: av01.0.04M.08.0.110.01.01.01.0 total: 1.97MB
┃ ┗━━ 360P 流畅
┃ ┣━━ codec: avc1.64001E total: 2.13MB
┃ ┗━━ codec: av01.0.01M.08.0.110.01.01.01.0 total: 1.55MB
┗━━ 声音 Audio
┣━━ 默认音质
┃ ┗━━ codec: mp4a.40.2 total: 6.76MB
┗━━ 杜比全景声 Dolby
┗━━ codec: ec-3 total: 59.16MB

jialiang@jiadeMacBook-Pro ~ % bilix v https://www.bilibili.com/video/BV1wY411d7wi --codec hev:ec-3
WARNING [4K 杜比7.1] 小さなてのひら(小小的手心)-riya麻枝准 Voicemeeter+Logic
Pro重混音 音频可视化 清晰度<0>
编码hev:ec-3不可用,请检查输入是否正确或是否需要大会员

请问下这是什么原因呢,我看readme里面写了已经支持了杜比音频,望解惑谢谢

unhandled exception during asyncio.run() shutdown

下载链接:https://www.bilibili.com/video/BV1JP4y1K774

unhandled exception during asyncio.run() shutdown
task: <Task finished name='Task-1813' coro=<Downloader._get_media() done, defined at
/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py:336>
exception=LocalProtocolError('Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED')>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 224,
in process_input
func, target_state = self.transitions[(self.state, input)]
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 111, in handle_async_request
status, headers = await self._receive_response(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 228, in _receive_response
event = await self._receive_stream_event(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 259, in _receive_stream_event
await self._receive_events(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 278, in _receive_events
events = await self._read_incoming_data(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 340, in _read_incoming_data
events = self._h2_state.receive_data(data)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1463,
in receive_data
events.extend(self._receive_frame(frame))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1487,
in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1673,
in _receive_data_frame
events = self.state_machine.process_input(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 228,
in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 60, in map_httpcore_exceptions
yield
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 253, in handle_async_request
raise exc
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 237, in handle_async_request
response = await connection.handle_async_request(request)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http_proxy.py", line
310, in handle_async_request
return await self._connection.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 141, in handle_async_request
raise LocalProtocolError(exc) # pragma: nocover
httpcore.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 349, in _get_media
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 366, in _get_media_part
async with self.client.stream("GET", random.choice(media_urls),
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 199, in aenter
return await anext(self.gen)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1549,
in stream
response = await self.send(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1593,
in send
response = await self._send_handling_auth(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1621,
in _send_handling_auth
response = await self._send_handling_redirects(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1658,
in _send_handling_redirects
response = await self._send_single_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1695,
in _send_single_request
response = await transport.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 352, in handle_async_request
with map_httpcore_exceptions():
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 224,
in process_input
func, target_state = self.transitions[(self.state, input)]
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 111, in handle_async_request
status, headers = await self._receive_response(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 228, in _receive_response
event = await self._receive_stream_event(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 259, in _receive_stream_event
await self._receive_events(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 278, in _receive_events
events = await self._read_incoming_data(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 340, in _read_incoming_data
events = self._h2_state.receive_data(data)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1463,
in receive_data
events.extend(self._receive_frame(frame))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1487,
in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1673,
in _receive_data_frame
events = self.state_machine.process_input(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 228,
in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 60, in map_httpcore_exceptions
yield
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 253, in handle_async_request
raise exc
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 237, in handle_async_request
response = await connection.handle_async_request(request)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http_proxy.py", line
310, in handle_async_request
return await self._connection.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 141, in handle_async_request
raise LocalProtocolError(exc) # pragma: nocover
httpcore.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/bili_cmd.py", line 56, in
asyncio.run(main(parser.parse_args()))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 646, in
run_until_complete
return future.result()
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/bili_cmd.py", line 9, in main
await d.get_series(args.key, quality=args.q, image=args.image)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 255, in get_series
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 309, in get_video
await asyncio.gather(
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 349, in _get_media
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 366, in _get_media_part
async with self.client.stream("GET", random.choice(media_urls),
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 199, in aenter
return await anext(self.gen)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1549,
in stream
response = await self.send(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1593,
in send
response = await self._send_handling_auth(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1621,
in _send_handling_auth
response = await self._send_handling_redirects(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1658,
in _send_handling_redirects
response = await self._send_single_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1695,
in _send_single_request
response = await transport.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 352, in handle_async_request
with map_httpcore_exceptions():
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

我不能下载合集和列表的视频

input:
bilix col 'https://space.bilibili.com/698029620/channel/seriesdetail\?sid\=254092' --dir ~/Downloads --only-audio

output:
Traceback (most recent call last): File "/opt/homebrew/bin/bilix", line 8, in <module> sys.exit(main()) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "/opt/homebrew/lib/python3.9/site-packages/bilix/_cli.py", line 268, in main loop.run_until_complete(task) File "/opt/homebrew/Cellar/[email protected]/3.9.13_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete return future.result() File "/opt/homebrew/lib/python3.9/site-packages/bilix/download.py", line 86, in get_collect_or_list sid = re.search(r'sid=(\d+)', url).groups()[0] AttributeError: 'NoneType' object has no attribute 'groups'
请问如何解决呢?

version 0.8.6下载视频后自动删除

使用最新版0.8.6版本尝试下载bilibili视频,能出现下载框,下载过程中,有缓存文件,下载结束后自动删除全部文件,也没有合并文件。上一版本正常下载。
Snipaste_2022-08-22_19-02-42
Snipaste_2022-08-22_19-03-11

报错:Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

python:3.11.0
执行:bilix --cookie xxx get_series https://www.bilibili.com/video/BV1MP4y1D7s8/
报错:
WARNING STREAM Unexpected Exception class:ProtocolError Invalid input ConnectionInputs.RECV_DATA in state
ConnectionState.CLOSED
Traceback (most recent call last):
File "C:\Python311\Lib\site-packages\h2\connection.py", line 224, in process_input
func, target_state = self.transitions[(self.state, input)]
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in run_code
File "C:\Python311\Scripts\bilix.exe_main
.py", line 7, in
File "C:\Python311\Lib\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\bilix_main
.py", line 322, in main
loop.run_until_complete(cor)
File "C:\Python311\Lib\asyncio\base_events.py", line 650, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\bilix\download\downloader_bilibili.py", line 365, in get_series
await asyncio.gather(*cors)
File "C:\Python311\Lib\site-packages\bilix\download\downloader_bilibili.py", line 431, in get_video
await asyncio.gather(*cors)
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader_part.py", line 70, in get_media
file_list = await asyncio.gather(*cors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\contextlib.py", line 222, in aexit
await self.gen.athrow(typ, value, traceback)
File "C:\Python311\Lib\site-packages\httpx_client.py", line 1583, in stream
yield response
File "C:\Python311\Lib\contextlib.py", line 222, in aexit
await self.gen.athrow(typ, value, traceback)
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader.py", line 100, in _stream_context
yield
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader_part.py", line 99, in _get_media_part
async for chunk in r.aiter_bytes(chunk_size=self.chunk_size):
File "C:\Python311\Lib\site-packages\httpx_models.py", line 923, in aiter_bytes
async for raw_bytes in self.aiter_raw():
File "C:\Python311\Lib\site-packages\httpx_models.py", line 981, in aiter_raw
async for raw_stream_bytes in self.stream:
File "C:\Python311\Lib\site-packages\httpx_client.py", line 147, in aiter
async for chunk in self._stream:
File "C:\Python311\Lib\site-packages\httpx_transports\default.py", line 239, in aiter
async for part in self._httpcore_stream:
File "C:\Python311\Lib\site-packages\httpcore_async\connection_pool.py", line 346, in aiter
async for part in self._stream:
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 468, in aiter
raise exc
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 459, in aiter
async for chunk in self._connection._receive_response_body(
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 249, in _receive_response_body
event = await self._receive_stream_event(request, stream_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 262, in _receive_stream_event
await self._receive_events(request, stream_id)
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 283, in _receive_events
events = await self._read_incoming_data(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 345, in _read_incoming_data
events: typing.List[h2.events.Event] = self._h2_state.receive_data(data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1463, in receive_data
events.extend(self._receive_frame(frame))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1487, in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1673, in _receive_data_frame
events = self.state_machine.process_input(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 228, in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

未知异常<class 'ssl.SSLError'>

原始下载命令:

bilix get_series 'https://www.bilibili.com/video/BV1p3411J7CE?spm_id_from=333.999.0.0' 

报错信息如下:

警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
超过重复次数 https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_
YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1653043143&gen=
playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,
platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
Traceback (most recent call last):
  File "/Users/peakchao/Code/Python/bilix/venv/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/_cli.py", line 268, in main
    loop.run_until_complete(task)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 371, in get_series
    await asyncio.gather(*cors)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 441, in get_video
    await asyncio.gather(*cors)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 577, in _get_media
    res = await self._req(media_urls[0], method='HEAD')
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 544, in _req
    raise Exception('超过重复次数')
Exception: 超过重复次数

备注:换过几个视频都会出这个错误,反复执行下载命令,同样会因为这个错误中断。

下载合集的疑问?

B站的合集和列表似乎是两个东西。

当我在试图下载这个合集https://space.bilibili.com/481361060/channel/seriesdetail?sid=1941597 时报错。
get_collect无法获取到合集信息,或者应该说是列表?下图是请求示例:
image

项目使用文档中的示例:

630是合集id,如果要知道一个合集的id是什么,最简单的办法是在该合集详情页的url找到sid参数,例如 https://space.bilibili.com/369750017/channel/collectiondetail?sid=630

这个630是可以在get_collect使用的api https://api.bilibili.com/x/space/fav/season/list 正常获取合集信息。

@HFrost0 另外,我想请问你的api是在哪获取的,我在 bilibili-API-collect 这个项目中没有查到get_collect中所使用的api?

基于相同的技术有可能做成downie那样所有视频网站都能下载吗

并发下载速度刚开始都突破我的带宽上限了,下载确实快,能保证满速,奉上一个小小的star,感谢作者!
我用m1 max macbookpro效果很好,然后macos上有个app叫downie可以下载所有视频网站的视频,我就有点好奇,这个项目能不能扩展成支持所有视频网站或者主要视频平台,那就太方便了,一个命令就能下载,不需要扩展或脚本,速度还满速

发现一个虫

OSError: [Errno 36] File name too long: '/mnt/e/tmp//extra/【Udemy付费课程】Node JS 高级概念-进阶课程 学习使用 Redis
进行缓存,通过集群加速,使用 S3 和 Node 添加图片上传!(中英文字幕)-P80-082 Solving Authentication Issues with
Automation Testing-英语(美国).srt'

B站下载报错

File "d:\study\language\python\software\python-3.9\lib\site-packages\bilix\api\bilibili.py", line 144, in get_up_info
up_name = info['data']['list']['vlist'][0]['author']
KeyError: 'data'

请问这应该如何修复呢

Bug: 命令行的输入及输出显示

首先参数不知道怎么弄,按照多年 CV 经验,有以下几种方法,或许需要一个 example

bilix -cookie "xxxxx"
bilix -cookie="xxxx"
bilix -cookie SEEDATE=xxxxx

然后就是输出问题,可以像包管理器一样的 y/n 确认就更好了

我这里好像还有个 bug 终端不能原地刷新了

image

Win1021H2+PowerShell+新版微软终端

感觉都是无关紧要的小细节 XD

get_up() RuntimeError: Event loop is closed

(BilibiliDownloadEnv) D:\Downloads\Lighting-bilibili-download-0.3.2>python bili_cmd.py get_up 'xxx' -num 10
Traceback (most recent call last):
File "D:\Downloads\Lighting-bilibili-download-0.3.2\bili_cmd.py", line 63, in
asyncio.run(main(parser.parse_args()))
File "D:\Program Files\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
return future.result()
File "D:\Downloads\Lighting-bilibili-download-0.3.2\bili_cmd.py", line 15, in main
await d.get_up_videos(
File "D:\Downloads\Lighting-bilibili-download-0.3.2\lighting_downloader.py", line 195, in get_up_videos
total = min(info['data']['page']['count'], total)
KeyError: 'data'
Exception ignored in: <function _ProactorBasePipeTransport.del at 0x0000017215A7E5F0>
Traceback (most recent call last):
File "D:\Program Files\Python310\lib\asyncio\proactor_events.py", line 116, in del
File "D:\Program Files\Python310\lib\asyncio\proactor_events.py", line 108, in close
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 750, in call_soon
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 515, in _check_closed
RuntimeError: Event loop is closed

testError

image
你好,我在运行 pytest tests/api 时候出现了如上错误

即使挂了全局代理,也不能下载港澳台区的番剧

bilix get_video https://www.bilibili.com/bangumi/play/ep398594 --cookie ************************
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
ERROR GET 超过重复次数 https://www.bilibili.com/bangumi/play/ep398594

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 130, in _call_sslobject_method
result = func(*args)
File "C:\Program Files\Python310\lib\ssl.py", line 974, in do_handshake
self._sslobj.do_handshake()
ssl.SSLSyscallError: Some I/O error occurred (_ssl.c:997)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\httpcore_exceptions.py", line 10, in map_exceptions
yield
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 76, in start_tls
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 67, in start_tls
ssl_stream = await anyio.streams.tls.TLSStream.wrap(
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 122, in wrap
await wrapper._call_sslobject_method(ssl_object.do_handshake)
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 151, in _call_sslobject_method
raise BrokenResourceError from exc
anyio.BrokenResourceError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 60, in map_httpcore_exceptions
yield
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection_pool.py", line 253, in handle_async_request
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection_pool.py", line 237, in handle_async_request
response = await connection.handle_async_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\http_proxy.py", line 258, in handle_async_request
connect_response = await self._connection.handle_async_request(
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 86, in handle_async_request
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 63, in handle_async_request
stream = await self._connect(request)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 150, in _connect
stream = await stream.start_tls(**kwargs)
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 64, in start_tls
with map_exceptions(exc_map):
File "C:\Program Files\Python310\lib\contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "C:\Program Files\Python310\lib\site-packages\httpcore_exceptions.py", line 14, in map_exceptions
raise to_exc(exc)
httpcore.ConnectError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python310\lib\runpy.py", line 86, in run_code
exec(code, run_globals)
File "C:\Program Files\Python310\Scripts\bilix.exe_main
.py", line 7, in
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\bilix_main
.py", line 322, in main
loop.run_until_complete(cor)
File "C:\Program Files\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete
return future.result()
File "C:\Program Files\Python310\lib\site-packages\bilix\download\downloader_bilibili.py", line 387, in get_video
video_info = await api.get_video_info(self.client, url)
File "C:\Program Files\Python310\lib\site-packages\bilix\api\bilibili.py", line 173, in get_video_info
res = await req_retry(client, url, follow_redirects=True)
File "C:\Program Files\Python310\lib\site-packages\bilix\utils.py", line 46, in req_retry
raise pre_exc
File "C:\Program Files\Python310\lib\site-packages\bilix\utils.py", line 28, in req_retry
res = await client.request(method, url, follow_redirects=follow_redirects, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1533, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1620, in send
response = await self._send_handling_auth(
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1648, in _send_handling_auth
response = await self._send_handling_redirects(
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1685, in _send_handling_redirects
response = await self._send_single_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1722, in _send_single_request
response = await transport.handle_async_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 352, in handle_async_request
with map_httpcore_exceptions():
File "C:\Program Files\Python310\lib\contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError

Version 0.8.3下载bilibili视频出现问题

测试了新版本Version 0.8.3下载bilibili视频时,下载到一半时出现进程错误,尝试卸载新版本,重新安装0.7.2版本没有问题,视频可以正常下载完,应该是新版本问题,望解决
Snipaste_2022-08-20_22-03-14
Snipaste_2022-08-20_22-05-57
Snipaste_2022-08-20_22-12-17

NICE

It was only 20 stars yesterday, but it's over 100 today! Waooooooo~~~~~~~~~~

关于视频中的附属数据下载

您好,请问可以在批量下载视频的同时,爬取对应个视频的数据(如,弹幕数量,播放量,投币数据,视频的url,转发,收藏量..)吗?

B站前端代码更改导致无法下载封面,进而导致下载整体失败?

以我的b站首页推荐的一个视频举例:
bilix v 'https://www.bilibili.com/video/BV1KK411Z7m1' --image
会提示错误信息
WARNING GET ValueError 未知异常 url: //i1.hdslb.com/bfs/archive/c84c0d409451ce5cf6c379156b5d6d2122dc9ed7.jpg@100w_100h_1c.png
ERROR 超过重复次数 //i1.hdslb.com/bfs/archive/c84c0d409451ce5cf6c379156b5d6d2122dc9ed7.jpg@100w_100h_1c.png

我没注意过之前封面的url格式,但现在的这个url没有指定协议,另外即使用HTTP请求到了也只是一个100*100的图片,@前面的才是原图。而代码里好像没见到有对这部分的处理,因此猜测可能是b站改了前端的代码。
另外由于无法请求到图片,因此导致超过重复次数,最终导致抛出异常,甚至连可以正常下载的视频都无法下载。

--quality 直接指定画质?

有的用户一般下载 720p 的,现在的情况:

如果有 1080p 的,则需要指定 -q 1,如果只有 720p 以下的,-q 0

能否去除这种不确定性?

比如直接 -q 720

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.