# 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 版本: ```bash # 降级 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. 模型目录修复 重组目录结构并创建符号链接以匹配代码预期: ```bash 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.system` 为 `subprocess.run(..., check=True, capture_output=True)`,即使失败也能打印完整的 stdout/stderr 错误日志。 2. **支持命令行参数**:添加 `--video_path`、`--audio_path` 和 `--output_path` 参数支持,使其能直接被 API 调用(通过构建临时任务配置)。 3. **优化错误处理**:增加 try-except 块,并在失败时保留临时文件以便调试,添加了详细的 Traceback 打印。 4. **完善参数映射**:自动处理 `output_path` 到 `output_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`。 **状态**:✅ 已修复