【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站音频工具之一。
classDiagram
class Audio {
+bvid: str
+title: str
+cid_list: list
+part_list: list
+download()
-__get_cid_title()
-__title_process()
}
class User {
+uid: str
+videos: list
+get_videos()
}
class Command {
+bv()
+uid()
+fav()
+season()
+series()
}
Command --> Audio
Command --> User
Command --> Fav
Command --> Season
Command --> Series
安装部署: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次重试,指数退避策略
- 文件校验:通过文件大小和哈希值验证完整性
- 断点续传:支持中断后继续下载未完成文件
flowchart TD
A[开始下载] --> B{文件存在?}
B -->|是| C[校验完整性]
B -->|否| D[开始下载]
C -->|完整| E[跳过]
C -->|不完整| F[断点续传]
D --> G[网络请求]
G --> H{请求成功?}
H -->|是| I[写入文件]
H -->|否| J[重试机制]
J -->|3次失败| K[记录错误日志]
常见问题解决方案
1. 412错误(签名验证失败)
原因:B站API更新了WBI签名算法
解决:项目已集成最新签名算法(参照bilibili-API-Collection),确保使用1.1.0以上版本
2. 下载速度慢
优化方案:
- 关闭VPN/代理
- 更换网络环境(推荐有线连接)
- 添加
--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或参与讨论。开源项目的成长离不开每一位用户的反馈与贡献!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0547
MiniMax-H3MiniMax H3 是一个通用的全模态生成系统。它支持对由文本、图像、视频和音频组成的多模态上下文进行统一理解,并能生成分辨率高达 2K、时长可达 15 秒的带原生立体声音频的视频。得益于面向任务泛化的系统设计,H3 在预训练阶段就已具备广泛的多模态上下文理解与生成能力,能够出色地执行复杂的多模态指令。Python00
DataFlow基于大模型算子和工作流的高效文本大模型训练数据合成框架Python06
doraDORA (Dataflow-Oriented Robotic Architecture 面向数据流的机器人架构) 是为 AI 与具身智能机器人打造的高性能开发框架,以数据流范式重构开发逻辑,原生支持分布式部署与端边云协同 —— 无需复杂适配,即可实现一体端到端具身大小脑、VLA等模型部署,无缝衔接感知、推理、控制全链路,让 AI 能力与机器人动作深度融合。 依托 Rust 内核与零拷贝通信技术,它将具身大小脑、VLA等模型推理、多模态数据融合延迟压缩至微秒级,同时兼容 ROS2 生态与国产 AI 芯片,彻底降低具身智能机器人的开发门槛,让分布式部署下的 AI 赋能创新更高效、更灵活。Rust01
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown01
py-xiaozhi基于Python的Xiaozhi AI,适用于想要完整Xiaozhi体验而无需拥有专用硬件的用户。Python01