186 lines
4.1 KiB
Markdown
186 lines
4.1 KiB
Markdown
# 唱歌视频生成失败诊断
|
||
|
||
# 唱歌视频生成失败诊断
|
||
|
||
## 问题现象
|
||
- 从截图看到任务相关的请求
|
||
- 日志显示有视频生成失败的情况
|
||
- 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. 使用重试接口重新生成
|