Ai_GirlFriend/xuniYou/唱歌视频失败问题总结.md
2026-03-02 18:57:11 +08:00

200 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 唱歌视频生成失败问题总结
## 问题现象
多个唱歌视频生成任务失败:
- **任务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不会再出现"文件下载失败"的错误。