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

4.8 KiB
Raw Blame History

唱歌视频生成失败问题总结

问题现象

多个唱歌视频生成任务失败:

  • 任务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

问题分析

  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

# 修改这三行
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

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都指向 nvlovers bucket
  • 失败的任务262-264, 266, 382, 384都是因为资源问题

可能的原因:

  1. 某些资源(如恋人图片)上传到了 hello12312312,可以访问
  2. 但歌曲音频都在 nvlovers,无法访问
  3. 当任务需要下载音频处理时,就会失败

预防措施

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: 确保:

  1. 配置文件已保存
  2. 服务已重启
  3. 没有其他配置文件覆盖(如 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配置不一致。修复方法很简单

  1. 修改 .env 中的三行配置
  2. 重启服务
  3. 重新测试

修复后所有新任务都会使用正确的bucket不会再出现"文件下载失败"的错误。