Back to skills
extension
Category: OtherNo API key required

Bilibili-Down

当用户希望在对话中通过 BV 号下载 B 站媒体时使用此技能, 支持单P下载与多P下载(全部分P或指定分P),由接口参数直接驱动异步执行。

personAuthor: user_4ac179d5hubcommunity

Bilibili-Down Skill

作用范围

  • 仅处理基于 Bilibili BV 号的对话式下载流程。
  • 复用 core/scripts/ 下的本地 Python 运行模块。
  • 多P能力在 core 实现,Skill 仅负责状态编排与接口封装。

登录态与清晰度说明

  • 本 Skill 不接收完整 Cookie,也不负责写入 config/cookies.config
  • 登录态能力由宿主环境初始化的 BiliDownloader 决定;Skill 仅按当前可用能力执行下载。
  • 下载说明:
    • 未登录态:最高下载 720p 视频,hires 音频。
    • 登录态:最高下载 8K 视频,hires 音频。
    • 最终可用画质/音质以视频本身、账号权限与接口实时返回为准。

触发规则(L0 严格)

  • 触发关键词:
    • 下载B站视频
    • 下载B站音频
    • 保存BV
    • bilibili下载
  • IDLE 状态下若未命中触发词,返回未触发提示。

资源映射

  • scripts/bilibili_download_skill.py
    • 有状态对话编排器(IDLE / WAIT_CONFIRM / DOWNLOADING)。
  • core/bili_downloader.py
    • 下载器核心(WBI 签名、信息查询、单P/多P媒体下载、ffmpeg 合并)。
  • core/exceptions.py
    • 下载异常分类定义。
  • reference/python-usage-order.md
    • 面向 Agent 的唯一首读说明(入口、调用链、边界)。
  • 登录态配置
    • 由宿主环境或上层应用自行准备;Skill 不会接收、保存或创建本地 Cookie 配置文件。

输入解析

  • 使用正则提取 BV:BV[0-9A-Za-z]+(大小写不敏感)。
  • 将 BV 前缀标准化为大写 BV
  • 若缺少 BV,返回引导提示。

状态机

  • IDLE
    • 解析 BV -> 查询视频信息与清晰度。
    • 通过接口参数直接启动下载任务(单P或多P)。
  • WAIT_CONFIRM
    • 仅保留兼容占位,当前默认流程不依赖确认态。
  • DOWNLOADING
    • 收到任何新消息:回复“正在下载中,请稍候…”。
    • 工作线程完成后:发送最终结果消息并重置为 IDLE

下载规则

  • 若调用 download_bilibili_media(bvid, media_type):直接下载首P媒体。
  • 若调用 download_bilibili_multi_p(bvid, media_type, pages)
    • pages=None:下载全部分P。
    • pages=[1,3]:下载指定分P。
  • 触发词包含 下载B站音频 时优先输出音频文件(.m4a,无损抽取)。
  • 若当前 ffmpeg/源流不支持 m4a 抽取,则自动回退输出 .mp3(优先 libmp3lame,再退化到 mp3 编码器)。
  • 其余触发词默认输出视频文件(.mp4)。
  • 多P下载入口:download_bilibili_multi_p(bvid, media_type, pages=None)
  • Agent 侧应直接通过 pages 参数控制下载范围,不依赖自然语言确认输入。

错误映射

  1. BV 无效
  • 匹配:invalid bvid / empty pagelist / 未识别
  • 输出:BV号无效或不存在,请检查后重试。
  1. FFmpeg 缺失/失败
  • 匹配:cannot run program / createprocess error=2 / ffmpeg failed / ffmpeg.exe
  • 输出:FFmpeg 未找到或执行失败,请确认 \release/ffmpeg.exe` 存在,或在 BiliDownloader 构造时指定 ffmpeg 路径。`
  1. 网络错误
  • 匹配:timed out / unknownhost / http
  • 输出:网络请求失败,请检查网络连接后重试。详细错误:{msg}
  1. 兜底
  • 输出:发生错误:{msg}

反模式

  • 不要在同一个 skill 实例中启动并发下载。
  • 在完成/取消/报错后,不要保留过期的 pending 状态。