diff --git a/apps/tools.js b/apps/tools.js index 447febb..fd6aae9 100644 --- a/apps/tools.js +++ b/apps/tools.js @@ -12,7 +12,7 @@ import querystring from "querystring"; import puppeteer from "../../../lib/puppeteer/puppeteer.js"; import { BILI_CDN_SELECT_LIST, - BILI_DEFAULT_INTRO_LEN_LIMIT, + BILI_DEFAULT_INTRO_LEN_LIMIT, BILI_RESOLUTION_LIST, COMMON_USER_AGENT, DIVIDING_LINE, douyinTypeMap, @@ -998,8 +998,10 @@ export class tools extends plugin { } // =================默认下载方式===================== try { + // 获取分辨率参数 QN,如果没有默认使用 480p --> 32 + const qn = BILI_RESOLUTION_LIST.find(item => item.value === this.biliResolution).qn || 32; // 获取下载链接 - const data = await getDownloadUrl(url, this.biliSessData); + const data = await getDownloadUrl(url, this.biliSessData, qn); if (data.audioUrl != null) { await this.downBili(tempPath, data.videoUrl, data.audioUrl); diff --git a/config/tools.yaml b/config/tools.yaml index b16a534..b86c1f6 100644 --- a/config/tools.yaml +++ b/config/tools.yaml @@ -20,7 +20,7 @@ biliDisplaySummary: false # 是否显示哔哩哔哩的总结 biliUseBBDown: false # 是否使用BBDown,默认不开启,开启后使用强劲的BBDown下载最高画质 biliCDN: 0 # 哔哩哔哩 CDN,默认为0表示不使用 biliDownloadMethod: 0 # 哔哩哔哩的下载方式:0默认使用原生稳定的下载方式,如果你在乎内存可以使用轻量的wget和axel下载方式,如果在乎性能可以使用Aria2下载 -biliResolution: 1 # 哔哩哔哩的下载画质,0为原画,1为清晰画,2为流畅画(默认为0) +biliResolution: 5 # 哔哩哔哩的下载画质,默认480p(因为不用登录),参考 {BILI_RESOLUTION_LIST} useLocalNeteaseAPI: false # 是否使用网易云解析自建API useNeteaseSongRequest: false # 是否开启网易云点歌功能 diff --git a/constants/constant.js b/constants/constant.js index 44dfeac..0becdb5 100644 --- a/constants/constant.js +++ b/constants/constant.js @@ -184,13 +184,13 @@ export const BILI_DOWNLOAD_METHOD = Object.freeze([ ]); export const BILI_RESOLUTION_LIST = Object.freeze([ - { label: '8K 超高清', value: 0 }, - { label: '4K 超清', value: 1 }, - { label: '1080P 高码率', value: 2 }, - { label: '1080P 高清', value: 3 }, - { label: '720P 高清', value: 4 }, - { label: '480P 清晰', value: 5 }, - { label: '360P 流畅', value: 6 }, + { label: '8K 超高清', value: 0, qn: 127 }, + { label: '4K 超清', value: 1, qn: 120 }, + { label: '1080P 高码率', value: 2, qn: 112 }, + { label: '1080P 高清', value: 3, qn: 80 }, + { label: '720P 高清', value: 4, qn: 64 }, + { label: '480P 清晰', value: 5, qn: 32 }, + { label: '360P 流畅', value: 6, qn: 16 }, ]); export const YOUTUBE_GRAPHICS_LIST = Object.freeze([ diff --git a/constants/tools.js b/constants/tools.js index 6d96d8e..f620874 100644 --- a/constants/tools.js +++ b/constants/tools.js @@ -10,7 +10,7 @@ export const BILI_SUMMARY = "https://api.bilibili.com/x/web-interface/view/concl * https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/video/videostream_url.md * @type {string} */ -export const BILI_PLAY_STREAM = "https://api.bilibili.com/x/player/playurl?cid={cid}&bvid={bvid}&qn=64&fnval=16" +export const BILI_PLAY_STREAM = "https://api.bilibili.com/x/player/playurl?cid={cid}&bvid={bvid}&qn={qn}&fnval=16" /** * 动态信息 diff --git a/guoba.support.js b/guoba.support.js index 5b61425..2ce9479 100644 --- a/guoba.support.js +++ b/guoba.support.js @@ -214,7 +214,7 @@ export function supportGuoba() { field: "tools.biliResolution", label: "bili最高分辨率", bottomHelpMessage: - "哔哩哔哩的最高分辨率(目前仅适用于开启BBDown后),默认为1080p,可以自行根据服务器进行调整", + "【开不开BBDown都同步】哔哩哔哩的最高分辨率,默认为480p,可以自行根据服务器进行调整", component: "Select", componentProps: { options: BILI_RESOLUTION_LIST, diff --git a/utils/bilibili.js b/utils/bilibili.js index c9832bc..4c23766 100644 --- a/utils/bilibili.js +++ b/utils/bilibili.js @@ -14,7 +14,6 @@ import { BILI_SCAN_CODE_GENERATE, BILI_VIDEO_INFO } from "../constants/tools.js"; -import { saveJsonToFile } from "./common.js"; import { mkdirIfNotExists } from "./file.js"; export const BILI_HEADER = { @@ -204,9 +203,9 @@ async function axelDownloadBFile(url, fullFileName, progressCallback, videoDownl * @param SESSDATA * @returns {Promise} */ -export async function getDownloadUrl(url, SESSDATA) { +export async function getDownloadUrl(url, SESSDATA, qn) { const videoId = /video\/[^\?\/ ]+/.exec(url)[0].split("/")[1]; - const dash = await getBiliVideoWithSession(videoId, "", SESSDATA); + const dash = await getBiliVideoWithSession(videoId, "", SESSDATA, qn); // 获取关键信息 const { video, audio } = dash; const videoData = video?.[0]; @@ -327,13 +326,20 @@ export async function getBiliAudio(bvid, cid) { })) } -export async function getBiliVideoWithSession(bvid, cid, SESSDATA) { +export async function getBiliVideoWithSession(bvid, cid, SESSDATA, qn) { if (!cid) { - cid = await fetchCID(bvid).catch((err) => console.log(err)) + cid = await fetchCID(bvid).catch((err) => logger.error(err)) } + logger.info(`[R插件][BILI请求审计]:${ BILI_PLAY_STREAM + .replace("{bvid}", bvid) + .replace("{cid}", cid) + .replace("{qn}", qn) }`); // 返回一个fetch的promise return (new Promise((resolve, reject) => { - fetch(BILI_PLAY_STREAM.replace("{bvid}", bvid).replace("{cid}", cid), { + fetch(BILI_PLAY_STREAM + .replace("{bvid}", bvid) + .replace("{cid}", cid) + .replace("{qn}", qn), { headers: { ...BILI_HEADER, Cookie: `SESSDATA=${ SESSDATA }`