基于 M1 Pro/Max 芯片的本地数字人解决方案,支持短视频制作和声音克隆。
- 🎙️ 语音合成 - 支持 Edge-TTS (在线) 和 GPT-SoVITS (本地)
- 👄 唇形同步 - 支持 Wav2Lip 和 SadTalker
- 🎬 完整流程 - 一键完成语音合成 + 唇形同步
- 🖥️ API 服务 - RESTful API,方便集成
- 🍎 M1 优化 - 支持 MPS 加速
- macOS 12.3+ (Monterey 或更高)
- Python 3.9-3.11
- Conda (推荐) 或 venv
- FFmpeg
# 进入项目目录
cd digital-human
# 运行部署脚本
./setup_m1.sh脚本会自动:
- 创建 Python 3.10 虚拟环境
- 安装 PyTorch (MPS 版本)
- 安装所有依赖
- 克隆 Wav2Lip 和 GPT-SoVITS
- 创建必要的目录结构
Wav2Lip 模型 (必需):
# 下载地址
https://github.com/Rudrabha/Wav2Lip#getting-the-weights
# 下载后放到
checkpoints/wav2lip_gan.pthGPT-SoVITS 模型 (可选,用于声音克隆):
# 下载地址
https://huggingface.co/lj1995/GPT-SoVITS
# 下载后放到
checkpoints/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt
checkpoints/s2D488k.pth
checkpoints/s2G488k.pth# 激活环境
conda activate digital-human
# 检查环境
python check_env.py# 启动 API 服务
python server.py
# 服务地址
http://localhost:5000# 健康检查
python client.py health
# 列出可用声音
python client.py voices
# 语音合成
python client.py synthesize -t "你好世界" -v xiaoxiao -o hello.wav
# 从视频提取音频
python client.py extract -v anchor.mp4 -o audio.wav
# 唇形同步
python client.py lipsync -v anchor.mp4 -a hello.wav -o output.mp4
# 完整生成 (语音 + 唇形同步)
python client.py generate -v anchor.mp4 -t "大家好,欢迎来到我的频道" -o output.mp4from client import DigitalHumanClient
# 创建客户端
client = DigitalHumanClient('http://localhost:5000')
# 完整生成
result = client.generate(
video_path='anchor.mp4',
text='大家好,欢迎来到我的频道',
voice='xiaoxiao' # 可选: xiaoxiao, yunxi, yunjian 等
)
if result.success:
# 下载视频
client.download_video(result.task_id, 'output.mp4')
print(f"生成成功,耗时 {result.processing_time:.2f}s")完整生成:
curl -X POST http://localhost:5000/api/v1/generate \
-F "video=@anchor.mp4" \
-F "text=大家好,欢迎来到我的频道" \
-F "voice=xiaoxiao"语音合成:
curl -X POST http://localhost:5000/api/v1/synthesize \
-H "Content-Type: application/json" \
-d '{"text": "你好世界", "voice": "xiaoxiao"}'唇形同步:
curl -X POST http://localhost:5000/api/v1/lipsync \
-F "video=@anchor.mp4" \
-F "audio=@hello.wav"| 名称 | 声音ID | 描述 |
|---|---|---|
| 晓晓 | zh-CN-XiaoxiaoNeural | 女,温柔 |
| 云希 | zh-CN-YunxiNeural | 男,沉稳 |
| 云健 | zh-CN-YunjianNeural | 男,新闻播音 |
| 晓伊 | zh-CN-XiaoyiNeural | 女,甜美 |
| 云枫 | zh-CN-YunfengNeural | 男,广播 |
| 晓辰 | zh-CN-XiaochenNeural | 女,温暖 |
查看所有声音: python client.py voices
digital-human/
├── server.py # API 服务
├── client.py # Python 客户端
├── voice_cloner.py # 声音克隆模块
├── lip_sync.py # 唇形同步模块
├── check_env.py # 环境检查
├── setup_m1.sh # 一键部署脚本
├── requirements.txt # 依赖列表
├── checkpoints/ # 模型文件
│ ├── wav2lip_gan.pth
│ └── ...
├── data/
│ ├── anchor/ # 形象视频
│ ├── audio/ # 音频文件
│ ├── output/ # 输出视频
│ └── uploads/ # 临时上传
├── logs/ # 日志
├── Wav2Lip/ # Wav2Lip 仓库
└── GPT-SoVITS/ # GPT-SoVITS 仓库
| 接口 | 方法 | 描述 |
|---|---|---|
/health |
GET | 健康检查 |
/api/v1/voices |
GET | 获取声音列表 |
/api/v1/synthesize |
POST | 语音合成 |
/api/v1/lipsync |
POST | 唇形同步 |
/api/v1/generate |
POST | 完整生成 |
/api/v1/upload/video |
POST | 上传视频 |
/api/v1/upload/audio |
POST | 上传音频 |
/api/v1/extract-audio |
POST | 提取音频 |
/api/v1/download/<file> |
GET | 下载文件 |
/api/v1/status/<task_id> |
GET | 查询状态 |
| 分辨率 | 生成速度 | 内存占用 | 质量 |
|---|---|---|---|
| 256px | 2-3秒/秒 | ~4GB | 中等 |
| 512px | 4-6秒/秒 | ~6GB | 良好 |
| 720p | 8-10秒/秒 | ~8GB | 很好 |
| 1080p | 15-20秒/秒 | ~10GB | 最佳 |
建议: 短视频使用 720p,平衡质量和速度。
确保:
- macOS 12.3+
- PyTorch 2.0+
- M1/M2/M3 芯片
检查:
import torch
print(torch.backends.mps.is_available())检查模型文件是否正确放置:
ls -la checkpoints/安装 FFmpeg:
brew install ffmpeg降低分辨率或 batch size:
# 在 lip_sync.py 中调整
wav2lip_batch_size = 4 # 降低此值- 确保形象视频正面、光线充足
- 尝试不同的模型:
wav2lipvswav2lip_gan - 检查音频质量,建议 16kHz 采样率
- 人脸增强 - 集成 GFPGAN 提升视频质量
- 声音克隆 - 完善 GPT-SoVITS 本地训练
- 背景替换 - 添加绿幕抠图功能
- 批量处理 - 支持批量生成视频
- Web UI - 添加网页界面
MIT License
- Wav2Lip - 唇形同步
- GPT-SoVITS - 声音克隆
- Edge-TTS - 语音合成