# Day 4: MuseTalk 口型同步完整修复 --- ## 🐛 Next.js 启动参数修复 (14:41) **问题**:`npm run dev -- --host 0.0.0.0` 报错 `unknown option '--host'` **修复**:Next.js 使用 `-H` 而非 `--host`,修改 `DEPLOY_MANUAL.md` **状态**:✅ 已修复 --- ## 🔧 MuseTalk 推理完整修复 ### 问题描述 视频生成后 `_lipsync.mp4` 文件大小与原视频完全一致 (28MB),说明 MuseTalk 推理静默失败,执行了 fallback 逻辑(直接复制原视频)。 ### 根因分析 #### 问题一:权重检测路径不匹配 `lipsync_service.py` 检查路径 `models/musetalk/musetalkV15`,但服务器上 `musetalkV15` 目录位于 `models/` 下,非嵌套结构。 **修复**:在服务器上创建符号链接 ```bash cd /home/rongye/ProgramFiles/ViGent/models/MuseTalk/models/musetalk ln -s ../musetalkV15 musetalkV15 ``` #### 问题二:音视频长度不匹配触发退出 `musetalk/utils/audio_processor.py` 中存在致命缺陷: ```python # 原代码 - 音频比视频短时触发 assert 失败并 exit() assert audio_clip.shape[1] == audio_feature_length_per_frame ... except Exception as e: print(f"Error occurred: {e}") # e 为空(AssertionError 无消息) exit() ``` 日志表现: ``` Error occurred: whisper_feature.shape: torch.Size([1, 275, 5, 384]) audio_index: 266-276 ← 超出 275 范围 ``` **修复**:重写为零填充逻辑,不再中断推理 ```python # 新代码 - 音频不足时使用零填充 if end_index > whisper_feature.shape[1]: available = whisper_feature[:, audio_index:] padding = torch.zeros(...) audio_clip = torch.cat([available, padding], dim=1) ``` ### 修改的文件 | 文件 | 修改内容 | |------|----------| | `musetalk/utils/audio_processor.py` | 音视频长度不匹配时使用零填充 | | `scripts/inference.py` | 增强错误日志,禁用 tqdm 避免输出干扰 | ### 验证结果 | 指标 | 修复前 | 修复后 | |------|--------|--------| | `_lipsync.mp4` 大小 | 28 MB (原视频) | 3.8 MB | | 推理帧数 | 0 | 321 帧 | | Exit code | 0 (静默失败) | 0 (真正成功) | ``` Executing: ffmpeg -y -v warning -r 60.0 -f image2 -i .../IMG_7384_.../%08d.png ... Combining Audio... Results saved to /home/rongye/.../debug_fixed.mp4 ``` --- ## 📝 文档更新 (15:30) 更新 `models/MuseTalk/DEPLOY.md`: - 详细的权重路径总览(目录树形式) - 关键软链接说明(`musetalk/musetalkV15`) - 与服务器实际配置验证对齐 - 修正 dwpose 模型大小 (62MB → 387MB) --- ## ✅ Day 4 完成事项 - [x] 修复 Next.js 启动参数 - [x] 创建权重检测软链接 - [x] 修复 audio_processor.py 音视频长度不匹配问题 - [x] 增强 inference.py 错误日志 - [x] 验证 MuseTalk 推理生成 MP4 - [x] 更新 MuseTalk 部署文档