2.9 KiB
2.9 KiB
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/ 下,非嵌套结构。
修复:在服务器上创建符号链接
cd /home/rongye/ProgramFiles/ViGent/models/MuseTalk/models/musetalk
ln -s ../musetalkV15 musetalkV15
问题二:音视频长度不匹配触发退出
musetalk/utils/audio_processor.py 中存在致命缺陷:
# 原代码 - 音频比视频短时触发 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 范围
修复:重写为零填充逻辑,不再中断推理
# 新代码 - 音频不足时使用零填充
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 完成事项
- 修复 Next.js 启动参数
- 创建权重检测软链接
- 修复 audio_processor.py 音视频长度不匹配问题
- 增强 inference.py 错误日志
- 验证 MuseTalk 推理生成 MP4
- 更新 MuseTalk 部署文档