rc-plugin/utils/bbdown-util.js
zhiyu1998 7aa487b13a feat: 新增哔哩哔哩下载分辨率设置
- 在 config/tools.yaml 中添加哔哩哔哩下载分辨率配置项
- 在 guoba.support.js 中新增哔哩哔哩下载分辨率选择项
- 在 utils/bilibili.js 中实现分辨率标签拼接功能
- 在 apps/tools.js 中加载哔哩哔哩最高分辨率配置
- 在 utils/bbdown-util.js 中添加分辨率参数到 BBDown 命令
- 在 constants/constant.js 中定义哔哩哔哩下载分辨率列表
2024-09-18 14:00:32 +08:00

53 lines
2.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { exec } from 'child_process';
import { getResolutionLabels } from "./bilibili.js";
/**
* 使用BBDown下载
* @param videoUrl 视频链接
* @param downloadDir 下载目录
* @param BBDownOptions BBDown选项目前仅支持session登录、使用Aria2下载、CDN
*/
export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
const { biliSessData, biliUseAria2, biliCDN, biliResolution } = BBDownOptions;
return new Promise((resolve, reject) => {
// logger.info(videoUrl);
// 解析URL并提取参数p页数
const urlObj = new URL(videoUrl);
const params = urlObj.searchParams;
const newParams = new URLSearchParams();
const pageParam = params.get('p');
// 这里提取p参数防止丢失
if (params.has('p')) {
newParams.set('p', pageParam);
}
// 这里如果有p参数就放置到url上没有就相当于作了一次去跟踪参数的清除也方便BBDown下载
urlObj.search = newParams.toString();
videoUrl = urlObj.toString();
let pParam = '-M \"temp\" \"-q 720P 高清, 480P 清晰, 360P 流畅\"';
// 如果不是番剧就常规逻辑
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\" ${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因为它已经在系统路径中
exec(command, (error, stdout, stderr) => {
if (error) {
reject(`[R插件][BBDown]执行出错: ${error.message}`);
return;
}
if (stderr) {
reject(`[R插件][BBDown]错误信息: ${stderr}`);
return;
}
// logger.mark(`[R插件][BBDown]输出结果: ${stdout}`);
resolve(stdout);
});
});
}