写了个 B 站视频转音频的小工具

平时在 B 站听翻唱、长音频之类的,想存下来当音频听,试了几个工具都不太顺手,就自己用 Node 写了一个 CLI

干嘛的

把 B 站视频的音频轨提出来,转成 mp3 / flac 这些格式。支持单个视频和合集批量下载。

bili-audio-downloader https://www.bilibili.com/video/BVxxxx

为什么不用 yt-dlp

试过,但要装 Python 和一堆依赖,参数也多,B 站的 cookie、音质这些还得自己折腾。我就想要一个 npm install -g 完事直接用的东西。

大概流程

请求视频页面 → 从 HTML 里扒 window.__playinfo__ → 找音频流 → 选最高码率 → 下载 → ffmpeg 转格式。就这么几步。 在科研的时候也考虑过调官方API,但还是选了我认为比较简单的办法,扒页面分析

一些细节

音频流选择:B 站返回多条音频流带码率,直接排序取最大的。

URL fallback:主 URL 偶尔会挂,所以 baseUrl 和 backupUrl 都收集起来挨个试。

格式转换:先下成 m4a,再用 ffmpeg 转目标格式为mp3,不转的话虽然是m4s但还是视频格式,老设备读不出。

Cookie:需要高码率音频,做了手动输入 + 本地保存 + 下次自动加载,不优雅但能用。

合集下载:通过 /x/polymer/web-space/seasons_archives_list 分页拿数据,做了个简单的预览菜单,看完再决定下不下。

并发:用 p-limit 控制(默认 3 个),配 cli-progress 做多进度条,不会太慢也不会被限流。

用到的东西

Node.js / TypeScript、axios、ffmpeg-static、cli-progress、p-limit、readline,没用什么重框架。

安装

npm install -g bili-audio-downloader

已知问题

  • 依赖 B 站页面结构,改了就得跟着修
  • cookie 要自己弄
  • ffmpeg 算是个外部依赖

后续可能做的

  • 自动读浏览器 cookie
  • 补 metadata(封面、标题)
  • 简单 GUI(可能用 Tauri)

项目不复杂,但 B 站接口处理、音频流 fallback、CLI 交互这些细节还是花了点时间。有类似需求的可以试试。