目录
[🖥️ Windows 系统本地部署 MuseTalk 教程](#🖥️ Windows 系统本地部署 MuseTalk 教程)
[🛠️ Windows 专属优化设置](#🛠️ Windows 专属优化设置)
[💡 高级技巧](#💡 高级技巧)
[1. 修改代码避免全加载(推荐)](#1. 修改代码避免全加载(推荐))
[2. 降低输入视频规格](#2. 降低输入视频规格)
[3. 增加系统虚拟内存(临时方案)](#3. 增加系统虚拟内存(临时方案))
[4. 分段处理长视频(终极方案)](#4. 分段处理长视频(终极方案))
🖥️ Windows 系统本地部署 MuseTalk 教程
-
环境准备:
-
安装 python 3.10 https://www.python.org/
-
勾选
Add Python to PATH- cmd - python --version
-
安装 Git
-
安装 CUDA 11.7 必须安装
-
安装 ffmpeg
-
配置环境变量到 Path C:\ffmpegxxx\bin
- ffmpeg -version
-
安装步骤:
bash
# 1. 打开命令提示符(管理员)
cmd 管理员打开
# 2. 克隆仓库
git clone https://github.com/TMElyralab/MuseTalk
cd MuseTalk
# 3. 创建虚拟环境
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process # 在当前PowerShell会话中临时允许脚本运行,不会影响其他会话:
python -m venv musetalk_venv
musetalk_venv\Scripts\activate (windows激活方式)
source musetalk_venv/bin/activate (linux激活方式)
# 4. 安装依赖(关键步骤!)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 卸载当前版本
pip uninstall torch torchvision torchaudio -y
# 安装依赖这里会出现很多问题,这里着重说明下
# 永久设置镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 设置长超时时间
pip --default-timeout=1000 install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121
# 在当前PowerShell会话中临时允许脚本运行,不会影响其他会话:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
# 安装MMLab软件包
pip install --no-cache-dir -U openmim -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install mmengine -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install "mmcv==2.0.1" -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install "mmdet==3.1.0" -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install "mmpose==1.1.0" -i https://pypi.tuna.tsinghua.edu.cn/simple
# 5. 下载权重
# 下载预训练模型(手动)
访问 https://huggingface.co/TMElyralab/MuseTalk/tree/main
下载所有 .pth 文件到 MuseTalk/weights 文件夹
您还可以从以下链接手动下载权重:
所有权重:https://huggingface.co/hengtuibabai/MuseTalk.models/tree/main
sd-vae-ft-mse https://huggingface.co/stabilityai/sd-vae-ft-mse/tree/main
whisper https://huggingface.co/openai/whisper-tiny/tree/main
dwpose https://huggingface.co/yzd-v/DWPose/tree/main
syncnet https://huggingface.co/ByteDance/LatentSync/tree/main
face-parse-bisent https://huggingface.co/ManyOtherFunctions/face-parse-bisent/tree/main
resnet18 https://download.pytorch.org/models/resnet18-5c106cde.pth
# 下载预训练模型(自动脚本)
# Run the script
download_weights.bat
sh ./download_weights.sh (linux)
#手动下载模型:在浏览器中访问链接 https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth,直接下载文件。
#放置到指定目录:将下载的文件保存到 C:\Users\Administrator/.cache\torch\hub\checkpoints\ 路径下,覆盖或替换现有文件。
# 6. 启动服务
python app.py
python app.py --use_float16 --ffmpeg_path ffmpeg-master-latest-win64-gpl-shared\bin
python app.py --ffmpeg_path C:\ffmpeg-master-latest-win64-gpl-shared\bin
python app.py --use_float16 --ffmpeg_path C:\ffmpeg-master-latest-win64-gpl-shared\bin
# 7. 浏览器访问
http://localhost:6006
# 修改代码,检查cpu还是gpu输出,CUDA是否可用
# load model weights
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA版本: {torch.version.cuda}")
print(f"设备: {torch.cuda.get_device_name(0)}")
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"Using device: {device}") # 打印最终设备:
# 权重应该组织在models如下所示
./models/
├── musetalk
│ └── musetalk.json
│ └── pytorch_model.bin
├── musetalkV15
│ └── musetalk.json
│ └── unet.pth
├── syncnet
│ └── latentsync_syncnet.pt
├── dwpose
│ └── dw-ll_ucoco_384.pth
├── face-parse-bisent
│ ├── 79999_iter.pth
│ └── resnet18-5c106cde.pth
├── sd-vae
│ ├── config.json
│ └── diffusion_pytorch_model.bin
└── whisper
├── config.json
├── pytorch_model.bin
└── preprocessor_config.json
🛠️ Windows 专属优化设置
- 解决显存不足:
-
编辑
configs/inference.yaml:resolution: 720 # 从1080改为720
batch_size: 1 # 8GB显存设为1
use_sr: false # 关闭超分辨率
- 加速模型加载:
- 下载 CUDA加速DLL
- 解压到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin
-
开机自启脚本(创建 MuseTalk.bat):
@echo off
cd /d D:\AI_Projects\MuseTalk
call musetalk_venv\Scripts\activate
python app.py
- 将此bat文件放入开机启动文件夹:
Win+R输入shell:startup
💡 高级技巧
-
实时摄像头驱动:
修改 app.py 添加:
video_source = 0 # 0=默认摄像头
-
接入 ChatGPT:
-
安装
-
在 MuseTalk 中设置 API 地址:
http://localhost:5000/api
💎 提示:首次生成需10-30分钟(模型初始化),后续生成约1-2分钟/分钟视频。推荐使用 NVIDIA Studio 驱动提升稳定性。
如果遇到任何问题,可查看日志文件:MuseTalk/logs/runtime.log
关于长视频训练出错问题解决方案
用 5 分钟视频,2G 大小,帧率: 50fps,分辨率: 2160x3840(4K 竖屏)
- 高分辨率视频处理:
- 您的视频分辨率是 2160x3840(4K竖屏),每帧图像需要约 24.8MB 内存(2160×3840×3 字节)
- 5分钟视频(300秒)在 50fps 帧率下共 15,000帧
- 全加载需要:15,000 × 24.8MB ≈ 372GB 内存
- 远超您的 32GB 内存容量
- 代码设计缺陷:
-
错误发生在
app.py的check_video()函数中:frames = [im for im in reader] # 试图一次性加载所有帧到内存
-
这种实现方式不适合处理长视频
解决方案
1. 修改代码避免全加载(推荐)
编辑 app.py 文件,优化视频处理逻辑:
# 找到 check_video() 函数中的以下代码(约第461行):
frames = [im for im in reader]
# 替换为逐帧处理逻辑:
valid_frames = []
for i, im in enumerate(reader):
# 添加必要处理逻辑
valid_frames.append(im)
# 每处理100帧释放一次内存
if i % 100 == 0:
gc.collect()
2. 降低输入视频规格
# 使用FFmpeg预处理视频(在Musetalk外执行)
ffmpeg -i input.mp4 \
-vf "scale=960:-1,fps=25" \ # 缩小分辨率并降低帧率
-crf 23 \ # 保持合理质量
output.mp4
3. 增加系统虚拟内存(临时方案)
- 打开Windows设置 → 系统 → 高级系统设置
- 性能设置 → 高级 → 虚拟内存 → 更改
- 取消"自动管理",选择C盘 → 自定义大小:
- 初始大小:32768 (32GB)
- 最大值:65536 (64GB)
- 设置后重启系统
4. 分段处理长视频(终极方案)
# 在app.py中添加分段处理逻辑
segment_length = 30 # 30秒一段
for start_time in range(0, total_duration, segment_length):
end_time = min(start_time + segment_length, total_duration)
# 用FFmpeg切割视频片段
subprocess.run(f"ffmpeg -i input.mp4 -ss {start_time} -to {end_time} segment.mp4")
# 处理片段
process_video("segment.mp4")
# 合并结果
subprocess.run("ffmpeg -f concat -i filelist.txt final_output.mp4")
调试建议
-
优先尝试 方案1(代码修改),这是最根本的解决方法
-
监控内存使用:
在app.py中添加内存监控
import psutil
def check_memory():
mem = psutil.virtual_memory()
print(f"Memory used: {mem.used/1024/1024:.2f}MB")在循环中调用
for i, frame in enumerate(reader):
if i % 50 == 0:
check_memory() -
安装内存监控工具:
pip install memory_profiler
mprof run python app.py
额外优化
-
启用GPU加速解码:
在视频读取时使用GPU加速
import cv2
cap = cv2.VideoCapture(video_path, cv2.CAP_FFMPEG)
cap.set(cv2.CAP_PROP_HW_ACCELERATION, cv2.VIDEO_ACCELERATION_ANY) -
使用内存映射文件:
import numpy as np
创建内存映射文件
mmap_file = np.memmap('temp.dat', dtype='uint8', mode='w+', shape=(num_frames, height, width, 3))
for i in range(num_frames):
mmap_file[i] = reader.get_data(i)
这些解决方案应该能帮助您处理长视频。建议从代码修改(方案1)开始,这是最直接有效的方法。如果仍有问题,可以结合使用视频预处理和分段处理方案。