Ai_GirlFriend/xuniYou/唱歌视频失败问题总结.md

200 lines
4.8 KiB
Markdown
Raw Normal View History

2026-03-02 18:57:11 +08:00
# 唱歌视频生成失败问题总结
## 问题现象
多个唱歌视频生成任务失败:
- **任务382**: 失败,错误信息显示为"文本上显示"(截断)
- **任务384**: 失败,错误信息为"文件下载失败"
## 根本原因
**OSS Bucket配置错误**
### 当前配置(错误)
```env
ALIYUN_OSS_BUCKET_NAME=hello12312312
ALIYUN_OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com
ALIYUN_OSS_CDN_DOMAIN=https://hello12312312.oss-cn-hangzhou.aliyuncs.com
```
### 实际资源位置(正确)
歌曲音频文件存储在:
```
nvlovers.oss-cn-qingdao.aliyuncs.com
```
### 问题分析
1. **任务382测试结果**
- 图片URL: ✅ 可访问hello12312312 bucket
- 音频URL: ❌ 404错误hello12312312 bucket中不存在
2. **任务384**
- 错误信息:"文件下载失败"
- 原因相同尝试从错误的bucket下载资源
3. **成功案例对比**
- 成功的任务使用:`nvlovers.oss-cn-qingdao.aliyuncs.com`
- 失败的任务使用:`hello12312312.oss-cn-hangzhou.aliyuncs.com`
## 为什么会失败
### 文件下载流程
1. 系统从数据库读取歌曲的音频URL
2. 音频URL指向 `nvlovers` bucket青岛
3. 但系统配置使用 `hello12312312` bucket杭州
4. 当需要处理音频时可能会尝试从配置的bucket下载
5. 文件不存在返回404任务失败
### 错误传播
```
歌曲音频在 nvlovers bucket
配置指向 hello12312312 bucket
下载音频文件失败404
任务失败:"文件下载失败"
```
## 解决方案
### 立即修复(推荐)
修改 `.env` 文件,统一使用 `nvlovers` bucket
```bash
# 修改这三行
ALIYUN_OSS_BUCKET_NAME=nvlovers
ALIYUN_OSS_ENDPOINT=https://oss-cn-qingdao.aliyuncs.com
ALIYUN_OSS_CDN_DOMAIN=https://nvlovers.oss-cn-qingdao.aliyuncs.com
```
### 操作步骤
1. **停止当前服务**
- 双击运行 `杀死端口30101.bat`
- 或在终端按 Ctrl+C
2. **修改配置文件**
- 打开 `.env` 文件
- 修改上述三行配置
- 保存文件
3. **重启服务**
- 双击运行 `启动项目.bat`
4. **验证修复**
- 重新尝试生成唱歌视频
- 检查新任务是否成功
## 验证方法
### 方法1: 查看新任务的URL
```sql
SELECT
id,
JSON_EXTRACT(payload, '$.audio_url') as audio_url,
status,
error_msg
FROM nf_generation_tasks
ORDER BY id DESC
LIMIT 5;
```
URL应该包含 `nvlovers.oss-cn-qingdao.aliyuncs.com`
### 方法2: 测试资源可访问性
```bash
python xuniYou/测试任务384资源.py "音频URL" "图片URL"
```
## 为什么之前有些任务成功了
查看数据库导出,发现:
- 任务261-305中大部分任务是**成功**的
- 这些成功的任务使用的资源URL都指向 `nvlovers` bucket
- 失败的任务262-264, 266, 382, 384都是因为资源问题
可能的原因:
1. 某些资源(如恋人图片)上传到了 `hello12312312`,可以访问
2. 但歌曲音频都在 `nvlovers`,无法访问
3. 当任务需要下载音频处理时,就会失败
## 预防措施
### 1. 统一OSS配置
- 只使用一个bucket
- 所有环境使用相同配置
- 避免配置文件不一致
### 2. 添加资源检查
在生成任务前,检查资源是否可访问:
```python
def check_resource_accessible(url):
"""检查资源是否可访问"""
try:
response = requests.head(url, timeout=5)
return response.status_code == 200
except:
return False
# 在创建任务前检查
if not check_resource_accessible(audio_url):
raise HTTPException(status_code=400, detail="音频文件不可访问")
```
### 3. 改进错误提示
记录详细的错误信息,包括:
- 具体的URL
- HTTP状态码
- 完整的错误堆栈
### 4. 资源迁移
如果需要使用 `hello12312312` bucket
```bash
# 使用ossutil同步资源
ossutil cp -r \
oss://nvlovers/uploads/ \
oss://hello12312312/uploads/ \
--update
```
## 常见问题
### Q1: 修改配置后还是失败?
A: 确保:
1. 配置文件已保存
2. 服务已重启
3. 没有其他配置文件覆盖(如 `lover/.env`
### Q2: 如何确认使用的是哪个bucket
A: 查看新创建任务的URL
```sql
SELECT JSON_EXTRACT(payload, '$.audio_url')
FROM nf_generation_tasks
ORDER BY id DESC LIMIT 1;
```
### Q3: 需要迁移已有资源吗?
A: 如果用户已上传文件到 `hello12312312`
- 方案A: 迁移到 `nvlovers`(推荐)
- 方案B: 保留两个bucket修改代码逻辑
### Q4: 为什么有两个bucket
A: 可能是:
- 测试环境和生产环境使用不同bucket
- 配置文件复制时出错
- 多人开发时配置不一致
## 总结
唱歌视频生成失败的核心问题是OSS配置不一致。修复方法很简单
1. 修改 `.env` 中的三行配置
2. 重启服务
3. 重新测试
修复后所有新任务都会使用正确的bucket不会再出现"文件下载失败"的错误。