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/)
|
// output/ 在项目根的父级(美图/output/)
|
||||||
const OUTPUT_BASE = path.join(SKILLS_DIR, '..', '..', '..', '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 参数解析
|
// CLI 参数解析
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -259,7 +272,11 @@ function cmdMark(args) {
|
|||||||
if (args.draftName) item.draftName = args.draftName
|
if (args.draftName) item.draftName = args.draftName
|
||||||
if (args.forwardCopy) item.forwardCopy = args.forwardCopy
|
if (args.forwardCopy) item.forwardCopy = args.forwardCopy
|
||||||
if (args.hashtags) item.hashtags = args.hashtags
|
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)
|
batch.stats = calcStats(batch.items)
|
||||||
writeJson(manifestPath, batch)
|
writeJson(manifestPath, batch)
|
||||||
@@ -376,7 +393,7 @@ function cmdExport(args) {
|
|||||||
音色: item.voice || '',
|
音色: item.voice || '',
|
||||||
转发文案带话题: forwardFull,
|
转发文案带话题: forwardFull,
|
||||||
草稿名称: item.draftName || '',
|
草稿名称: item.draftName || '',
|
||||||
草稿地址: item.draftUrl || '',
|
草稿地址: resolveDraftUrl(item),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,12 +46,14 @@ async function phaseAssemble(manifest, manifestPath, options) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const { assemble } = require('../capcut_assemble')
|
const { assemble } = require('../capcut_assemble')
|
||||||
|
const { BASE_URL } = require('./capcut-api')
|
||||||
const result = await assemble(assembleArgs)
|
const result = await assemble(assembleArgs)
|
||||||
// 保存草稿地址到 manifest,供批量导出使用
|
// 保存草稿地址到 manifest,供批量导出使用
|
||||||
if (result && result.draftUrl) {
|
// 用 BASE_URL + draft_id 构造公网可下载的绝对路径
|
||||||
manifest.draftUrl = result.draftUrl
|
if (result && result.draftId) {
|
||||||
|
manifest.draftUrl = `${BASE_URL}/get_draft?draft_id=${result.draftId}`
|
||||||
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8')
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8')
|
||||||
log('assemble', `草稿地址已保存: ${result.draftUrl}`)
|
log('assemble', `草稿地址已保存: ${manifest.draftUrl}`)
|
||||||
}
|
}
|
||||||
log('assemble', '成片完成')
|
log('assemble', '成片完成')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user