Files
2026-06-20 17:16:11 +08:00

100 lines
2.8 KiB
Markdown

# 项目规格:Digital Human Lip-Sync Service
## 1. 背景
`aIzhinengti` 的数字人 `自主算力机` 模式并不是大语言模型调用。它会把:
- 一段音频文件
- 一段数字人/真人形象视频
提交给一个 Gradio 服务,通过 `/process_single` 生成口型同步后的视频。
本项目就是这个服务的独立实现与适配层。
## 2. 目标
实现一个本地或远程可部署的音频驱动视频口型同步服务,满足:
- 可被 `gradio_client.Client(api_url).predict(..., api_name="/process_single")` 调用。
- 可先用 `ffmpeg_mux` 验证链路。
- 可通过 `command` 后端接入真实模型。
- 未来可扩展为专用 Python 后端,例如 `wav2lip``musetalk``lstmsync`
## 3. 非目标
- 本项目不内置模型权重。
- 本项目不负责训练模型。
- 本项目不负责 CompShare 云主机启停 API。
- 本项目不负责文本生成、TTS、ASR、字幕排版等上游/下游能力。
## 4. 输入输出契约
### 输入
- `audio_file`:音频文件路径,常见格式 `wav``mp3``m4a`
- `video_file`:视频文件或 Gradio 视频对象,常见格式 `mp4``mov`
### 输出
输出一个可被 Gradio `Video` 组件处理的视频结果。主项目期望 Gradio client 侧可以读取到:
```json
{
"video": "D:/path/to/output.mp4",
"subtitles": null
}
```
## 5. 后端模式
### `ffmpeg_mux`
当前默认模式。只把上传音频封装到原视频中,用于验证主项目到服务的调用链路,不做真实口型同步。
### `command`
核心开发目标。用命令模板调用外部真实模型推理脚本:
```powershell
$env:LIPSYNC_BACKEND = "command"
$env:LIPSYNC_COMMAND_TEMPLATE = 'python D:\models\Wav2Lip\inference.py --checkpoint_path D:\models\Wav2Lip\checkpoints\wav2lip_gan.pth --face "{video}" --audio "{audio}" --outfile "{output}"'
```
可用变量:
- `{audio}`:服务收到并规范化后的音频路径
- `{video}`:服务收到并规范化后的视频路径
- `{output}`:模型必须写入的输出 mp4 路径
- `{workdir}`:临时工作目录
### 专用后端
后续可以新增:
- `wav2lip`
- `musetalk`
- `lstmsync`
专用后端应复用统一输入输出契约。
## 6. 部署约束
- Windows 优先。
- NVIDIA GPU 场景优先。
- 服务端口默认 `7860`
- 局域网访问时使用 `LIPSYNC_HOST=0.0.0.0`
- 公网暴露时必须自行增加访问控制、反向代理或防火墙限制。
## 7. 成功定义
最小成功:
- `scripts/test-client.ps1` 能调用服务,返回可播放视频。
- `aIzhinengti/scripts/digital_human_process.py` 能调用服务,返回 `success: true`
真实成功:
- 接入真实模型后,输出视频口型与音频同步。
- 同一输入重复运行稳定生成结果。
- 错误时返回明确原因,不让主项目卡死。