hfrost0 / bilix Goto Github PK
View Code? Open in Web Editor NEW⚡️Lightning-fast async download tool for bilibili and more
License: Apache License 2.0
⚡️Lightning-fast async download tool for bilibili and more
License: Apache License 2.0
我发现在Discussions中会更方便一些🧐
Window11
python 3.9.7
bilix 0.10.4
ffmpeg 3.4
终端输入:bilix get_series 'https://www.bilibili.com/video/BV1ts411D7mf' --only-audio
报错:
WARNING GET ValueError 未知异常 url: 'https://www.bilibili.com/video/BV1ts411D7mf'
ValueError: unknown url type: "/'https://www.bilibili.com/video/BV1ts411D7mf'"
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'
您好,请问可以在批量下载视频的同时,爬取对应个视频的数据(如,弹幕数量,播放量,投币数据,视频的url,转发,收藏量..)吗?
并发下载速度刚开始都突破我的带宽上限了,下载确实快,能保证满速,奉上一个小小的star,感谢作者!
我用m1 max macbookpro效果很好,然后macos上有个app叫downie可以下载所有视频网站的视频,我就有点好奇,这个项目能不能扩展成支持所有视频网站或者主要视频平台,那就太方便了,一个命令就能下载,不需要扩展或脚本,速度还满速
下载链接: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
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
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 -…
…
辛苦帮忙看下
想請問可以下載個人收藏夾裡面的影片嗎?如果可以,請提供程式範例,感謝
这个是啥意思,每次下载快完成就会停下来不知道是啥原因
各位如果对这个问题有什么看法可以在这里讨论 🤗
通过分析b站前端js,以及API收集项目中提供的文档(感谢🙏),获取b站弹幕的方式主要有两种方式,一个是旧的XML形式,另一种是b站前端现在采用的protobuf形式,本项目使用的是protobuf形式的获取方式。
考虑到本项目主要目的是快速下载视频,以及视频的各种附属文件(弹幕,字幕,封面),经过我测试XML接口如果访问过快容易被限流,并且未来可能被b站废弃,初步判断并不适合在本项目中采用。
在目前的下载过程中,会先访问b站弹幕API的view元数据接口,然后解析出弹幕的分片总数,从而并发获取各个分片弹幕文件。因此,在python依赖中添加了protobuf
以解析元数据。
对于弹幕本体,在下载完各个分片后会将其合成为一个二进制文件,经过测试,在弹幕非常多的时候解析这个二进制文件比较耗时,不适合在下载的过程中进行解析,并且这个解析说的是json解析,即使解析好了也不能直接放到本地播放器中使用,所以目前仅下载好所有分片文件,合并后不做任何额外操作,在下载目录下的extra
文件夹中可以看到二进制文件xxx-弹幕.bin
。
作者暂时不知道是否有项目可以高效的将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)
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可能出了点问题?返回空的信息
Hello, do we have any way to disable ssl certificate check ?
Thank you
B站的合集和列表似乎是两个东西。
当我在试图下载这个合集https://space.bilibili.com/481361060/channel/seriesdetail?sid=1941597 时报错。
get_collect
无法获取到合集信息,或者应该说是列表?下图是请求示例:
项目使用文档中的示例:
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?
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
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'
(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
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站首页推荐的一个视频举例:
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站改了前端的代码。
另外由于无法请求到图片,因此导致超过重复次数,最终导致抛出异常,甚至连可以正常下载的视频都无法下载。
使用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)
分区获取不完整,显示了一页的子分区,但其实又许多分区
(bilix) D:\python_project\bilix>bilix get_cate 舞蹈 --order click --num 100
ERROR 舞蹈 是主分区,仅支持子分区,试试 ['宅舞', '街舞', '明星舞蹈', '**舞', '舞蹈综合', '舞蹈教程']
初步判断是因为未登录用户在b站只能看480P视频的缘故。
错误原因是因为被反爬了?
当一个投稿有多p被同时下载时,某p的请求可能会出异常。
这时程序会重试请求,当超过重试次数时,整个程序就会退出。
但这个时候其他p的请求并没有出问题,貌似还可以继续下载。
请问能不能让程序只是停止出现异常的视频下载,而不中断整个程序?
会提出这个请求的原因是,b站的HEAD
请求好像总是抽风,然后过一段时间就好了。
但是我的下载总是被某一p的请求失败而打断就很痛苦。
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'
请问如何解决呢?
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'
请问这应该如何修复呢
如题
使用Vox
播放器或其他播放器才可以播放下载的mp3视频,Apple Music 不行
但是 Apple Music 其他 mp3 格式的都可以播放
还有能否将封面和音频合并呢
我没有充值大会员,那我应该到哪去获得大会员cookie呢?
首先非常好用,给 UP 主 一键三连 点赞了
下载合集时能否自动根据名称创建一个文件夹
这样屯视频非常方便,也不需要很复杂的分类,每次一个合集任务放一起就很行
QAQ
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里面写了已经支持了杜比音频,望解惑谢谢
install bilix的方式能否增加homebrew? homebrew更新比较方便,一条命令就把所有库和包都更新到最新,希望大佬能考虑下,谢谢~ lux和you-get都能用Homebrew安装,方便更新版本,希望bilix也能加入brew
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
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
It was only 20 stars yesterday, but it's over 100 today! Waooooooo~~~~~~~~~~
有的用户一般下载 720p 的,现在的情况:
如果有 1080p 的,则需要指定 -q 1,如果只有 720p 以下的,-q 0
能否去除这种不确定性?
比如直接 -q 720
看起来是 cloudflare wall,该如何解决这个问题?
PS:是否考虑引入 selenium ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.