# 命令行参数

我能做到的远不止你看到的这些哦~

参数的使用方法

如果你经常使用命令行工具的话,这部分直接跳过就好啦~

  • 指定参数值

    比如你需要修改下载格式为 flv,只需要

    bilili <url> --type=flv
    # 或者
    bilili <url> -t flv
    # 当然你也可以不拘泥于这样的用法,下面这两种当然也是可以的
    bilili <url> -t=flv
    bilili <url> --type flv
    
  • 切换 True or False

    对于那些不需要指定具体值,只切换 True or False 的参数,你也不需要在命令中指定值,比如开启强制覆盖已下载视频选项

    bilili <url> --overwrite
    # 或者
    bilili <url> -w
    
  • 多参数同时使用

    直接向后加即可,而且 <url> 和其它参数都不强制要求顺序,比如下面这些命令都是合法的

    bilili <url> --overwrite --type=flv
    bilili --overwrite -t flv <url>
    bilili -w <url> --type=flv
    

# 源格式修改

  • 参数 -t--type
  • 可选值 flv | dash | mp4
  • 默认值 dash

视频格式是指 bilibili 直接提供的资源格式,不过我最终都会转换成通用的 mp4 格式方便观看的啦,不同格式在通用性、下载速度等方面的比较如下

dash flv mp4
支持程度 中(少数视频不支持) 低(仅支持投稿视频)
下载速度
需要 FFmpeg 合并
清晰度支持 全面 中(部分较新的 4K 等清晰度无法获取) 极少(仅支持 1080P 及更低的清晰度,且无法选择)
备用链接数量 2 2 0
我该怎么选 B 站当前使用的格式,拥有齐全的清晰度和最佳的下载速度 当 dash 无法下载时的备用选项 除了不需要合并,一无是处

TIP

为了提高项目的可维护性,flv 格式与 mp4 格式支持将会在未来删除。

# 指定存储目录

  • 参数 -d--dir
  • 默认值 运行目录

也就是指定我要把视频放到哪里啦,不告诉我的话,就只能放在你的运行目录了。

# 指定视频清晰度

  • 参数 -q--quality
  • 可选值 127 | 125 | 120 | 116 | 116 | 112 | 80 | 74 | 64 | 32 | 16
  • 默认值 127

清晰度对应关系如下

code 清晰度
127 8K 超高清
125 HDR 真彩
120 4K 超清
116 1080P 60帧
112 1080P 高码率
80 1080P 高清
74 720P 60帧
64 720P 高清
32 480P 清晰
16 360P 流畅

并不是说指定某个清晰度就一定会下载该清晰度的视频,我只会尽可能满足你的要求,如果不存在指定的清晰度,我就会按照默认的清晰度搜索机制进行调节,比如指定清晰度为 80我首先会依次降清晰度搜索 74643216,如果依然找不到合适的则继续升清晰度搜索 112116120125127

# 修改下载线程最大数量

  • 参数 -n--num-threads
  • 默认值 16

也就是我的下载分身数量咯,越多的话,同时下载的视频块就越多,但并不是说分身越多就越好哟,如果你的带宽不够,分身再多也木有用滴。

# 指定需要下载的剧集

  • 参数 -p--episodes
  • 默认值 ^~$(也即全选)

也就是选集咯,其语法是这样的

  • <p1> 单独下某一剧集
    • 支持负数来选择倒数第几话
    • 此外还可以使用 ^$ 来分别代表 1-1
  • <p_start>~<p_end> 使用 ~ 可以连续选取
  • <p1>,<p2>,<p3>,...,<pn> 使用 , 可以不连续选取

emmm,直接看的话大概并不能知道我在说什么,所以我们通过几个小例子来了解其语法

# 假设要下载一个具有 24 话的番剧
# 如果我们只想下载第 3 话,只需要这样
bilili <url> -p 3
# 那如果我想下载第 5 话到第 7 话呢,使用 `~` 可以连续选中
bilili <url> -p 5~7
# 那我想下载第 12 话和第 17 话又要怎么办?此时只需要 `,` 就可以将多个不连续的选集一起选中
bilili <url> -p 12,17
# 那我突然又想将刚才那些都选中了呢?还是使用 `,` 呀,将它们连在一起即可
bilili <url> -p 3,5~7,12,17
# 嗯,你已经把基本用法都了解过了,很简单吧~
# 下面是一些语法糖,不了解也完全不会影响任何功能哒~
# 那如果我只知道我想下载倒数第 3 话,而不想算倒数第三话是第几话应该怎么办?
# 此时可以用负数哒~不过要注意的是,开头如果是 `-` 的话前面应该使用 `=`
bilili <url> -p=-3
# 那么如果想下载最后一话你可能会想到 `-p=-1` 对吧?不过我内置了两个符号分别代表第一话(^)和最后一话($)
# 像下面这样就可以直接下载最后一话啦~
bilili <url> -p $
# 所有语法都了解完啦,我们看一个稍微复杂的例子
bilili <url> -p ^~3,10,12~14,16,-4~$
# 很明显,上面的例子就是下载前 3 话、第 10 话、第 12 到 14 话、第 16 话以及后 4 话

一些要注意的问题

  1. 这里使用的序号是视频的顺序序号,而不是番剧所标注的第 n 话,因为有可能会出现 第 x.5 话 等等的特殊情况,此时一定要按照顺序自行计数。
  2. 参数值里一定不要加空格
  3. 参数值开头为 - 时前面应该使用 = 而非空格

# 同时下载附加剧集

  • 参数 -s--with-section
  • 默认值 False

默认是不会下载 PV、预告以及特别篇等专区内容部分的,指定该参数才可以下载哦~

与选集功能的组合

值得注意的是,该部分与番剧剧集部分统一编号,且位于番剧剧集后面

比如说一个 11 话的番剧,此外有额外 2 话附加剧集,如果只需要下载附加剧集的话只需要使用下面的命令即可:

bilili <url> -p -2~$

# 强制覆盖已下载视频

  • 参数 -w--overwrite
  • 默认值 False

也就是强制将已经下载过的部分覆盖掉啦。

# 个人信息认证

  • 参数 -c--sess-data
  • 默认值 ""

使用个人认证可以让你下载更高清晰度以及更多的剧集,当你传入你的大会员 SESSDATA 时(当然前提是你是大会员),你就可以下载大会员可访问的资源咯。

SESSDATA 获取方式

这里用 Chrome 作为示例,其它浏览器请尝试类似方法。

首先,用你的帐号登录 B 站,然后随便打开一个 B 站网页,比如首页 (opens new window)

按 F12 打开开发者工具,切换到 Network 栏,刷新页面,此时第一个加载的资源应该就是当前页面的 html,选中该资源,在右侧 「Request Headers」 中找到 「cookie」,在其中找到类似于 SESSDATA=d8bc7493%2C2843925707%2C08c3e*81; 的一串字符串,复制这里的 d8bc7493%2C2843925707%2C08c3e*81,这就是你需要的 SESSDATA

TIP

SESSDATA 中可能有特殊符号,所以传入时你可能需要使用双引号来包裹

bilili <url> -c "d8bc7493%2C2843925707%2C08c3e*81"

# 跳过下载询问

  • 参数 -y--yes
  • 默认值 False

跳过下载前的询问。

# 指定音频码率等级

  • 参数 --audio-quality
  • 可选值 30280 | 30232 | 30216
  • 默认值 30280

码率对应关系如下

code 码率
30280 320kbps
30232 128kbps
30216 64kbps

码率自动调节机制与视频清晰度一致,也采用先降后升的匹配机制。

# 指定播放列表类型

  • 参数 --playlist-type
  • 可选值 dpl | m3u | no
  • 默认值 dpl

dpl 是 PotPlayer 的专属播放列表格式,PotPlayer 可以在其中保存进度等。

m3u 有着更好的通用性,大多数播放器都支持。

当然指定 no 就是不生成播放列表。

# 指定下载弹幕类型

  • 参数 --danmaku
  • 可选值 xml | ass | no
  • 默认值 xml

B 站只提供 xml 格式的弹幕,因此我默认会下载 xml 格式的弹幕,但本地播放器一般不支持 B 站提供的默认弹幕,因此需要你手动转换,比如使用 us-danmaku (opens new window) 在线转换。

其实我也可以帮你自动转换哒,只需要指定值为 ass 就好啦。

当然指定为 no 就是不需要弹幕咯。

# 指定分块下载时块的大小

  • 参数 --block-size
  • 默认值 128

因为内置分块下载机制,该参数就是指定分块下载的块大小咯,单位为 MB,当设置为 0 时可以禁用分块下载功能。

# 修改播放列表路径类型为绝对路径

  • 参数 --abs-path
  • 默认值 False

播放列表默认使用的是相对路径,这样即便移动下载后的文件夹也可以正常播放。

但偶尔有些播放器不支持相对路径的播放列表,所以提供了该选项来指定为绝对路径。当然,为了播放列表的灵活性,你应当只在发生本情况的前提下修改本参数。

# 启用从多个镜像源下载功能

  • 参数 --use-mirrors
  • 默认值 False

从多个镜像下载,当然,由于我的每个分身(子线程)只处理一个块,所以被分为多个块的资源才有效哦。

# 绕过系统代理

  • 参数 --disable-proxy
  • 默认值 False

因为我的依赖 requests 库会自动使用系统代理,使用本参数就可以绕过它啦。

# 不显示任何颜色

  • 参数 --no-color
  • 默认值 False

不显示任何颜色,除了使用参数 --no-color 外,设定环境变量 NO_COLOR 为非空值也可以达到同样的效果,可参照 https://no-color.org/ (opens new window)

# 开启 Debug 模式

  • 参数 --debug
  • 默认值 False

对 debug 更友好的模式,仅开发时使用。