feat: 为图片遮罩新增 KenBurns 效果及视频阶段并发优化

- capcut_assemble: 添加 KenBurns 效果支持(慢速推拉动画)
- phase-videos: 区分"无任务"与"已有 video"的日志输出,避免误报跳过
- 张不苦账号提示词文档精简(拆分/图片提词/遮罩提词词)
- 新增 CHANGELOG.md 和 CONSTRAINT_ENGINE.md 约束引擎文档

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
lc
2026-05-07 19:53:03 +08:00
parent 4e03ed7197
commit 1c0703cc80
8 changed files with 1153 additions and 744 deletions

View File

@@ -27,6 +27,7 @@ const {
addSubtitles,
consolidateTracks,
addEffects, addFilter,
addKenBurns,
} = require('./lib/capcut-tracks')
const { saveManifest } = require('./lib/pipeline-utils')
const { syncDraft, registerDraft } = require('./sync-to-jianying')

View File

@@ -39,7 +39,14 @@ async function phaseVideos(manifest, manifestPath, options) {
}
items.push(it)
}
if (items.length === 0) { log('videos', '无待处理 item跳过'); return }
const pendingItems = items.filter(it => !it.video)
if (pendingItems.length === 0) {
// 有 videoCandidates 但全部已有 video → 直接返回(不打印跳过消息)
return
}
log('videos', `${pendingItems.length} 个待处理`)
// 选择生成器
let Api, pollFn
@@ -103,7 +110,7 @@ async function phaseVideos(manifest, manifestPath, options) {
// Phase 2: 提交新任务(并发 3
const concurrency = 3
log('videos', `提交 ${needSubmit.length} 个新任务(并发: ${concurrency}...`)
log('videos', ` ${needSubmit.length} 个新任务(并发: ${concurrency}...`)
const submitted = []
for (let i = 0; i < needSubmit.length; i += concurrency) {