feat(video-from-script): 自动解析草稿地址并修复导出空值问题
在 `cmdMark` 命令中,当标记为已完成状态且未提供草稿地址时,自动从子任务的 `manifestPath` 中读取 `draftUrl`;在 `cmdExport` 导出 CSV 时,使用 `resolveDraftUrl` 函数统一解析草稿地址,确保导出结果包含完整的公网可下载链接。 同时修改 `phaseAssemble` 阶段,使用 `BASE_URL` 和 `draftId` 构造公网可访问的绝对路径保存到 manifest 中,替代之前仅保存相对路径的方式。
This commit is contained in:
@@ -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),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user