feat: 新增哔哩哔哩下载分辨率设置

- 在 config/tools.yaml 中添加哔哩哔哩下载分辨率配置项
- 在 guoba.support.js 中新增哔哩哔哩下载分辨率选择项
- 在 utils/bilibili.js 中实现分辨率标签拼接功能
- 在 apps/tools.js 中加载哔哩哔哩最高分辨率配置
- 在 utils/bbdown-util.js 中添加分辨率参数到 BBDown 命令
- 在 constants/constant.js 中定义哔哩哔哩下载分辨率列表
This commit is contained in:
zhiyu1998 2024-09-18 14:00:32 +08:00
parent 78db32133d
commit 7aa487b13a
7 changed files with 46 additions and 5 deletions

View File

@ -250,6 +250,8 @@ export class tools extends plugin {
this.biliCDN = this.toolsConfig.biliCDN; this.biliCDN = this.toolsConfig.biliCDN;
// 加载哔哩哔哩是否使用Aria2 // 加载哔哩哔哩是否使用Aria2
this.biliDownloadMethod = this.toolsConfig.biliDownloadMethod; this.biliDownloadMethod = this.toolsConfig.biliDownloadMethod;
// 加载哔哩哔哩最高分辨率
this.biliResolution = this.toolsConfig.biliResolution;
// 加载抖音Cookie // 加载抖音Cookie
this.douyinCookie = this.toolsConfig.douyinCookie; this.douyinCookie = this.toolsConfig.douyinCookie;
// 加载抖音是否压缩 // 加载抖音是否压缩
@ -735,6 +737,7 @@ export class tools extends plugin {
biliSessData: this.biliSessData, biliSessData: this.biliSessData,
biliUseAria2: this.biliDownloadMethod === 1, biliUseAria2: this.biliDownloadMethod === 1,
biliCDN: BILI_CDN_SELECT_LIST.find(item => item.value === this.biliCDN)?.sign, biliCDN: BILI_CDN_SELECT_LIST.find(item => item.value === this.biliCDN)?.sign,
biliResolution: this.biliResolution,
}); });
// 发送视频 // 发送视频
return this.sendVideoToUpload(e, `${ tempPath }.mp4`); return this.sendVideoToUpload(e, `${ tempPath }.mp4`);

View File

@ -17,6 +17,7 @@ biliDisplaySummary: false # 是否显示哔哩哔哩的总结
biliUseBBDown: false # 是否使用BBDown默认不开启开启后使用强劲的BBDown下载最高画质 biliUseBBDown: false # 是否使用BBDown默认不开启开启后使用强劲的BBDown下载最高画质
biliCDN: 0 # 哔哩哔哩 CDN默认为0表示不使用 biliCDN: 0 # 哔哩哔哩 CDN默认为0表示不使用
biliDownloadMethod: 0 # 哔哩哔哩的下载方式0默认使用原生稳定的下载方式如果你在乎内存可以使用轻量的wget和axel下载方式如果在乎性能可以使用Aria2下载 biliDownloadMethod: 0 # 哔哩哔哩的下载方式0默认使用原生稳定的下载方式如果你在乎内存可以使用轻量的wget和axel下载方式如果在乎性能可以使用Aria2下载
biliResolution: 1 # 哔哩哔哩的下载画质0为原画1为清晰画2为流畅画默认为0
douyinCookie: '' # douyin's cookie, 格式odin_tt=xxx;passport_fe_beating_status=xxx;sid_guard=xxx;uid_tt=xxx;uid_tt_ss=xxx;sid_tt=xxx;sessionid=xxx;sessionid_ss=xxx;sid_ucp_v1=xxx;ssid_ucp_v1=xxx;passport_assist_user=xxx;ttwid=xxx; douyinCookie: '' # douyin's cookie, 格式odin_tt=xxx;passport_fe_beating_status=xxx;sid_guard=xxx;uid_tt=xxx;uid_tt_ss=xxx;sid_tt=xxx;sessionid=xxx;sessionid_ss=xxx;sid_ucp_v1=xxx;ssid_ucp_v1=xxx;passport_assist_user=xxx;ttwid=xxx;
douyinCompression: true # true-压缩false-不压缩;是否使用压缩视频格式的抖音(默认使用),使用后加速视频发送 douyinCompression: true # true-压缩false-不压缩;是否使用压缩视频格式的抖音(默认使用),使用后加速视频发送

View File

@ -1,11 +1,11 @@
- { - {
version: 1.8.1, version: 1.8.2,
data: data:
[ [
新增<span class="cmd">哔哩哔哩下载分辨率设置</span>功能,
新增<span class="cmd">自定义识别</span>功能, 新增<span class="cmd">自定义识别</span>功能,
修正<span class="cmd">油管分辨率降低到720P</span>功能, 修正<span class="cmd">油管分辨率降低到720P</span>功能,
新增<span class="cmd">小飞机解析 Beta</span>功能, 新增<span class="cmd">小飞机解析 Beta</span>功能,
新增<span class="cmd">BBDown更换CDN</span>功能,
支持<span class="cmd">锅巴</span>插件,方便查看和修改配置, 支持<span class="cmd">锅巴</span>插件,方便查看和修改配置,
输入<span class="cmd">#R帮助</span>获取插件帮助, 输入<span class="cmd">#R帮助</span>获取插件帮助,
输入<span class="cmd">#R更新</span>更新插件, 输入<span class="cmd">#R更新</span>更新插件,

View File

@ -177,6 +177,16 @@ export const BILI_DOWNLOAD_METHOD = Object.freeze([
{ label: '轻量axel/wget', value: 2 } { label: '轻量axel/wget', value: 2 }
]); ]);
export const BILI_RESOLUTION_LIST = Object.freeze([
{ label: '4K 超清', value: 0 },
{ label: '1080P 60帧', value: 1 },
{ label: '1080P 高码率', value: 2 },
{ label: '1080P 高清', value: 3 },
{ label: '720P 高清', value: 4 },
{ label: '480P 清晰', value: 5 },
{ label: '360P 流畅', value: 6 },
]);
/** /**
* 消息撤回时间 * 消息撤回时间
* @type {number} * @type {number}

View File

@ -1,6 +1,6 @@
import _ from "lodash"; import _ from "lodash";
import path from "path"; import path from "path";
import { BILI_CDN_SELECT_LIST, BILI_DOWNLOAD_METHOD } from "./constants/constant.js"; import { BILI_CDN_SELECT_LIST, BILI_DOWNLOAD_METHOD, BILI_RESOLUTION_LIST } from "./constants/constant.js";
import model from "./model/config.js"; import model from "./model/config.js";
const pluginName = `rconsole-plugin`; const pluginName = `rconsole-plugin`;
@ -191,6 +191,16 @@ export function supportGuoba() {
options: BILI_DOWNLOAD_METHOD, options: BILI_DOWNLOAD_METHOD,
} }
}, },
{
field: "tools.biliResolution",
label: "bili最高分辨率",
bottomHelpMessage:
"哔哩哔哩的最高分辨率目前仅适用于开启BBDown后默认为1080p可以自行根据服务器进行调整",
component: "Select",
componentProps: {
options: BILI_RESOLUTION_LIST,
}
},
{ {
field: "tools.douyinCookie", field: "tools.douyinCookie",
label: "抖音的Cookie", label: "抖音的Cookie",

View File

@ -1,4 +1,5 @@
import { exec } from 'child_process'; import { exec } from 'child_process';
import { getResolutionLabels } from "./bilibili.js";
/** /**
* 使用BBDown下载 * 使用BBDown下载
@ -7,7 +8,7 @@ import { exec } from 'child_process';
* @param BBDownOptions BBDown选项目前仅支持session登录使用Aria2下载CDN * @param BBDownOptions BBDown选项目前仅支持session登录使用Aria2下载CDN
*/ */
export function startBBDown(videoUrl, downloadDir, BBDownOptions) { export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
const { biliSessData, biliUseAria2, biliCDN } = BBDownOptions; const { biliSessData, biliUseAria2, biliCDN, biliResolution } = BBDownOptions;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// logger.info(videoUrl); // logger.info(videoUrl);
@ -28,8 +29,10 @@ export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
if (!(videoUrl.includes("play\/ep") || videoUrl.includes("play\/ss"))) { if (!(videoUrl.includes("play\/ep") || videoUrl.includes("play\/ss"))) {
pParam = pageParam ? '-p ' + pageParam + ' -M \"temp\"' : '-p 1' + ' -M \"temp\"'; pParam = pageParam ? '-p ' + pageParam + ' -M \"temp\"' : '-p 1' + ' -M \"temp\"';
} }
// 构造 -q 参数 (画质优先级,用逗号分隔 例: "8K 超高清, 1080P 高码率, HDR 真彩, 杜比视界"
const qParam = `-q \"${getResolutionLabels(biliResolution)}\"`;
// 说明:-F 自定义名称,-c 自定义Cookie --work-dir 设置下载目录,-M 多p下载的时候命名 // 说明:-F 自定义名称,-c 自定义Cookie --work-dir 设置下载目录,-M 多p下载的时候命名
const command = `BBDown ${videoUrl} -e \"hevc,av1,avc\" --work-dir ${downloadDir} ${biliSessData ? '-c SESSDATA=' + biliSessData : ''} ${pParam} -F temp --skip-subtitle --skip-cover ${biliUseAria2 ? '--use-aria2c' : ''} ${biliCDN ? '--upos-host ' + biliCDN : ''}`; const command = `BBDown ${videoUrl} -e \"hevc,av1,avc\" ${qParam} --work-dir ${downloadDir} ${biliSessData ? '-c SESSDATA=' + biliSessData : ''} ${pParam} -F temp --skip-subtitle --skip-cover ${biliUseAria2 ? '--use-aria2c' : ''} ${biliCDN ? '--upos-host ' + biliCDN : ''}`;
logger.info(command); logger.info(command);
// logger.info(command); // logger.info(command);
// 直接调用BBDown因为它已经在系统路径中 // 直接调用BBDown因为它已经在系统路径中

View File

@ -5,6 +5,7 @@ import fs from "node:fs";
import path from "path"; import path from "path";
import qrcode from "qrcode" import qrcode from "qrcode"
import util from "util"; import util from "util";
import { BILI_RESOLUTION_LIST } from "../constants/constant.js";
import { import {
BILI_BVID_TO_CID, BILI_BVID_TO_CID,
BILI_DYNAMIC, BILI_DYNAMIC,
@ -543,3 +544,16 @@ function replaceP2PUrl(url) {
return url; return url;
} }
} }
/**
* 拼接分辨率例如"720P 高清, 480P 清晰, 360P 流畅"
* @param selectedValue
* @returns {*}
*/
export function getResolutionLabels(selectedValue) {
// 过滤出 value 大于等于 selectedValue 的所有对象
const filteredResolutions = BILI_RESOLUTION_LIST.filter(resolution => resolution.value >= selectedValue);
// 将这些对象的 label 拼接成一个字符串
return filteredResolutions.map(resolution => resolution.label).join(', ');
}