Files
ViGent2/Docs/DevLogs/Day3.md
2026-01-20 17:14:10 +08:00

4.1 KiB
Raw Permalink Blame History

Day 3: MuseTalk 推理环境修复与验证


🔧 MuseTalk 推理环境修复

问题描述

MuseTalk 口型同步功能失效。后端日志显示任务完成但生成的视频与原视频大小完全一致28MB说明执行了 fallback 逻辑直接复制原视频MuseTalk 推理过程静默失败。

根本原因分析

  1. PyTorch 版本不兼容:服务器安装了 PyTorch 2.5.1+cu121但 mmcv 没有以此版本预编译的 CUDA 扩展,导致 import mmcv 失败。
  2. MMLab 依赖缺失conda 环境中缺少 mmcv, mmdet, mmengine 等必要依赖。
  3. 模型路径错误HuggingFace 下载的模型结构包含嵌套目录(如 models/musetalk/musetalk/),且部分文件夹名称不符合代码预期(如服务器上为 sd-vae-ft-mse,代码期望 sd-vae)。
  4. 模型权重缺失:缺少 dwpose, syncnet, face-parse-bisent 等辅助模型权重。

解决方案

1. 环境重建

降级 PyTorch 并安装官方推荐的 MMLab 版本:

# 降级 PyTorch (配合 CUDA 11.8)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118

# 安装 MMLab 依赖
pip install --no-cache-dir -U openmim
mim install mmengine
mim install "mmcv==2.0.1"
mim install "mmdet==3.1.0"
pip install chumpy --no-build-isolation
pip install "mmpose==1.1.0" --no-deps

2. 模型目录修复

重组目录结构并创建符号链接以匹配代码预期:

cd models/MuseTalk/models
# 修复 sd-vae 路径
ln -s sd-vae-ft-mse sd-vae
# 修复 config.json 命名
cd musetalk && ln -s musetalk.json config.json

3. 补全缺失模型

下载 dwpose, syncnet, face-parse-bisent 模型到对应目录。

结果

  • 推理脚本成功运行:测试脚本成功加载所有模型并处理视频帧。
  • 帧生成确认:在输出目录中验证生成了 593 帧 PNG 图片。

⚠️ 遗留问题

  • 视频合成未完成:虽然推理生成了帧图片,但最终的 MP4 视频文件尚未生成。可能是 inference.py 中调用 ffmpeg 进行视频合成的步骤有问题,或者 ffmpeg 调用参数需要调整。需要进一步排查视频合成逻辑。

🛠️ 视频合成问题修复

问题分析

经排查 inference.py 代码,发现以下问题:

  1. FFmpeg 调用静默失败:原代码使用 os.system() 调用 ffmpeg无法捕获错误输出且忽略了返回值。
  2. API 参数不匹配musetalk_api.py 传递 --video_path 等命令行参数,但 inference.py 仅支持 YAML 配置文件,导致 API 调用时参数解析错误。
  3. 临时文件清理过早:发生错误时立即删除了临时帧,导致无法排查问题。
  4. 路径兼容性FFmpeg 命令中对路径的处理可能在某些 shell 环境下存在问题。

修复方案

已重写 scripts/inference.py

  1. 增强 FFmpeg 调用:替换 os.systemsubprocess.run(..., check=True, capture_output=True),即使失败也能打印完整的 stdout/stderr 错误日志。
  2. 支持命令行参数:添加 --video_path--audio_path--output_path 参数支持,使其能直接被 API 调用(通过构建临时任务配置)。
  3. 优化错误处理:增加 try-except 块,并在失败时保留临时文件以便调试,添加了详细的 Traceback 打印。
  4. 完善参数映射:自动处理 output_pathoutput_vid_name 的映射。

下一步

  1. 将本地更新的 models/MuseTalk/scripts/inference.py 同步到服务器。
  2. 在服务器上运行测试,观察 FFmpeg 是否成功合成 MP4。
  3. 验证 API 端到端调用是否成功。

🐛 前端端口配置修复 (17:03)

问题:后端日志或文档指引访问 3002 端口,但 Next.js 默认启动在 3000导致无法访问。 修复

  1. 修改 frontend/package.json 默认启动命令为 next dev -p 3002
  2. 更新 DEPLOY_MANUAL.md 明确端口参数 --port 3002状态 已修复