BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事
BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事
【免费下载链接】BBDownBilibili Downloader. 一个命令行式哔哩哔哩下载器.项目地址: https://gitcode.com/gh_mirrors/bb/BBDown
周末想躺在沙发上把追了一个月的纪录片一口气看完,结果发现高铁上信号一言难尽;做课程设计想引用UP主的演示片段,却找不到官方下载入口;收藏夹里躺着几百个"稍后再看",真正用上的没几个……这些场景你大概率都经历过。问题的根源其实很简单:哔哩哔哩的视频没有官方下载通道,而网页端能拿到的画质又处处受限。
今天要聊的主角——BBDown,就是一个专门解决这类痛点的命令行式哔哩哔哩下载器。它是开源免费的,基于 .NET 开发,Windows、macOS、Linux 都能跑。你给它一个链接,它负责解析、选画质、拉流、合并、输出成品 MP4,全程不用打开浏览器。
这篇文章不打算给你堆参数列表,而是跟着一位"小北"同学的真实使用轨迹,从装好工具到搞定一套复杂需求,一步一步把 BBDown 用明白。
第一步:装好工具,先让第一条视频跑起来
两条命令完成安装,新手也能五秒搞定
小北的电脑上装过 .NET,所以他的安装方式最省事:
dotnet --version # 确认环境,版本号大于 6.0.100 即可 dotnet tool install --global BBDown以后想升级,也只需要一条命令:
dotnet tool update --global BBDown如果你没有 .NET 环境,或者想直接用免安装的版本,去项目的 Release 页面下载对应系统的压缩包解压即可。另外项目里还附带了一份 Dockerfile,内置了 ffmpeg 和 serve 模式,喜欢容器化部署的同学可以照着用。
装完先验证一下:
BBDown --version第一次下载:把链接丢进去就行
小北随手挑了一个 BV 号视频试水:
BBDown "https://www.bilibili.com/video/BV1qt4y1X7TW"几秒钟后,程序自动完成了解析、选流、多线程下载、音视频合并,当前目录下多了一个 MP4 文件。他甚至没看懂中间刷过的日志,但成品就是出来了。
小贴士:BBDown 也支持直接传
BV、av、ep、ss这类编号,不一定要完整网址。
关于混流的补充说明:BBDown 本身不负责"合并音视频"这件事,它依赖外部程序来干活——普通视频用 ffmpeg 或 mp4box,杜比视界片源则要求 ffmpeg 5.0 以上或新版 mp4box。如果你下载完发现只有画面没有声音,八成是这台机器上没装 ffmpeg,去官网装一个并加入系统 PATH 就能解决。
第二步:遇到"需要登录"的拦路虎,怎么破
小北很快就撞上了第一堵墙:想下载一部大会员专属的番剧,提示需要登录。
扫码登录:最省心的方式
BBDown 内置了二维码登录,在终端里执行:
BBDown login终端会直接渲染出一个二维码,用哔哩哔哩手机 APP 扫码确认,登录态就保存到了本地文件里,之后下载会优先使用会员权限。如果是云视听小电视(TV 端)的账号体系,则用BBDown logintv。
手动给 Cookie 和 Token:给进阶用户的两条捷径
不想扫码也行,网页端会员内容可以直接塞 Cookie:
BBDown -c "SESSDATA=******" "https://www.bilibili.com/video/BV1qt4y1X7TW"TV / APP 接口的会员内容则用 access_token:
BBDown -tv -token "******" "https://www.bilibili.com/video/BV1qt4y1X7TW"小北后来发现了一个冷知识:TV 登录产生的 access_token 也能给 APP 接口用,把BBDownTV.data复制成BBDownApp.data,程序就会自动读取。至于 APP 接口更精细的鉴权(比如带identify_v1前缀的 authorization 头里的那串数字),README 里给了抓包获取的方法,属于想折腾的人再去研究的部分。
第三步:从"下一个视频"到"批量搬空",只差几个参数
分P下载:全集、选集、跳着选都行
小北开始下载一部 30 集的课程,他先了解了几种选集语法:
# 全集 BBDown -p ALL "https://www.bilibili.com/bangumi/play/ss33073" # 指定几集 BBDown -p 1,3,5 "https://www.bilibili.com/bangumi/play/ss33073" # 一个范围 BBDown -p 1-10 "https://www.bilibili.com/bangumi/play/ss33073" # 只看最后一集 BBDown -p LAST "https://www.bilibili.com/bangumi/play/ss33073"还能用-p 3,LATEST这种"指定集+最新集"的组合。下载多 P 时如果分P很多,程序默认只展示一部分,想看全貌加--show-all即可。
画质与编码:把"能看"升级成"极致"
BBDown 对画质的支持相当激进,最高到 8K,还包括 HDR、杜比视界、杜比全景声。控制画质和编码有两个核心参数:
# 指定编码优先级 BBDown -e "hevc,av1,avc" "https://www.bilibili.com/video/BV1qt4y1X7TW" # 指定画质优先级 BBDown -q "8K 超高清,1080P 高码率,HDR 真彩,杜比视界" "https://www.bilibili.com/video/BV1qt4y1X7TW"不想提前决定的话,-ia交互模式会在下载前弹出一个清晰度菜单让你现挑;-info则只解析不下载,先把画质、编码、大小全看清楚再动手。这里有个默认行为值得注意:多线程下载是默认开启的,在限速的网络环境里可以用--multi-thread false关掉。
番剧、课程、收藏夹、个人空间:全类型解析
小北接下来测试了各种链接,惊讶地发现 BBDown 几乎"什么都能吃":
| 内容类型 | 支持情况 | 说明 |
|---|---|---|
| 普通视频 | Web/TV/App | UP 主投稿 |
| 番剧 | Web/TV/App | 含ss/ep编号 |
| 课程(课堂) | Web | 付费课程下载 |
| 收藏夹 | ✅ | 需要favId前缀 |
| 个人空间 | ✅ | mid前缀 |
| 合集/列表 | ✅ | seriesBizId、listBizId |
这套分类逻辑藏在源码BBDown.Core/FetcherFactory.cs里:程序会根据输入前缀自动挑选对应的信息解析器——NormalInfoFetcher、BangumiInfoFetcher、CheeseInfoFetcher、FavListFetcher等,各司其职。想深入了解的读者可以翻一翻BBDown.Core/Fetcher/目录,模块划分得非常清晰。
多接口三选一:TV、APP、国际版怎么选
BBDown 支持三种解析模式:
BBDown -tv "https://www.bilibili.com/video/BV1qt4y1X7TW" # TV 接口 BBDown -app "https://www.bilibili.com/video/BV1qt4y1X7TW" # APP 接口 BBDown -intl "https://www.bilibili.com/video/BV1qt4y1X7TW" # 国际版(东南亚内容)小北的经验是:TV 接口对粉丝量大的 UP 主基本能拿到无水印片源,日常优先试-tv;-intl则适用于 api.biliintl.com 那套国际内容体系。
第四步:弹幕、字幕、封面,一个都不能少
视频本身下载好了,小北发现配套内容才是"灵魂":
弹幕:从 XML 到 ASS
加一个参数就能把弹幕一起带走:
BBDown -dd "https://www.bilibili.com/video/BV1qt4y1X7TW"弹幕会以 XML 原始格式保存,也可以转成 ASS 字幕文件——BBDown.Core/DanmakuUtil.cs里甚至有基于 1920×1080 渲染区域做弹幕排版的逻辑,顶部、底部、滚动弹幕的时长和防遮挡都考虑到了。想单独下载弹幕而不下载视频,用--danmaku-only。
字幕:自动转 SRT
外挂字幕默认随视频下载,并自动转换为通用的 SRT 格式。混流时还能指定音频语言,比如:
BBDown --language chi "https://www.bilibili.com/video/BV1qt4y1X7TW"只下载某一类素材
创作者要的就是"拆开用"的自由:
BBDown --video-only "https://www.bilibili.com/video/BV1qt4y1X7TW" # 只要画面 BBDown --audio-only "https://www.bilibili.com/video/BV1qt4y1X7TW" # 只要声音 BBDown --sub-only "https://www.bilibili.com/video/BV1qt4y1X7TW" # 只要字幕 BBDown --cover-only "https://www.bilibili.com/video/BV1qt4y1X7TW" # 只要封面第五步:文件名规整与配置文件,告别每次敲一堆参数
用内置变量定制文件名
小北是个有整理强迫症的人,他的文件名需求是"标题+清晰度":
BBDown -F "<videoTitle>[<dfn>]" "https://www.bilibili.com/video/BV1qt4y1X7TW"可用的内置变量很丰富,常用的一批有:
| 变量 | 含义 |
|---|---|
<videoTitle> | 视频主标题 |
<pageNumber>/<pageNumberWithZero> | 分P序号(后者补零) |
<pageTitle> | 分P标题 |
<dfn>/<res>/<fps> | 清晰度 / 分辨率 / 帧率 |
<videoCodecs>/<audioCodecs> | 音视频编码 |
<ownerName>/<ownerMid> | 上传者信息 |
<bvid>/<aid>/<cid> | 视频标识 |
<apiType> | API 类型(TV/APP/INTL/WEB) |
多 P 视频默认的文件结构是视频主标题/[P01]分P标题,同样可以用-M参数定制成标题/分P标题[清晰度]这种风格。
配置一次,终身受用
小北把这些固定选项写进了BBDown.config文件,之后每次下载自动读取,再也不用重复敲:
# BBDown 配置文件:以 # 开头的行会被忽略 --file-pattern <videoTitle>[<dfn>] --multi-file-pattern <videoTitle>/[P<pageNumberWithZero>]<pageTitle>[<dfn>] # 下载弹幕 --download-danmaku # 分P之间间隔 2 秒,避免请求过快 --delay-per-page 2如果配置文件不叫默认名,用--config-file指定路径即可。这个解析逻辑由BBDown/BBDownConfigParser.cs实现,每个选项的参数写在下一行,格式很直白。
第六步:当"下载"变成"服务",BBDown 还能这样用
小北折腾到后期,已经不满足于手动一条条敲命令了。他发现 BBDown 还带一个 serve 模式,能以 HTTP 服务的形式运行:
BBDown serve -l http://0.0.0.0:58682启动后就能用 JSON API 管理下载任务,接口设计都在 json-api-doc.md 里。几个核心端点:
# 查看所有任务 curl http://localhost:58682/get-tasks/ # 只查正在运行的 curl http://localhost:58682/get-tasks/running # 添加一个下载任务(只需 URL 字段) curl -X POST -H 'Content-Type: application/json' \ -d '{ "Url": "BV1qt4y1X7TW" }' http://localhost:58682/add-task # 添加任务并指定保存目录 curl -X POST -H 'Content-Type: application/json' \ -d '{ "Url": "BV1qt4y1X7TW", "FilePattern": "/Downloads/<videoTitle>[<dfn>]" }' http://localhost:58682/add-task每个任务带进度、下载速度、总字节数等实时信息,天然适合接进自己的自动化脚本。Dockerfile 里默认入口就是serve -l http://0.0.0.0:23333,部署一个常驻下载服务也就一行命令的事。
三个使用 API 前要记住的坑:
- 任务一旦提交就不好取消,只能等它完成或失败;
- 服务端对并发任务数量没有限制,短时间内狂塞任务会耗尽机器资源,自己控制节奏;
- 返回的
TotalDownloadedBytes会比实际文件略小(约等于 1 秒的下载量),这是回报频率造成的正常现象。
避坑清单:新手最容易踩的 5 个坑
小北这一路也踩了不少雷,整理成清单送给你:
- 下载完没声音——99% 是没装 ffmpeg。装好并加入 PATH,或者用
--ffmpeg-path指定位置;实在不行就--skip-mux跳过自动合并,拿到音视频流后手动处理。 - 画质上不去——有些高画质需要大会员,确保已经用
BBDown login登录了有权限的账号,并且登录态文件没有被删。 - 多 P 下载太激进被限速——用
--delay-per-page 2在分P之间加间隔,文明一点。 - 文件名乱成一锅粥——尽早用
-F/-M把<videoTitle>、<pageNumber>这些变量定好,别等到下完一百集再整理。 - 速度不尽人意——先试试
--use-aria2c调起 aria2c 多线程下载,附带参数如-x 16 -s 16可自行控制并发;也能用--work-dir把下载目录挪到更快磁盘上。
两个值得留意的进阶姿势
归档跳过重复下载:加--save-archives-to-file会把下载过的视频记录到本地文件,下次遇到同一个视频直接跳过,适合跑定时任务增量更新收藏夹。
换编码优先顺序:有些播放器对 HEVC 支持好,有些则对 AV1 更友好。用-e调整编码优先级(如-e "av1,hevc,avc"),相当于给下载结果"按需定制",而--video-ascending、--audio-ascending则能优先挑体积更小的流,省流量。
写在最后:下载能力越强,越要谨慎使用
回到小北的故事:他现在已经养成了一个固定流程——收藏夹定期用 BBDown 增量同步到 NAS,追的番剧更新后自动拉最新一集,做剪辑时用--video-only单独抽素材。一个开源命令行工具,把他从"找下载方法"的泥潭里彻底捞了出来。
但能力越大,责任越大。BBDown 的作者在项目里明确写了免责声明:工具仅供个人学习、研究和非商业性用途,下载行为需自行确保符合版权相关法律法规。翻译成大白话就是——自己收藏、离线观看、学习研究没问题,但别拿去传播、倒卖或商用。尊重创作者,才能让这个生态长久地好下去。
如果你也想把哔哩哔哩视频下载这件事彻底简化,按这篇文章的顺序走一遍:装上 → 登录 → 下第一个视频 → 学会选集选画质 → 用配置固化习惯 → 最后再考虑要不要上 serve 模式。到那时候,BBDown 就不再是一个"下载器",而是你手里一个趁手的视频管理基础设施。
【免费下载链接】BBDownBilibili Downloader. 一个命令行式哔哩哔哩下载器.项目地址: https://gitcode.com/gh_mirrors/bb/BBDown
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
