From 7909a62e64a2154375050007aa908dea0e29e287 Mon Sep 17 00:00:00 2001 From: imeepos Date: Fri, 18 Jul 2025 13:45:59 +0800 Subject: [PATCH] =?UTF-8?q?debug:=20=E6=B7=BB=E5=8A=A0=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E7=89=87=E6=AE=B5=E6=A3=80=E6=9F=A5=E6=97=A5=E5=BF=97=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E8=99=9A=E6=8B=9F=E7=89=87=E6=AE=B5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题发现 从日志显示素材片段时长10.042秒,这是原始素材而不是二次切分片段。 ## 添加的日志 1. **素材检查日志**: - 素材名称和ID - 素材片段数量 - 分类记录数量 2. **虚拟片段创建日志**: - 当素材未切分时的警告 - 原始素材时长 - 虚拟片段的segment_id和category - 虚拟片段时长 3. **真实片段使用日志**: - 当素材已切分时的确认 - 真实片段的id、时长和category ## 问题分析 匹配逻辑中的问题: - 当material.segments.is_empty()时,创建虚拟片段 - 虚拟片段使用原始素材的完整时长(如10.042秒) - 与模板要求时长(如1.267秒)比较,导致超出692.8% ## 根本原因 素材没有被正确切分,导致匹配时使用原始素材时长而不是切分后的片段时长。 这些日志将帮助确认: 1. 素材是否被正确切分 2. 为什么会创建虚拟片段 3. 虚拟片段vs真实片段的使用情况 --- .../business/services/material_matching_service.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/desktop/src-tauri/src/business/services/material_matching_service.rs b/apps/desktop/src-tauri/src/business/services/material_matching_service.rs index 4f0d940..c1115c7 100644 --- a/apps/desktop/src-tauri/src/business/services/material_matching_service.rs +++ b/apps/desktop/src-tauri/src/business/services/material_matching_service.rs @@ -406,11 +406,17 @@ impl MaterialMatchingService { continue; } + println!("🔍 检查素材: {} ({})", material.name, material.id); + println!(" 素材片段数量: {}", material.segments.len()); + println!(" 分类记录数量: {}", records.len()); + // 检查是否有素材片段 if material.segments.is_empty() { + println!(" ⚠️ 素材未切分,创建虚拟片段"); // 如果素材没有被切分,但有分类记录,我们需要为每个分类记录创建对应的虚拟片段 // 因为每个分类记录的segment_id对应一个具体的片段 if let Some(duration) = material.get_duration() { + println!(" 原始素材时长: {:.3}秒", duration); // 为每个分类记录创建一个虚拟片段 for record in records { // 检查该片段是否已被使用 @@ -418,6 +424,8 @@ impl MaterialMatchingService { continue; // 跳过已使用的片段 } + println!(" 创建虚拟片段: segment_id={}, category={}", record.segment_id, record.category); + // 创建虚拟片段,使用分类记录中的segment_id let virtual_segment = MaterialSegment { id: record.segment_id.clone(), // 使用分类记录中的segment_id @@ -435,10 +443,12 @@ impl MaterialMatchingService { created_at: chrono::Utc::now(), }; + println!(" 虚拟片段时长: {:.3}秒", virtual_segment.duration); classified_segments.push((virtual_segment, record.category.clone())); } } } else { + println!(" ✅ 素材已切分,使用真实片段"); // 为每个素材片段查找对应的分类记录 for segment in &material.segments { // 检查该片段是否已被使用 @@ -448,6 +458,8 @@ impl MaterialMatchingService { // 查找该片段的分类记录 if let Some(record) = records.iter().find(|r| r.segment_id == segment.id) { + println!(" 真实片段: id={}, 时长={:.3}秒, category={}", + segment.id, segment.duration, record.category); classified_segments.push((segment.clone(), record.category.clone())); } }