From ac6f110f283c8b33dbc3d2ea600207714a9787c6 Mon Sep 17 00:00:00 2001 From: sion123 <450702724@qq.com> Date: Sun, 17 May 2026 23:43:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(video-from-script):=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E8=8D=89=E7=A8=BF=E5=9C=B0=E5=9D=80=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA=E7=A9=BA=E5=80=BC=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 `cmdMark` 命令中,当标记为已完成状态且未提供草稿地址时,自动从子任务的 `manifestPath` 中读取 `draftUrl`;在 `cmdExport` 导出 CSV 时,使用 `resolveDraftUrl` 函数统一解析草稿地址,确保导出结果包含完整的公网可下载链接。 同时修改 `phaseAssemble` 阶段,使用 `BASE_URL` 和 `draftId` 构造公网可访问的绝对路径保存到 manifest 中,替代之前仅保存相对路径的方式。 --- .../scripts/batch-pipeline.js | 21 +++++++++++++++++-- .../scripts/lib/phase-assemble.js | 8 ++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.claude/skills/video-from-script/scripts/batch-pipeline.js b/.claude/skills/video-from-script/scripts/batch-pipeline.js index 0ae607d..850c9bb 100644 --- a/.claude/skills/video-from-script/scripts/batch-pipeline.js +++ b/.claude/skills/video-from-script/scripts/batch-pipeline.js @@ -20,6 +20,19 @@ const { SKILLS_DIR, ACCOUNTS_DIR, loadConfig, resolveVoice } = require('./lib/pi // output/ 在项目根的父级(美图/output/) const OUTPUT_BASE = path.join(SKILLS_DIR, '..', '..', '..', 'output') +// ============================================================================ +// 工具函数 +// ============================================================================ + +/** 从 batch item 解析草稿地址:自身 draftUrl 优先,否则读子任务 manifest */ +function resolveDraftUrl(item) { + if (item.draftUrl) return item.draftUrl + if (!item.manifestPath) return '' + try { + return readJson(path.resolve(item.manifestPath)).draftUrl || '' + } catch { return '' } +} + // ============================================================================ // CLI 参数解析 // ============================================================================ @@ -259,7 +272,11 @@ function cmdMark(args) { if (args.draftName) item.draftName = args.draftName if (args.forwardCopy) item.forwardCopy = args.forwardCopy if (args.hashtags) item.hashtags = args.hashtags - if (args.draftUrl) item.draftUrl = args.draftUrl + if (args.draftUrl) { + item.draftUrl = args.draftUrl + } else if (args.status === 'completed' && !item.draftUrl) { + item.draftUrl = resolveDraftUrl(item) || undefined + } batch.stats = calcStats(batch.items) writeJson(manifestPath, batch) @@ -376,7 +393,7 @@ function cmdExport(args) { 音色: item.voice || '', 转发文案带话题: forwardFull, 草稿名称: item.draftName || '', - 草稿地址: item.draftUrl || '', + 草稿地址: resolveDraftUrl(item), }) } diff --git a/.claude/skills/video-from-script/scripts/lib/phase-assemble.js b/.claude/skills/video-from-script/scripts/lib/phase-assemble.js index 35726d4..1fc6151 100644 --- a/.claude/skills/video-from-script/scripts/lib/phase-assemble.js +++ b/.claude/skills/video-from-script/scripts/lib/phase-assemble.js @@ -46,12 +46,14 @@ async function phaseAssemble(manifest, manifestPath, options) { try { const { assemble } = require('../capcut_assemble') + const { BASE_URL } = require('./capcut-api') const result = await assemble(assembleArgs) // 保存草稿地址到 manifest,供批量导出使用 - if (result && result.draftUrl) { - manifest.draftUrl = result.draftUrl + // 用 BASE_URL + draft_id 构造公网可下载的绝对路径 + if (result && result.draftId) { + manifest.draftUrl = `${BASE_URL}/get_draft?draft_id=${result.draftId}` fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8') - log('assemble', `草稿地址已保存: ${result.draftUrl}`) + log('assemble', `草稿地址已保存: ${manifest.draftUrl}`) } log('assemble', '成片完成') } catch (err) {