4.8 KiB
4.8 KiB
唱歌视频生成失败问题总结
问题现象
多个唱歌视频生成任务失败:
- 任务382: 失败,错误信息显示为"文本上显示"(截断)
- 任务384: 失败,错误信息为"文件下载失败"
根本原因
OSS Bucket配置错误
当前配置(错误)
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
问题分析
-
任务382测试结果:
- 图片URL: ✅ 可访问(hello12312312 bucket)
- 音频URL: ❌ 404错误(hello12312312 bucket中不存在)
-
任务384:
- 错误信息:"文件下载失败"
- 原因相同:尝试从错误的bucket下载资源
-
成功案例对比:
- 成功的任务使用:
nvlovers.oss-cn-qingdao.aliyuncs.com - 失败的任务使用:
hello12312312.oss-cn-hangzhou.aliyuncs.com
- 成功的任务使用:
为什么会失败
文件下载流程
- 系统从数据库读取歌曲的音频URL
- 音频URL指向
nvloversbucket(青岛) - 但系统配置使用
hello12312312bucket(杭州) - 当需要处理音频时,可能会尝试从配置的bucket下载
- 文件不存在,返回404,任务失败
错误传播
歌曲音频在 nvlovers bucket
↓
配置指向 hello12312312 bucket
↓
下载音频文件失败(404)
↓
任务失败:"文件下载失败"
解决方案
立即修复(推荐)
修改 .env 文件,统一使用 nvlovers bucket:
# 修改这三行
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
操作步骤
-
停止当前服务
- 双击运行
杀死端口30101.bat - 或在终端按 Ctrl+C
- 双击运行
-
修改配置文件
- 打开
.env文件 - 修改上述三行配置
- 保存文件
- 打开
-
重启服务
- 双击运行
启动项目.bat
- 双击运行
-
验证修复
- 重新尝试生成唱歌视频
- 检查新任务是否成功
验证方法
方法1: 查看新任务的URL
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: 测试资源可访问性
python xuniYou/测试任务384资源.py "音频URL" "图片URL"
为什么之前有些任务成功了
查看数据库导出,发现:
- 任务261-305中,大部分任务是成功的
- 这些成功的任务使用的资源URL都指向
nvloversbucket - 失败的任务(262-264, 266, 382, 384)都是因为资源问题
可能的原因:
- 某些资源(如恋人图片)上传到了
hello12312312,可以访问 - 但歌曲音频都在
nvlovers,无法访问 - 当任务需要下载音频处理时,就会失败
预防措施
1. 统一OSS配置
- 只使用一个bucket
- 所有环境使用相同配置
- 避免配置文件不一致
2. 添加资源检查
在生成任务前,检查资源是否可访问:
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:
# 使用ossutil同步资源
ossutil cp -r \
oss://nvlovers/uploads/ \
oss://hello12312312/uploads/ \
--update
常见问题
Q1: 修改配置后还是失败?
A: 确保:
- 配置文件已保存
- 服务已重启
- 没有其他配置文件覆盖(如
lover/.env)
Q2: 如何确认使用的是哪个bucket?
A: 查看新创建任务的URL:
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配置不一致。修复方法很简单:
- 修改
.env中的三行配置 - 重启服务
- 重新测试
修复后,所有新任务都会使用正确的bucket,不会再出现"文件下载失败"的错误。