4.1 KiB
4.1 KiB
唱歌视频生成失败诊断
唱歌视频生成失败诊断
问题现象
- 从截图看到任务相关的请求
- 日志显示有视频生成失败的情况
- API查询任务382返回"任务不存在"
诊断结果
任务状态
通过API查询 http://192.168.1.141:30101/sing/generate/382 返回:
{"code":404,"msg":"任务不存在","data":null}
这说明:
- 任务382可能已被删除或从未创建
- 或者任务ID不是382
从日志分析
截图中的日志显示:
- 多个请求返回200状态码
- 有"视频生成成功"的日志
- 也有"视频生成失败"的日志
- 提到"任务2次失败"
可能的原因
1. EMO模型调用失败
唱歌功能使用阿里云DashScope的EMO模型生成视频,可能的问题:
- API密钥配置错误或过期
- 网络连接问题
- 内容安全审核未通过
- 并发限制超出
2. 音频处理失败
- 音频文件下载失败
- 音频分段处理出错
- FFmpeg命令执行失败
3. 视频合成失败
- 分段视频生成失败
- 视频拼接过程出错
- OSS上传失败
4. 资源限制
- 用户视频生成次数不足
- 并发任务数超出限制
- 内存或磁盘空间不足
排查步骤
步骤1: 检查数据库中的错误信息
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: 检查分段视频状态
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配置问题
# 检查配置文件
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
需要检查的项目
- 数据库中任务382的详细错误信息
- 应用运行日志
- 分段视频生成状态
- 用户剩余视频生成次数
快速诊断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
);
下一步操作
- 执行上述SQL查询获取详细错误信息
- 检查应用日志文件(查找"任务 382"相关日志)
- 如果是内容安全问题,尝试更换歌曲或形象
- 如果是API问题,检查DashScope配额和网络连接
- 使用重试接口重新生成