diff --git a/apps/desktop/src-tauri/src/business/services/material_service.rs b/apps/desktop/src-tauri/src/business/services/material_service.rs index fbc5b96..bda742c 100644 --- a/apps/desktop/src-tauri/src/business/services/material_service.rs +++ b/apps/desktop/src-tauri/src/business/services/material_service.rs @@ -448,21 +448,35 @@ impl MaterialService { println!("分镜头切分完成:{} 个片段", primary_segments.len()); println!("二次切分后:{} 个片段", final_segments.len()); - // 创建输出目录:项目目录/待分类/素材名称_segments - let pending_dir = std::path::Path::new(&project.path).join("待分类"); + // 创建输出目录:项目目录/pending/素材名称_segments (使用英文避免中文路径问题) + let mut project_path = project.path.clone(); - // 确保待分类目录存在 + // 处理 Windows 长路径格式,移除 \\?\ 前缀 + if project_path.starts_with("\\\\?\\") { + project_path = project_path[4..].to_string(); + } + + let pending_dir = std::path::Path::new(&project_path).join("pending"); + + // 确保pending目录存在 if !pending_dir.exists() { std::fs::create_dir_all(&pending_dir) - .map_err(|e| anyhow!("创建待分类目录失败: {}", e))?; - println!("创建待分类目录: {:?}", pending_dir); + .map_err(|e| anyhow!("创建pending目录失败: {}", e))?; + println!("创建pending目录: {:?}", pending_dir); } let material_name = material.name.trim_end_matches(".mp4"); let output_dir = pending_dir.join(format!("{}_segments", material_name)); - let output_dir_str = output_dir.to_string_lossy().to_string(); - println!("视频切分输出目录: {}", output_dir_str); + // 标准化路径,确保FFmpeg可以处理 + let output_dir_str = output_dir.to_string_lossy().to_string(); + let normalized_output_dir = if output_dir_str.starts_with("\\\\?\\") { + output_dir_str[4..].to_string() + } else { + output_dir_str + }; + + println!("视频切分输出目录: {}", normalized_output_dir); // 根据配置选择切分模式 let output_files = match config.split_mode { @@ -470,7 +484,7 @@ impl MaterialService { println!("使用快速切分模式(可能有前几秒无画面问题)"); FFmpegService::split_video_fast( &material.original_path, - &output_dir_str, + &normalized_output_dir, &final_segments, &material.name.replace(".mp4", ""), )? @@ -479,7 +493,7 @@ impl MaterialService { println!("使用精确切分模式(重新编码,确保画面完整)"); FFmpegService::split_video( &material.original_path, - &output_dir_str, + &normalized_output_dir, &final_segments, &material.name.replace(".mp4", ""), )? @@ -488,7 +502,7 @@ impl MaterialService { println!("使用智能切分模式(关键帧对齐)"); FFmpegService::split_video_smart( &material.original_path, - &output_dir_str, + &normalized_output_dir, &final_segments, &material.name.replace(".mp4", ""), )?