Files
video-create/.claude/skills/video-from-script/scripts/lib/phase-assemble.js
sion123 3a641244a5 feat(capcut-pipeline): 将 TTS 配音切换为 CosyVoice 并重构动画系统
- 将 TTS 引擎从 Qwen-TTS 切换为阿里云 CosyVoice(DashScope WebSocket)
- 输出格式从 WAV(24kHz)改为 MP3
- 重构图片动画分拆逻辑,支持组合动画(如"渐显+放大")
- 移除字幕关键词高亮相关字段
- 移除已删除的 `uploadAudioToOSS` 函数,统一使用 `uploadToOSS`
- 更新文档和配置默认值以匹配新引擎
2026-05-01 14:50:50 +08:00

46 lines
1.5 KiB
JavaScript

/**
* Phase: assemble — CapCut 成片组装
*
* 图片/视频 + TTS → 剪映草稿
*/
const { log, getManifestDir } = require('./pipeline-utils')
async function phaseAssemble(manifest, manifestPath, options) {
const dir = getManifestDir(manifestPath)
const accountConfig = options.accountConfig || {}
const capcutConfig = accountConfig.capcut || {}
const videoItems = manifest.items.filter(it => it.video && it.status === 'done')
const hasVideos = videoItems.length > 0
const mode = hasVideos ? 'videos' : 'images'
const assembleArgs = {
input: dir,
manifest: manifestPath,
mode,
format: manifest.format || accountConfig.defaultFormat || '9:16',
subtitles: mode === 'images' ? 'true' : 'false',
voiceover: manifest.items.some(it => it.audio) ? 'true' : 'false',
duration: '4',
animation: capcutConfig.animation || '渐显+放大',
}
if (capcutConfig.defaultBGM) assembleArgs.bgm = capcutConfig.defaultBGM
if (capcutConfig.effects) assembleArgs.effects = capcutConfig.effects.join(',')
if (capcutConfig.filter) assembleArgs.filter = capcutConfig.filter
log('assemble', `模式: ${mode}, 字幕: true, 配音: ${assembleArgs.voiceover}, 动画: ${assembleArgs.animation}`)
try {
const { assemble } = require('../capcut_assemble')
await assemble(assembleArgs)
log('assemble', '成片完成')
} catch (err) {
log('assemble', `成片失败: ${err.message}`)
throw err
}
}
module.exports = { phaseAssemble }