From 7aa487b13a0a4ef85c0379b7737ed01dd66d58e2 Mon Sep 17 00:00:00 2001
From: zhiyu1998 <542716863@qq.com>
Date: Wed, 18 Sep 2024 14:00:32 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=96=B0=E5=A2=9E=E5=93=94?=
=?UTF-8?q?=E5=93=A9=E5=93=94=E5=93=A9=E4=B8=8B=E8=BD=BD=E5=88=86=E8=BE=A8?=
=?UTF-8?q?=E7=8E=87=E8=AE=BE=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在 config/tools.yaml 中添加哔哩哔哩下载分辨率配置项
- 在 guoba.support.js 中新增哔哩哔哩下载分辨率选择项
- 在 utils/bilibili.js 中实现分辨率标签拼接功能
- 在 apps/tools.js 中加载哔哩哔哩最高分辨率配置
- 在 utils/bbdown-util.js 中添加分辨率参数到 BBDown 命令
- 在 constants/constant.js 中定义哔哩哔哩下载分辨率列表
---
apps/tools.js | 3 +++
config/tools.yaml | 1 +
config/version.yaml | 4 ++--
constants/constant.js | 10 ++++++++++
guoba.support.js | 12 +++++++++++-
utils/bbdown-util.js | 7 +++++--
utils/bilibili.js | 14 ++++++++++++++
7 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/apps/tools.js b/apps/tools.js
index 9fe3b5c..7088b9a 100644
--- a/apps/tools.js
+++ b/apps/tools.js
@@ -250,6 +250,8 @@ export class tools extends plugin {
this.biliCDN = this.toolsConfig.biliCDN;
// 加载哔哩哔哩是否使用Aria2
this.biliDownloadMethod = this.toolsConfig.biliDownloadMethod;
+ // 加载哔哩哔哩最高分辨率
+ this.biliResolution = this.toolsConfig.biliResolution;
// 加载抖音Cookie
this.douyinCookie = this.toolsConfig.douyinCookie;
// 加载抖音是否压缩
@@ -735,6 +737,7 @@ export class tools extends plugin {
biliSessData: this.biliSessData,
biliUseAria2: this.biliDownloadMethod === 1,
biliCDN: BILI_CDN_SELECT_LIST.find(item => item.value === this.biliCDN)?.sign,
+ biliResolution: this.biliResolution,
});
// 发送视频
return this.sendVideoToUpload(e, `${ tempPath }.mp4`);
diff --git a/config/tools.yaml b/config/tools.yaml
index a61cb2e..c5d51cd 100644
--- a/config/tools.yaml
+++ b/config/tools.yaml
@@ -17,6 +17,7 @@ biliDisplaySummary: false # 是否显示哔哩哔哩的总结
biliUseBBDown: false # 是否使用BBDown,默认不开启,开启后使用强劲的BBDown下载最高画质
biliCDN: 0 # 哔哩哔哩 CDN,默认为0表示不使用
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;
douyinCompression: true # true-压缩,false-不压缩;是否使用压缩视频格式的抖音(默认使用),使用后加速视频发送
diff --git a/config/version.yaml b/config/version.yaml
index 7baf2bc..1311791 100644
--- a/config/version.yaml
+++ b/config/version.yaml
@@ -1,11 +1,11 @@
- {
- version: 1.8.1,
+ version: 1.8.2,
data:
[
+ 新增哔哩哔哩下载分辨率设置功能,
新增自定义识别功能,
修正油管分辨率降低到720P功能,
新增小飞机解析 Beta功能,
- 新增BBDown更换CDN功能,
支持锅巴插件,方便查看和修改配置,
输入#R帮助获取插件帮助,
输入#R更新更新插件,
diff --git a/constants/constant.js b/constants/constant.js
index c4a9e51..91bb2e7 100644
--- a/constants/constant.js
+++ b/constants/constant.js
@@ -177,6 +177,16 @@ export const BILI_DOWNLOAD_METHOD = Object.freeze([
{ 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}
diff --git a/guoba.support.js b/guoba.support.js
index 3e41a4a..6918e70 100644
--- a/guoba.support.js
+++ b/guoba.support.js
@@ -1,6 +1,6 @@
import _ from "lodash";
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";
const pluginName = `rconsole-plugin`;
@@ -191,6 +191,16 @@ export function supportGuoba() {
options: BILI_DOWNLOAD_METHOD,
}
},
+ {
+ field: "tools.biliResolution",
+ label: "bili最高分辨率",
+ bottomHelpMessage:
+ "哔哩哔哩的最高分辨率(目前仅适用于开启BBDown后),默认为1080p,可以自行根据服务器进行调整",
+ component: "Select",
+ componentProps: {
+ options: BILI_RESOLUTION_LIST,
+ }
+ },
{
field: "tools.douyinCookie",
label: "抖音的Cookie",
diff --git a/utils/bbdown-util.js b/utils/bbdown-util.js
index 32ec3a9..e8b3526 100644
--- a/utils/bbdown-util.js
+++ b/utils/bbdown-util.js
@@ -1,4 +1,5 @@
import { exec } from 'child_process';
+import { getResolutionLabels } from "./bilibili.js";
/**
* 使用BBDown下载
@@ -7,7 +8,7 @@ import { exec } from 'child_process';
* @param BBDownOptions BBDown选项(目前仅支持session登录、使用Aria2下载、CDN)
*/
export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
- const { biliSessData, biliUseAria2, biliCDN } = BBDownOptions;
+ const { biliSessData, biliUseAria2, biliCDN, biliResolution } = BBDownOptions;
return new Promise((resolve, reject) => {
// logger.info(videoUrl);
@@ -28,8 +29,10 @@ export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
if (!(videoUrl.includes("play\/ep") || videoUrl.includes("play\/ss"))) {
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下载的时候命名
- 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);
// 直接调用BBDown,因为它已经在系统路径中
diff --git a/utils/bilibili.js b/utils/bilibili.js
index 20881ad..4c6da22 100644
--- a/utils/bilibili.js
+++ b/utils/bilibili.js
@@ -5,6 +5,7 @@ import fs from "node:fs";
import path from "path";
import qrcode from "qrcode"
import util from "util";
+import { BILI_RESOLUTION_LIST } from "../constants/constant.js";
import {
BILI_BVID_TO_CID,
BILI_DYNAMIC,
@@ -543,3 +544,16 @@ function replaceP2PUrl(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(', ');
+}