feat(video-pipeline): 重构视频流水线,优化成片时间线规则和状态管理
- 引入 manifest.json 作为唯一状态源,所有子 Agent 操作回写 manifest - 重构 timebuilder 逻辑,支持四种视频适配策略(加速/裁剪/放缓/画面停顿) - 统一 TTS 阶段输出结构,单句和多句均写入 segments[] - 重写字幕和配音生成,基于 segments 精确时长实现音画同步 - 新增 confirm 命令支持按 id 范围确认,上传阶段分离图片和视频 - 添加中间产物写入 output/ 目录的约束,清理废弃配置参数
This commit is contained in:
@@ -17,7 +17,8 @@ async function phaseImages(manifest, manifestPath, options) {
|
||||
ensureDir(imagesDir)
|
||||
|
||||
const items = manifest.items.filter(it =>
|
||||
(!it.status || it.status === 'pending' || it.status === 'generating') && it.imagePrompt
|
||||
((!it.status || it.status === 'pending' || it.status === 'generating') && it.imagePrompt) ||
|
||||
(it.status === 'done' && manifest.mode === 'framePair' && it.file && it.lastFramePrompt && !it.lastFrame)
|
||||
)
|
||||
if (items.length === 0) { log('images', '无待处理 item,跳过'); return }
|
||||
|
||||
@@ -45,6 +46,14 @@ async function phaseImages(manifest, manifestPath, options) {
|
||||
item.status = 'generating'
|
||||
saveManifest(manifestPath, manifest)
|
||||
|
||||
// 仅补 lastFrame:首帧已存在,跳过首帧生成
|
||||
if (item.file && manifest.mode === 'framePair' && item.lastFramePrompt && !item.lastFrame) {
|
||||
log('images', `[${idx}] 补生成 lastFrame(首帧已有: ${item.file})`)
|
||||
await generateLastFrame(item, idx, manifest, dir, imagesDir, model, ratio, manifestPath)
|
||||
saveManifest(manifestPath, manifest)
|
||||
return { ok: true }
|
||||
}
|
||||
|
||||
let result
|
||||
if (model === 'gemini') {
|
||||
result = await generateGemini(item, idx, dir, imagesDir, ratio, refs)
|
||||
|
||||
Reference in New Issue
Block a user