feat: MiniMax TTS集成、口播批量剪辑流水线、执黑先行二号账号
- 新增 minimax-tts.js 和 minimax-voice-clone.js 脚本 - 新增口播批量剪辑流水线 (口播_assemble.js, 口播_pipeline.js) - 更新 video-from-script 各阶段脚本 (kling, images, tts, videos) - 新增执黑先行二号-风格延伸账号 - 更新执黑先行 account.json 配置 - 替换 ugc_product_seeding 参考图 - 更新 CLAUDE.md 和依赖配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -87,7 +87,8 @@ async function phaseTts(manifest, manifestPath, options = {}) {
|
||||
const audioDir = path.join(dir, 'audio')
|
||||
ensureDir(audioDir)
|
||||
|
||||
const { synthesize } = require('../qwen-tts')
|
||||
const engine = manifest.ttsEngine || 'qwen'
|
||||
const { synthesize } = engine === 'minimax' ? require('../minimax-tts') : require('../qwen-tts')
|
||||
|
||||
const videoDur = manifest.estimatedVideoDuration || 6
|
||||
const ttsRate = manifest.ttsRate || 1.15
|
||||
@@ -95,7 +96,22 @@ async function phaseTts(manifest, manifestPath, options = {}) {
|
||||
const items = manifest.items.filter(it =>
|
||||
(it.script || it.text) && !it.audio
|
||||
)
|
||||
if (items.length === 0) { log('tts', '无待处理 item(已合成),跳过'); return }
|
||||
if (items.length === 0) {
|
||||
const total = manifest.items.length
|
||||
const withAudio = manifest.items.filter(it => it.audio).length
|
||||
const withScript = manifest.items.filter(it => it.script || it.text).length
|
||||
if (withAudio === 0) {
|
||||
console.error("\n" + "=".repeat(60))
|
||||
console.error("❌ [tts] 严重错误:没有任何待处理的配音项,且 manifest 中也没有已生成的音频!")
|
||||
console.error("=".repeat(60))
|
||||
console.error(` 总数: ${total} | 有script: ${withScript} | 已有audio: ${withAudio}`)
|
||||
if (withScript === 0) console.error(" 根因: 所有 item 都缺少 script 文本 — 分镜文件有问题")
|
||||
console.error("=".repeat(60) + "\n")
|
||||
throw new Error(`TTS 阶段中断: ${total} 个 item 均无音频且无待处理项 (script=${withScript}/${total})`)
|
||||
}
|
||||
log('tts', '所有音频已合成,跳过')
|
||||
return
|
||||
}
|
||||
|
||||
log('tts', `共 ${items.length} 段, 视频固定时长=${videoDur}s, TTS语速=${ttsRate}x`)
|
||||
|
||||
@@ -131,6 +147,9 @@ async function phaseTts(manifest, manifestPath, options = {}) {
|
||||
model: manifest.ttsModel || undefined,
|
||||
instruction: manifest.ttsInstruction || undefined,
|
||||
rate: ttsRate,
|
||||
emotion: manifest.ttsEmotion || undefined,
|
||||
languageBoost: manifest.ttsLanguageBoost || undefined,
|
||||
pitch: manifest.ttsPitch ?? undefined,
|
||||
})
|
||||
break
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user