Skip to content

Repository files navigation

Mac M1 数字人项目

基于 M1 Pro/Max 芯片的本地数字人解决方案,支持短视频制作和声音克隆。

功能特性

  • 🎙️ 语音合成 - 支持 Edge-TTS (在线) 和 GPT-SoVITS (本地)
  • 👄 唇形同步 - 支持 Wav2Lip 和 SadTalker
  • 🎬 完整流程 - 一键完成语音合成 + 唇形同步
  • 🖥️ API 服务 - RESTful API,方便集成
  • 🍎 M1 优化 - 支持 MPS 加速

快速开始

1. 环境要求

  • macOS 12.3+ (Monterey 或更高)
  • Python 3.9-3.11
  • Conda (推荐) 或 venv
  • FFmpeg

2. 一键部署

# 进入项目目录
cd digital-human

# 运行部署脚本
./setup_m1.sh

脚本会自动:

  • 创建 Python 3.10 虚拟环境
  • 安装 PyTorch (MPS 版本)
  • 安装所有依赖
  • 克隆 Wav2Lip 和 GPT-SoVITS
  • 创建必要的目录结构

3. 下载模型

Wav2Lip 模型 (必需):

# 下载地址
https://github.com/Rudrabha/Wav2Lip#getting-the-weights

# 下载后放到
checkpoints/wav2lip_gan.pth

GPT-SoVITS 模型 (可选,用于声音克隆):

# 下载地址
https://huggingface.co/lj1995/GPT-SoVITS

# 下载后放到
checkpoints/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt
checkpoints/s2D488k.pth
checkpoints/s2G488k.pth

4. 验证安装

# 激活环境
conda activate digital-human

# 检查环境
python check_env.py

5. 启动服务

# 启动 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.mp4

Python API

from 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")

REST API

完整生成:

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 仓库

API 接口

接口 方法 描述
/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 查询状态

性能参考 (M1 Pro 16核GPU)

分辨率 生成速度 内存占用 质量
256px 2-3秒/秒 ~4GB 中等
512px 4-6秒/秒 ~6GB 良好
720p 8-10秒/秒 ~8GB 很好
1080p 15-20秒/秒 ~10GB 最佳

建议: 短视频使用 720p,平衡质量和速度。

常见问题

1. MPS 不可用

确保:

  • macOS 12.3+
  • PyTorch 2.0+
  • M1/M2/M3 芯片

检查:

import torch
print(torch.backends.mps.is_available())

2. 模型加载失败

检查模型文件是否正确放置:

ls -la checkpoints/

3. FFmpeg 错误

安装 FFmpeg:

brew install ffmpeg

4. 内存不足

降低分辨率或 batch size:

# 在 lip_sync.py 中调整
wav2lip_batch_size = 4  # 降低此值

5. 唇形同步效果不佳

  • 确保形象视频正面、光线充足
  • 尝试不同的模型: wav2lip vs wav2lip_gan
  • 检查音频质量,建议 16kHz 采样率

后续优化

  1. 人脸增强 - 集成 GFPGAN 提升视频质量
  2. 声音克隆 - 完善 GPT-SoVITS 本地训练
  3. 背景替换 - 添加绿幕抠图功能
  4. 批量处理 - 支持批量生成视频
  5. Web UI - 添加网页界面

许可证

MIT License

致谢

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages