【B站音频黑科技】BiliFM:一键解放UP主所有音频的终极解决方案
你是否曾遇到这些痛点?通勤路上想听B站UP主的播客却要耗费流量?收藏夹里的音频节目想离线保存却找不到工具?面对多P视频、系列合集只能逐个下载?今天推荐的开源项目BiliFM将彻底解决这些问题,让你以最高效的方式管理B站音频资源。
读完本文你将获得:
- 5种下载模式的全场景应用指南
- 突破412错误的独家技术解析
- 从安装到高级配置的一站式操作手册
- 应对网络异常的100%成功率保障方案
项目概述:重新定义B站音频下载
BiliFM是一款专为B站音频资源设计的命令行工具(Command-Line Interface,CLI),能够通过UP主UID、视频BV号、收藏夹、合集、列表等多维度批量获取音频内容。项目基于Python开发,采用模块化架构设计,已修复B站API接口的412签名验证问题,支持断点续传与文件去重,是目前GitHub上Star增长最快的B站音频工具之一。
安装部署:30秒快速启动
环境要求
- Python 3.10+(推荐3.11版本)
- 网络环境:建议使用稳定网络连接
- 存储空间:根据下载量预留至少1GB
安装方式
1. PyPI官方源(推荐)
pip install BiliFM --upgrade
2. 源码编译安装
git clone https://gitcode.com/jingfelix/BiliFM
cd BiliFM
pip install -r requirements.txt
安装完成后验证版本:
bilifm --version
# 输出示例:BiliFM, version 1.2.0
核心功能解析:5大模式全覆盖
1. UID模式:UP主全量下载
适用场景:关注的UP主更新了新节目,需要一次性获取其所有作品
# 基础用法
bilifm uid 261485584
# 指定存储目录
bilifm uid 261485584 --directory "~/Music/B站音频"
# 高质量音频(320kbps)
bilifm uid 261485584 --audio-quality 30280
实现原理:通过B站用户空间API获取视频列表,自动解析每个视频的BV号并调用音频下载接口。代码采用生成器模式(Generator)实现分页加载,避免内存溢出:
# 核心代码片段(src/bilifm/user.py)
def get_videos(self):
for page in range(1, self.total_pages + 1):
params = {"mid": self.uid, "pn": page, "ps": 30}
res = request("https://api.bilibili.com/x/space/arc/search", params=params)
for video in res["data"]["list"]["vlist"]:
yield {"bvid": video["bvid"], "title": video["title"]}
2. BV模式:单视频/多P下载
适用场景:下载单个视频或多P视频的音频轨道
# 单P视频
bilifm bv BV1k341187kG
# 多P视频(自动识别所有分P)
bilifm bv BV1LY4y1z7gQ
# 自定义文件名
bilifm bv BV1LY4y1z7gQ --output "科技早报.mp3"
特别优化:针对B站多P视频(Pages)设计了分P处理逻辑,自动在文件名后添加分P序号:
# 分P文件命名逻辑(src/bilifm/audio.py)
if len(self.part_list) > 1:
file_path = f"{self.title}-{part}.mp3" # 多P时添加分P标题
else:
file_path = f"{self.title}.mp3" # 单P直接使用标题
3. 收藏夹模式:精选内容备份
适用场景:将收藏的"学习资料"、"播客合集"导出为音频
准备工作:获取Cookies和MediaID
-
获取MediaID: 打开B站收藏夹页面,URL中"media_id="后的数字即为所需参数
例如:https://space.bilibili.com/23263470/favlist?fid=69361944→69361944 -
获取Cookies:
- 浏览器打开B站,F12打开开发者工具
- 控制台输入:
document.cookie - 复制输出内容,使用在线Cookie转JSON工具转换为JSON格式
- 保存为
cookies.json文件
执行下载
bilifm fav 69361944 cookies.json --directory "~/收藏夹音频"
4. Season模式:系列合集下载
适用场景:下载课程、专辑等结构化合集内容
# 从URL提取参数:https://space.bilibili.com/23263470/channel/collectiondetail?sid=1855309
bilifm season 23263470 1855309
参数解析:
23263470:UP主UID(实际可任意填写,API限制导致的兼容处理)1855309:合集ID(sid参数)
5. Series模式:自定义列表下载
适用场景:下载UP主创建的非官方系列内容
# 从URL提取参数:https://space.bilibili.com/488978908/channel/seriesdetail?sid=888434
bilifm series 488978908 888434
高级配置:打造个性化下载体验
音频质量控制
支持三种音质选择,通过--audio-quality参数指定:
| 质量等级 | 参数值 | 比特率 | 适用场景 |
|---|---|---|---|
| 标准品质 | 30216 | 64kbps | 节省流量 |
| 高清品质 | 30232 | 192kbps | 日常收听 |
| 无损品质 | 30280 | 320kbps | 高保真需求 |
示例:
bilifm bv BV1LY4y1z7gQ --audio-quality 30280
错误处理与重试机制
内置三层容错保障:
- 网络错误重试:默认3次重试,指数退避策略
- 文件校验:通过文件大小和哈希值验证完整性
- 断点续传:支持中断后继续下载未完成文件
常见问题解决方案
1. 412错误(签名验证失败)
原因:B站API更新了签名算法
解决:项目已集成最新签名算法(参照bilibili-API-Collection),确保使用1.1.0以上版本
2. 下载速度慢
优化方案:
- 关闭代理
- 更换网络环境(推荐有线连接)
- 添加
--concurrent 5参数启用多线程下载
3. 文件名过长导致保存失败
自动处理:程序会自动截断超过255字符的文件名,保留核心标识:
# 文件名处理逻辑(src/bilifm/audio.py)
if len(file_path) > 255:
file_path = file_path[:255] # 截断长文件名
性能对比:为什么选择BiliFM?
| 特性 | BiliFM | 传统在线工具 | 浏览器插件 |
|---|---|---|---|
| 批量下载 | ✅ 支持无限量 | ❌ 单次5个限制 | ❌ 依赖人工操作 |
| 音质选择 | ✅ 3档可调 | ❌ 固定128kbps | ❌ 不可调 |
| 断点续传 | ✅ 支持 | ❌ 需重新下载 | ❌ 不支持 |
| 本地存储 | ✅ 完全本地 | ❌ 云端中转 | ✅ 支持 |
| 多平台 | ✅ Windows/macOS/Linux | ✅ 仅网页 | ❌ 依赖浏览器 |
未来 roadmap
根据项目GitHub Issues和开发者规划,即将支持的功能:
- 音频格式转换(支持FLAC/ACC)
- 订阅更新通知
- GUI图形界面
- 音频标签自动补全(歌手/专辑信息)
使用许可与致谢
BiliFM采用GPL-3.0开源协议,允许非商业用途的自由分发和修改。项目特别感谢:
- bilibili-API-Collection提供的API文档
- JetBrains提供的开源开发工具支持
- 所有提交PR的贡献者
结语
BiliFM通过命令行的简洁界面,提供了专业级的B站音频管理解决方案。无论是通勤路上的播客收听,还是学习资料的离线整理,都能以最高效的方式完成。现在就通过以下命令开始你的高效音频管理之旅:
# 安装并体验
pip install BiliFM
bilifm uid 261485584 --directory "我的B站音频库"
如有任何使用问题或功能建议,欢迎在项目GitHub仓库提交Issue或参与讨论。开源项目的成长离不开每一位用户的反馈与贡献!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



