yutto icon indicating copy to clipboard operation
yutto copied to clipboard

🐛 个别视频大会员清晰度解析不完整

Open haoxiujie opened this issue 5 months ago • 1 comments

问题简述

电影《楚门的世界》https://www.bilibili.com/bangumi/play/ep250583 登录大会员的情况下,直接播放是有4K和1080P高码率的,但是下载解析却没有这两个清晰度。 换成其他电影可以正常解析出大会员的4K和1080P高码率清晰度

复现方式

(.python3_venv) root@VM-4-7-debian:/home/file/bilibili/hevc# yutto https://www.bilibili.com/bangumi/play/ep250583 -c "xxx" --download-vcodec-priority "hevc,avc" --no-subtitle --no-danmaku --debug DEBUG get_user_info cache miss: user_info, all cache keys: [] DEBUG Fetch json: https://api.bilibili.com/x/web-interface/nav 大会员 成功以大会员身份登录~ WARN download_vcodec_priority(hevc, avc)不包含所有下载视频编码(avc, hevc, av1),不包含部分将永远不会选择哦 WARN download_vcodec 参数值(avc)不是优先级最高的编码(hevc),可能会导致下载失败哦 DEBUG ffmpeg -codecs DEBUG ffmpeg -encoders DEBUG ffmpeg -codecs DEBUG ffmpeg -encoders DEBUG Get redircted url: https://www.bilibili.com/bangumi/play/ep250583 DEBUG Fetch json: https://api.bilibili.com/pgc/view/web/season?ep_id=250583 DEBUG Fetch json: http://api.bilibili.com/pgc/view/web/season?season_id=25812 番剧 楚门的世界 DEBUG Fetch json: https://api.bilibili.com/pgc/player/web/v2/playurl?avid=&bvid=BV17W411r78v&cid=25808535672&qn=127&fnver=0&fnval=4048&fourk=1&support_multi_audio=true&from_client=BROWSER DEBUG Fetch bin: http://i0.hdslb.com/bfs/archive/eaf1d1dd3dffcd7c44ec7c98e389fabeca643b94.jpg INFO 开始处理视频 正片 INFO 共包含以下 12 个视频流: INFO 0 [AVC ] [1920x1080] <1080P 高清> #3 INFO * 1 [HEVC] [1920x1080] <1080P 高清> #3 INFO 2 [AV1 ] [1920x1080] <1080P 高清> #3 INFO 3 [AVC ] [1280x720 ] <720P 高清 > #3 INFO 4 [HEVC] [1280x720 ] <720P 高清 > #3 INFO 5 [AV1 ] [1280x720 ] <720P 高清 > #3 INFO 6 [AVC ] [ 852x480 ] <480P 清晰 > #3 INFO 7 [HEVC] [ 852x480 ] <480P 清晰 > #3 INFO 8 [AV1 ] [ 852x480 ] <480P 清晰 > #3 INFO 9 [AVC ] [ 640x360 ] <360P 流畅 > #3 INFO 10 [HEVC] [ 640x360 ] <360P 流畅 > #3 INFO 11 [AV1 ] [ 640x360 ] <360P 流畅 > #3 INFO 共包含以下 3 个音频流: INFO * 0 [MP4A] <320kbps > INFO 1 [MP4A] < 64kbps > INFO 2 [MP4A] <128kbps >

环境信息

  • OS: Debian GNU/Linux 12 (bookworm) 12.11
  • Python: Python 版本号 3.11.2
  • yutto: yutto 版本号 yutto 2.0.3
  • FFmpeg: FFmpeg 版本号 ffmpeg version 5.1.6-0+deb12u1

额外信息

No response

一点点的自我检查

  • [x] 充分阅读 README.md,特别是与本 issue 相关的部分
  • [x] 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • [x] 本 issue 在 issuesdiscussion 中并没有重复问题
  • [x] 确认所希望下载的资源是本人有权限获取的,yutto 不提供任何超出本人权限的资源下载方式

haoxiujie avatar Aug 02 '25 16:08 haoxiujie

看了下,无论是 https://api.bilibili.com/pgc/player/web/v2/playurl(yutto 现在使用的接口)还是 SSR 之后的 html 里都是最高 1080P 的(清晰度 80),当切换到 4k(清晰度 120)时会有如下请求:

fetch("https://api.bilibili.com/ogv/player/playview?csrf=<bili_jct>", {
  "headers": {
    "accept": "application/json, text/plain, */*",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",
    "cache-control": "no-cache",
    "content-type": "application/json",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "sec-ch-ua": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"macOS\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site"
  },
  "referrer": "https://www.bilibili.com/bangumi/play/ep250583",
  "body": "{\"scene\":\"normal\",\"video_index\":{\"bvid\":null,\"cid\":null,\"ogv_season_id\":null,\"ogv_episode_id\":250583},\"video_param\":{\"qn\":120},\"player_param\":{\"fnver\":0,\"fnval\":4048,\"drm_tech_type\":2},\"exp_info\":{\"ogv_half_pay\":true}}",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

其中,csrf 是需要传入 bili_jct 的,所以后续可能仅 SESSDATA 鉴权是不够的了,所以在此之前可能会先设计下接口层面

另外,使用 playview 接口获取 playurl 总归感觉不是很合理,因此短期暂时不计划跟进,会继续观望一段时间看看

SigureMo avatar Aug 03 '25 07:08 SigureMo