# 唱歌视频生成失败诊断 # 唱歌视频生成失败诊断 ## 问题现象 - 从截图看到任务相关的请求 - 日志显示有视频生成失败的情况 - API查询任务382返回"任务不存在" ## 诊断结果 ### 任务状态 通过API查询 `http://192.168.1.141:30101/sing/generate/382` 返回: ```json {"code":404,"msg":"任务不存在","data":null} ``` 这说明: 1. 任务382可能已被删除或从未创建 2. 或者任务ID不是382 ### 从日志分析 截图中的日志显示: - 多个请求返回200状态码 - 有"视频生成成功"的日志 - 也有"视频生成失败"的日志 - 提到"任务2次失败" ## 可能的原因 ### 1. EMO模型调用失败 唱歌功能使用阿里云DashScope的EMO模型生成视频,可能的问题: - API密钥配置错误或过期 - 网络连接问题 - 内容安全审核未通过 - 并发限制超出 ### 2. 音频处理失败 - 音频文件下载失败 - 音频分段处理出错 - FFmpeg命令执行失败 ### 3. 视频合成失败 - 分段视频生成失败 - 视频拼接过程出错 - OSS上传失败 ### 4. 资源限制 - 用户视频生成次数不足 - 并发任务数超出限制 - 内存或磁盘空间不足 ## 排查步骤 ### 步骤1: 检查数据库中的错误信息 ```sql SELECT id, status, error_msg, payload, created_at, updated_at FROM generation_task WHERE id = 382; ``` ### 步骤2: 检查应用日志 查看lover应用的日志文件,搜索任务382相关的错误信息: ``` 任务 382 generation_task_id.*382 ``` ### 步骤3: 检查EMO配置 检查 `lover/.env` 或 `lover/config.py` 中的配置: - DASHSCOPE_API_KEY - EMO_MAX_CONCURRENCY - SING_MERGE_MAX_CONCURRENCY ### 步骤4: 检查分段视频状态 ```sql SELECT id, segment_id, status, error_msg, dashscope_task_id FROM song_segment_video WHERE song_id IN ( SELECT JSON_EXTRACT(payload, '$.song_id') FROM generation_task WHERE id = 382 ); ``` ### 步骤5: 测试EMO API连接 创建测试脚本验证EMO API是否正常工作。 ## 常见解决方案 ### 方案1: 内容安全审核问题 如果错误信息包含"内容安全"相关字样: - 检查歌词内容是否合规 - 检查恋人形象是否通过审核 - 尝试更换其他歌曲 ### 方案2: API配置问题 ```python # 检查配置文件 DASHSCOPE_API_KEY = "your-api-key" EMO_MAX_CONCURRENCY = 1 SING_MERGE_MAX_CONCURRENCY = 1 ``` ### 方案3: 重试任务 使用重试接口: ``` POST /sing/retry/{task_id} ``` ### 方案4: 清理临时文件 检查并清理临时目录,确保有足够的磁盘空间。 ## 配置检查结果 ### 已确认的配置 - ✅ DASHSCOPE_API_KEY: 已配置 - ✅ EMO_MAX_CONCURRENCY: 1 - ✅ SING_MERGE_MAX_CONCURRENCY: 2 - ✅ OSS配置: 已配置阿里云OSS ### 需要检查的项目 1. 数据库中任务382的详细错误信息 2. 应用运行日志 3. 分段视频生成状态 4. 用户剩余视频生成次数 ## 快速诊断SQL ```sql -- 查看任务详情 SELECT id, user_id, lover_id, status, error_msg, JSON_PRETTY(payload) as payload_detail, created_at, updated_at FROM generation_task WHERE id = 382; -- 查看关联的分段视频 SELECT sv.id, sv.segment_id, sv.status, sv.error_msg, sv.dashscope_task_id, sv.video_url, ss.segment_index, ss.duration_ms FROM song_segment_video sv LEFT JOIN song_segment ss ON sv.segment_id = ss.id WHERE sv.song_id = ( SELECT JSON_EXTRACT(payload, '$.song_id') FROM generation_task WHERE id = 382 ) AND sv.image_hash = ( SELECT JSON_EXTRACT(payload, '$.image_hash') FROM generation_task WHERE id = 382 ) ORDER BY ss.segment_index; -- 查看用户剩余次数 SELECT u.id, u.video_gen_remaining, u.image_gen_remaining FROM user u WHERE u.id = ( SELECT user_id FROM generation_task WHERE id = 382 ); ``` ## 下一步操作 1. 执行上述SQL查询获取详细错误信息 2. 检查应用日志文件(查找"任务 382"相关日志) 3. 如果是内容安全问题,尝试更换歌曲或形象 4. 如果是API问题,检查DashScope配额和网络连接 5. 使用重试接口重新生成