Skip to main content

⚡️快如闪电的b站视频下载工具,基于Python现代Async异步特性,高速批量下载整部动漫,电视剧,电影,up投稿等

Project description

bilix

GitHub license PyPI GitHub commit activity PyPI - Downloads

⚡️快如闪电的 bilibili 视频下载工具,基于 Python 现代 Async 异步特性,高速批量下载整部动漫,电视剧,电影,up投稿...

⚡️在200M宽带中实测可以拉满网速

特性 Features

高性能,高并发,Asynchronous everywhere,得益于Python对于协程的支持,以及现代 Async HTTP 框架 httpx

  • 完整的高并发异步下载支持
  • 可控的并发量和速度设置
  • 友好的CLI及进度显示
  • 可扩展的Python模块适应更多下载场景

依赖环境 Environment

  1. pip安装(需要python3.8及以上)
pip install bilix
  1. FFmpeg :一个命令行视频工具,用于合成下载的音频和视频

    • macOS 下可以通过brew install ffmpeg进行安装。
    • Windows 下载请至官网 https://ffmpeg.org/download.html#build-windows ,安装好后需要配置环境变量。
    • 最终确保在命令行中可以调用ffmpeg命令即可。

快速上手 Quick Start

bilix提供了简单的命令行使用方式,打开终端开始下载吧~

批量下载

批量下载整部动漫,电视剧,纪录片,电影,up投稿.....只需要把命令中的url替换成你要下载的系列中任意一个视频的网页链接。
到 bilibili 上找一个来试试吧~,比如这个李宏毅老师的机器学习视频:链接

bilix get_series 'url'

get_series很强大,会自动识别系列所有视频并下载,当然,如果该系列只有一个视频(比如单p投稿)也是可以正常下载的。

bilix会下载文件至命令行当前目录的videos文件夹中,默认自动创建。

💡在终端中要用''将包含参数的url包住,而在windows的命令提示符不支持'',可用powershell或windows terminal代替。

💡什么是一个系列:比如一个多p投稿的所有p,一部动漫的所有集。

单个下载

用户😨:我不想下载那么多,只想下载单个视频。没问题,试试这个,只需要提供那个视频的网页链接:

bilix get_video 'url'

下载音频

假设你喜欢音乐区,只想下载音频,那么可以使用可选参数--only-audio,例如下面是下载A叔 一个钢琴曲合集音频的例子

bilix get_series 'https://www.bilibili.com/video/BV1ts411D7mf' --only-audio

下载特定up主的投稿

假设你是一个嘉心糖,想要下载嘉然小姐最新投稿的100个视频,那么你可以使用命令:

bilix get_up 'https://space.bilibili.com/672328094' --num 100

https://space.bilibili.com/672328094 是up空间页url,另外用up主id672328094替换url同样也是可以的

下载分区视频

假设你喜欢看舞蹈区👍,想要下载最近30天播放量最高的20个超级敏感宅舞视频,那么你可以使用

bilix get_cate 宅舞 --keyword 超级敏感 --order click --num 20 --days 30

get_cate支持b站的每个子分区,可以使用排序,关键词搜索等,详细请参考bilix -h或代码注释

下载收藏夹视频

如果你需要下载自己或者其他人收藏夹中的视频,你可以使用get_favour方法

bilix get_favour 'https://space.bilibili.com/11499954/favlist?fid=1445680654' --num 20

https://space.bilibili.com/11499954/favlist?fid=1445680654 是收藏夹url,如果要知道一个收藏夹的url是什么, 最简单的办法是在b站网页左侧列表中点击切换到该收藏夹,url就会出现在浏览器的地址栏中。另外直接使用url中的fid1445680654 替换url也是可以的。

下载合集或视频列表

如果你需要下载up主发布的合集或视频列表,你可以使用get_collect方法

bilix get_collect 'url'

url 替换为某个合集或视频列表详情页的url(例如这个 )即可下载合集或列表内所有视频

💡合集和视频列表有什么区别?b站的合集可以订阅,列表则没有这个功能,但是他们都在up主空间页面的合集和列表菜单中,例如这个get_collect则会根据详情页url中的信息判断这个链接是合集还是列表

下载字幕,弹幕,封面...

在命令中加入可选参数--subtitle(字幕) --dm(弹幕) --image(封面),即可下载这些附属文件

bilix get_series 'url' --subtitle --dm --image

进阶使用 Advance Guide

请使用bilix -h查看更多参数提示,包括方法名简写,视频画面质量选择,并发量控制,下载速度限制,下载目录等。

方法名简写

觉得get_series,get_video这些方法名写起来太麻烦了?同感!你可以使用他们的简写,这样快多了:

bilix s 'url'
bilix v 'url'
...

你是大会员?🥸

请在--cookie参数中填写浏览器缓存的SESSDATAcookie,填写后可以下载需要大会员的视频,也就是说,你先得是大会员才能下哦~

如果你总是需要附加--cookie参数,可以使用alias命令,例如alias bilix=/.../python -m bilix --cookie xxxxxxxx

画质,音质和编码选择

你可以使用--quality-q参数选择画面分辨率,bilix支持两种不同的选择方式:

  • 相对选择(默认)

    bilix在默认情况下会为你选择可选的最高画质进行下载(即-q 0),如果你想下载第二清晰的可使用-q 1进行指定,以此类推,指定序号越大画质越低, 当超过可选择范围时,默认选择到最低画质,例如你总是可以通过-q 999来选择到最低画质。

  • 绝对选择

    在某些时候,你只希望下载720P的视频,但是720P在相对选择中并不总是处于固定的位置,这在下载收藏夹,合集等等场景中经常出现。 另外有可能你就是喜欢通过-q 1080P这样的方式来指定画质。 没问题,bilix同时也支持通过-q 4K -q '1080P 高码率'等字符串的形式来直接指定画质,字符串为b站显示的画质名称的子串即可。

在更加专业用户的需求中,可能需要指定特定的视频编码进行下载,而b站支持的编码在网页或app中是不可见的,bilix为此设计了方法info , 通过它你可以完全了解该视频的所有信息:

bilix info 'https://www.bilibili.com/video/BV1kG411t72J' --cookie 'xxxxx' 
                        
 【4K·HDR·Hi-Res】群青 - YOASOBI  33,899👀 1,098👍 201🪙
┣━━ 画面 Video
┃   ┣━━ HDR 真彩
┃      ┗━━ codec: hev1.2.4.L153.90                 total: 149.86MB
┃   ┣━━ 4K 超清
┃      ┣━━ codec: avc1.640034                      total: 320.78MB
┃      ┗━━ codec: hev1.1.6.L153.90                 total: 106.54MB
┃   ┣━━ 1080P 60帧
┃      ┣━━ codec: avc1.640032                      total: 171.91MB
┃      ┗━━ codec: hev1.1.6.L150.90                 total: 24.66MB
┃   ┣━━ 1080P 高清
┃      ┣━━ codec: avc1.640032                      total: 86.01MB
┃      ┗━━ codec: hev1.1.6.L150.90                 total: 24.18MB
┃   ┣━━ 720P 高清
┃      ┣━━ codec: avc1.640028                      total: 57.39MB
┃      ┗━━ codec: hev1.1.6.L120.90                 total: 11.53MB
┃   ┣━━ 480P 清晰
┃      ┣━━ codec: avc1.64001F                      total: 25.87MB
┃      ┗━━ codec: hev1.1.6.L120.90                 total: 7.61MB
┃   ┗━━ 360P 流畅
┃       ┣━━ codec: hev1.1.6.L120.90                 total: 5.24MB
┃       ┗━━ codec: avc1.64001E                      total: 11.59MB
┗━━ 声音 Audio
    ┣━━ 默认音质
       ┗━━ codec: mp4a.40.2                        total: 10.78MB
    ┗━━ Hi-Res无损
        ┗━━ codec: fLaC                             total: 94.55MB

看上去不错😇,那么我要怎么才能下到指定编码的视频呢?

bilix提供了另一个参数--codec来指定编码格式,例如你可以通过组合-q 480P --codec hev1.1.6.L120.90来指定下载7.61MB的那个。 --codec参数与-q参数类似,也支持子串指定,例如你可以通过--codec hev来使得所有视频都选择hev开头的编码。

对于音质,部分视频会含有大会员专享的杜比全景声和Hi-Res无损音质,利用--codec参数可以指定这些音频,例如

bilix v 'https://www.bilibili.com/video/BV1kG411t72J' --cookie 'xxxxx' --codec hev:fLaC 

--codec hev:fLaC中使用:将画质编码和音频编码隔开,如只指定音频编码,可使用--codec :fLaC

在 python 中调用

觉得命令行太麻烦,不够强大?想要直接调用模块?下面是一个小例子。

import asyncio
from bilix import DownloaderBilibili


async def main():
    d = DownloaderBilibili(video_concurrency=5, part_concurrency=10)
    cor1 = d.get_series(
        'https://www.bilibili.com/bangumi/play/ss28277?spm_id_from=333.337.0.0'
        , quality=999)
    cor2 = d.get_up_videos(url_or_mid='436482484')
    cor3 = d.get_video('https://www.bilibili.com/bangumi/play/ep477122?from_spmid=666.4.0.0')
    await asyncio.gather(cor1, cor2, cor3)
    await d.aclose()


if __name__ == '__main__':
    asyncio.run(main())

DownloaderBilibili类的下载方法都是异步的,例如d.get_series(...)返回的是一个协程Coroutine 对象,我们可以自由组合这些方法的返回值,然后通过await asyncio.gather 方法并发执行这些任务。例如上面的例子中我们同时执行了三种不同的任务。

你要组合很多很多任务?不用担心!d对象执行这些任务的并发度受到初始化参数的严格控制🫡,video_concurrency 控制了同时下载的视频数量,而part_concurrency 则控制了每个媒体文件(音频/画面)的分段并发数,如果你不太明白可以在代码和注释中找到他们的详细作用,或者就让他们保持默认吧。

更多案例请参考:Examples

关于断点重连

用户可以通过Ctrl+C中断任务,对于未完成的文件,重新执行命令会在之前的进度基础上下载,已完成的文件会进行跳过。 但是对于未完成的文件,以下情况建议清除未完成任务的临时文件再执行命令,否则可能残留部分临时文件。

  • 中断后改变画面质量-q或编码--codec
  • 中断后改变分段并发数--part-con

欢迎提问

由于本项目受到b站接口或者网站前端变动的影响,如果你发现任何bug或者其他问题,欢迎提issue,作者会保证最新版本可以正常运行。

如果觉得该项目对你有所帮助,可以给作者一个小小的Star🌟

未来工作

  • 支持杜比全景声以及Hi-Res无损
  • 支持切片下载

已知的bug 🤡

  • 当两个视频名字完全一样时,任务冲突但不会报错

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bilix-0.12.2.tar.gz (58.3 kB view hashes)

Uploaded Source

Built Distribution

bilix-0.12.2-py3-none-any.whl (68.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page