From 1523287649b745dfe2d2d04ee61b29f664fce4a2 Mon Sep 17 00:00:00 2001 From: CSSZYF <63802741+CSSZYF@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:40:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=20yt-dlp=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E6=94=B9=E4=B8=BA=E5=BC=82=E6=AD=A5=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E4=BB=A5=E8=A7=A3=E5=86=B3=E8=BF=9B=E7=A8=8B=E9=98=BB?= =?UTF-8?q?=E5=A1=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/yt-dlp-util.js | 56 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/utils/yt-dlp-util.js b/utils/yt-dlp-util.js index 8b977d8..06cf9ca 100644 --- a/utils/yt-dlp-util.js +++ b/utils/yt-dlp-util.js @@ -1,4 +1,4 @@ -import { exec, execSync } from "child_process"; +import { exec } from "child_process"; /** * 构建梯子参数 @@ -40,9 +40,19 @@ function constructEncodingParam(url) { * @returns string */ export function ytDlpGetDuration(url, isOversea, proxy, cookiePath = "") { - // 构造 cookie 参数 - const cookieParam = constructCookiePath(url, cookiePath); - return execSync(`yt-dlp --get-duration --skip-download ${cookieParam} ${constructProxyParam(isOversea, proxy)} ${url}`); + return new Promise((resolve, reject) => { + // 构造 cookie 参数 + const cookieParam = constructCookiePath(url, cookiePath); + const command = `yt-dlp --get-duration --skip-download ${cookieParam} ${constructProxyParam(isOversea, proxy)} ${url}`; + exec(command, (error, stdout, stderr) => { + if (error) { + logger.error(`[R插件][yt-dlp审计] Error executing ytDlpGetDuration: ${error}. Stderr: ${stderr}`); + reject(error); + } else { + resolve(stdout.trim()); + } + }); + }); } /** @@ -54,11 +64,21 @@ export function ytDlpGetDuration(url, isOversea, proxy, cookiePath = "") { * @returns string */ export function ytDlpGetTilt(url, isOversea, proxy, cookiePath = "") { - // 构造 cookie 参数 - const cookieParam = constructCookiePath(url, cookiePath); - // 构造 编码 参数 - const encodingParam = constructEncodingParam(url); - return execSync(`yt-dlp --get-title --skip-download ${cookieParam} ${ constructProxyParam(isOversea, proxy) } ${ url } ${encodingParam}`); + return new Promise((resolve, reject) => { + // 构造 cookie 参数 + const cookieParam = constructCookiePath(url, cookiePath); + // 构造 编码 参数 + const encodingParam = constructEncodingParam(url); + const command = `yt-dlp --get-title --skip-download ${cookieParam} ${ constructProxyParam(isOversea, proxy) } ${ url } ${encodingParam}`; + exec(command, (error, stdout, stderr) => { + if (error) { + logger.error(`[R插件][yt-dlp审计] Error executing ytDlpGetTilt: ${error}. Stderr: ${stderr}`); + reject(error); + } else { + resolve(stdout.trim()); + } + }); + }); } /** @@ -69,10 +89,20 @@ export function ytDlpGetTilt(url, isOversea, proxy, cookiePath = "") { * @param proxy * @param cookiePath */ -export function ytDlpGetThumbnail(path, url, isOversea, proxy, cookiePath= "") { - // 构造 cookie 参数 - const cookieParam = constructCookiePath(url, cookiePath); - return execSync(`yt-dlp --write-thumbnail --convert-thumbnails png --skip-download ${cookieParam} ${constructProxyParam(isOversea, proxy)} ${url} -P ${path} -o "thumbnail.%(ext)s"`); +export function ytDlpGetThumbnail(path, url, isOversea, proxy, cookiePath = "") { + return new Promise((resolve, reject) => { + // 构造 cookie 参数 + const cookieParam = constructCookiePath(url, cookiePath); + const command = `yt-dlp --write-thumbnail --convert-thumbnails png --skip-download ${cookieParam} ${constructProxyParam(isOversea, proxy)} ${url} -P "${path}" -o "thumbnail.%(ext)s"`; + exec(command, (error, stdout, stderr) => { + if (error) { + logger.error(`[R插件][yt-dlp审计] Error executing ytDlpGetThumbnail: ${error}. Stderr: ${stderr}`); + reject(error); + } else { + resolve(); // The return value is not used + } + }); + }); } /**