博主头像
SnowFox博客- 米砸的个人博客

懒狗高中生一枚 写代码还是算了吧

哔哩哔哩视频直链解析下载分析

首先,我们以随便一个视频为例子
这里不推荐大家选择合集的,那种太长了不便于分析,但其实合集和单个视屏都是通用的

2026-03-26T15:41:59.png
2026-03-26T15:41:59.png

随便打开一个视频获取到他的分享链接
https://b23.tv/aPWsr9s
请求一下之后他返回给我们了一个这个东西

<a href="https://www.bilibili.com/video/BV1AAQqBBELn?buvid=XU133DB15CC85600C3575E8A4B63CE6B04998&amp;from_spmid=search.search-result.0.0&amp;is_story_h5=false&amp;mid=lkXE4YTrA1OKrolsDrxcDH8FTQ%2FSZMtL1rElX6M3iMo%3D&amp;p=1&amp;plat_id=116&amp;share_from=ugc&amp;share_medium=android&amp;share_plat=android&amp;share_session_id=c3dc52e1-cf21-4e6a-a36e-b10a64be74d0&amp;share_source=COPY&amp;share_tag=s_i&amp;spmid=united.player-video-detail.0.0&amp;timestamp=1774539667&amp;unique_k=aPWsr9s&amp;up_id=45008871">Found</a>.

通过观察重定向地址我们就获取了他的bvidBV1AAQqBBELn
通过调用b站的web端api
https://api.bilibili.com/x/web-interface/view?bvid=你获取到的bvid
我们Post一下这个他返回了以下JSON

{
  "code": 0,
  "message": "OK",
  "ttl": 1,
  "data": {
    "bvid": "BV1AAQqBBELn",
    "aid": 116282917855109,
    "videos": 1,
    "tid": 183,
    "tid_v2": 2017,
    "tname": "",
    "tname_v2": "",
    "copyright": 1,
    "pic": "http://i1.hdslb.com/bfs/archive/2f65a5cb7e839ff6fc55171898a9a11d7ab2ecb0.jpg",
    "title": "【太阳之子】的MV曲换成【夜的第七章】",
    "pubdate": 1774338043,
    "ctime": 1774338044,
    "desc": "-",
    "desc_v2": [
      {
        "raw_text": "-",
        "type": 1,
        "biz_id": 0
      }
    ],
    "state": 0,
    "duration": 253,
    "mission_id": 4063253,
    "rights": {
      "bp": 0,
      "elec": 0,
      "download": 1,
      "movie": 0,
      "pay": 0,
      "hd5": 0,
      "no_reprint": 1,
      "autoplay": 1,
      "ugc_pay": 0,
      "is_cooperation": 0,
      "ugc_pay_preview": 0,
      "no_background": 0,
      "clean_mode": 0,
      "is_stein_gate": 0,
      "is_360": 0,
      "no_share": 0,
      "arc_pay": 0,
      "free_watch": 0
    },
    "owner": {
      "mid": 45008871,
      "name": "Diao爆Yang",
      "face": "https://i0.hdslb.com/bfs/face/56fe2de5c9c4b8ecf7f48a7feaee07ed60658852.jpg"
    },
    "stat": {
      "aid": 116282917855109,
      "view": 66191,
      "danmaku": 251,
      "reply": 379,
      "favorite": 627,
      "coin": 582,
      "share": 1663,
      "now_rank": 0,
      "his_rank": 0,
      "like": 2111,
      "dislike": 0,
      "evaluation": "",
      "vt": 0
    },
    "argue_info": {
      "argue_msg": "",
      "argue_type": 0,
      "argue_link": ""
    },
    "dynamic": "",
    "cid": 36935959931,
    "dimension": {
      "width": 3840,
      "height": 2160,
      "rotate": 0
    },
    "premiere": null,
    "teenage_mode": 1,
    "is_chargeable_season": false,
    "is_story": false,
    "is_upower_exclusive": false,
    "is_upower_play": false,
    "is_upower_preview": false,
    "enable_vt": 0,
    "vt_display": "",
    "is_upower_exclusive_with_qa": false,
    "no_cache": false,
    "pages": [
      {
        "cid": 36935959931,
        "page": 1,
        "from": "vupload",
        "part": "【太阳之子】的MV曲换成【夜的第七章】",
        "duration": 253,
        "vid": "",
        "weblink": "",
        "dimension": {
          "width": 3840,
          "height": 2160,
          "rotate": 0
        },
        "first_frame": "http://i1.hdslb.com/bfs/storyff/_000005sz7v823rv9a2uyjsg1rb45akb_firsti.jpg",
        "ctime": 1774338044
      }
    ],
    "subtitle": {
      "allow_submit": false,
      "list": []
    },
    "is_season_display": false,
    "user_garb": {
      "url_image_ani_cut": ""
    },
    "honor_reply": {},
    "like_icon": "",
    "need_jump_bv": false,
    "disable_show_up_info": false,
    "is_story_play": 1,
    "is_view_self": false
  }
}

在这一步我们就可以拿到视频的cid,多P视频会有多个不同的cid

2026-03-26T16:04:09.png
2026-03-26T16:04:09.png

得到了cid36935959931我们就可以尝试调用api了

GET https://api.bilibili.com/x/player/playurl
?bvid=BV1AAQqBBELn
&cid=36935959931
&qn=120            // 画质: 120=4K, 116=1080P60, 112=1080P+, 80=1080P, 64=720P
&fnval=4048         // 功能标志位,4048 = 请求 DASH + HDR + 4K + AV1 + 8K
&fourk=1            // 允许4K

我们编辑完成了如上请求后继续Post看一下

2026-03-26T16:13:13.png
2026-03-26T16:13:13.png

我们得到了这一长串json
但查看他的结构无非也就是这些
2026-03-26T16:13:01.png
2026-03-26T16:13:01.png

其中ID的值不同也就代表了所提供的下载地址的api分辨率和码率不一样
具体可以参考下表

画质ID对照表

id 分辨率 说明 需要登录
127 3840×2160 8K 大会员
120 3840×2160 4K 大会员
116 1920×1080 1080P 60帧 大会员
112 1920×1080 1080P 高码率 大会员
80 1920×1080 1080P 登录
64 1280×720 720P 登录
32 852×480 480P 免登录
16 640×360 360P 免登录

音质ID对照表

id 说明
30251 Hi-Res 无损
30250 杜比全景声
30280 192K 高音质
30232 132K 中音质
30216 64K 低音质

但我们拿到下载地址由于b站CDN自身的鉴权是无法直接下载的
需要添加以下header
按照此格式进行请求

curl -o audio.m4s \
  -H "Referer: https://www.bilibili.com" \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" \
  -H "Origin: https://www.bilibili.com" \
  "下载地址"

就会发现我们可以进行正确下载了

参考项目:
https://github.com/nilaoda/BBDown
https://github.com/kengwang/BiliDuang

哔哩哔哩视频直链解析下载分析
https://blog.snowfox.cc/index.php/archives/11/
本文作者 miza
发布时间 2026-03-26
许可协议 CC BY-NC-SA 4.0
发表新评论