# 命令行参数
我能做到的远不止你看到的这些哦~
参数的使用方法
如果你经常使用命令行工具的话,这部分直接跳过就好啦~
指定参数值
比如你需要修改下载格式为 flv,只需要
bilili <url> --type=flv # 或者 bilili <url> -t flv # 当然你也可以不拘泥于这样的用法,下面这两种当然也是可以的 bilili <url> -t=flv bilili <url> --type flv
切换
True
orFalse
对于那些不需要指定具体值,只切换
True
orFalse
的参数,你也不需要在命令中指定值,比如开启强制覆盖已下载视频选项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
,我首先会依次降清晰度搜索 74
、64
、32
、16
,如果依然找不到合适的则继续升清晰度搜索 112
、116
、120
、125
、127
。
# 修改下载线程最大数量
- 参数
-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 话
一些要注意的问题
- 这里使用的序号是视频的顺序序号,而不是番剧所标注的
第 n 话
,因为有可能会出现第 x.5 话
等等的特殊情况,此时一定要按照顺序自行计数。 - 参数值里一定不要加空格
- 参数值开头为
-
时前面应该使用=
而非空格
# 同时下载附加剧集
- 参数
-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 更友好的模式,仅开发时使用。