From 318cffd35c6fea23c3f6acfe1974756ae104dff0 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 1 Sep 2026 12:11:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(smart-match):=20limit=20=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E5=8F=96=20segments.length=20=E4=B8=8B=E9=99=90=EF=BC=8C?= =?UTF-8?q?=E4=BF=9D=E8=AF=81=E6=AF=8F=E7=89=87=E6=AE=B5=E8=87=B3=E5=B0=91?= =?UTF-8?q?=201=20=E4=B8=AA=E7=B4=A0=E6=9D=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit computeLimitFromSegments 原逻辑 Math.ceil(totalSeconds/15) 在短模板 (如 14s 模板 4 片段)下仅返回 1,导致后端只分配 1 个素材无法覆盖 全部片段。改为 Math.max(segments.length, ...) 保证每个片段至少能 分到 1 个素材。 --- .../pages/generate/hooks/step2-materials/useSmartMatch.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts b/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts index e297b4626..3be6c288e 100755 --- a/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts +++ b/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts @@ -20,13 +20,14 @@ const SECONDS_PER_ASSET = 15 /** * 根据模板 segments 计算所需素材数量上限。 * 取每个 segment 的 duration_min 之和作为目标视频总时长, - * 再按 15 秒/素材估算需要多少个素材;结果钳制到 [1, 200] 区间(后端 limit 上限 200)。 + * 再按 15 秒/素材估算需要多少个素材,且保证不少于片段数(每个片段至少 1 个素材); + * 结果钳制到 [1, 200] 区间(后端 limit 上限 200)。 */ function computeLimitFromSegments(segments?: TemplateSegment[]): number { if (!segments || segments.length === 0) return DEFAULT_LIMIT const totalSeconds = segments.reduce((sum, seg) => sum + (seg.duration_min || 0), 0) if (totalSeconds <= 0) return DEFAULT_LIMIT - const limit = Math.ceil(totalSeconds / SECONDS_PER_ASSET) + const limit = Math.max(segments.length, Math.ceil(totalSeconds / SECONDS_PER_ASSET)) return Math.max(1, Math.min(limit, 200)) } -- 2.54.0