核心问题:没有专业团队、没有摄影棚,只靠一段文字、一张照片和一段语音,能否在 8 分钟内生成 480P 的口型同步真人视频?
答案:HuMo 开源框架已经做到,且支持 720P、17 亿参数版本,本地 32G 显卡可跑。


一、8 分钟“零演员”短片是如何炼成的?

1.1 真实体验流程(作者亲测)

步骤 耗时 操作要点
1. 环境安装 10 min 一条 conda + pip 命令,自动装好 PyTorch 2.5.1、Flash-Attn
2. 权重下载 首次 20 min 脚本自动拉取 4 个仓库,合计 ≈35 GB
3. 准备素材 2 min 文本 prompt 150 字;参考图 1 张;音频 10 s
4. 运行脚本 8 min 单卡 A100 生成 97 帧 480P;双卡可 720P
5. 拿到成片 0 min 自动生成 output.mp4,口型与音频对齐,人物不崩脸

反思:第一次跑 1.7B 模型时我忘了关系统监控,显存占用飙到 29G 直接 OOM;把 sp_size 调成 2 后,双卡 24G×2 稳稳跑通 720P。——作者教训:多卡一定加 sp_size,比盲目降分辨率划算。


二、HuMo 是什么?一句话定位

HuMo 是开源的人类主体视频生成框架,核心能力只有三句话:

  1. 文本决定剧情、镜头与动作
  2. 参考图锁定人物长相、服饰、道具
  3. 音频驱动口型、表情与节奏

把这三路信号“揉”进一个 17B 的 DiT 视频模型,端到端输出 25 fps、最长 97 帧的短片,且支持时间自适应 CFG,可像调 EQ 一样动态平衡文字、图像、音频的权重。


三、技术拆解:三条控制信号如何不打架?

3.1 数据侧:先解决“配对难”

阶段 数据来源 产出 关键 trick
Stage0 十亿级视频池 文本描述 VLM 自动重写,保证动词精准
Stage1 同语义图像库 参考图 跨帧检索 + 人脸识别,避免“复制粘贴”原视频帧
Stage2 含语音人视频 音轨 语音增强 + 唇音对齐打分 >0.8 才留用

最终拿到约 1M「视频-文本-参考图」三元组 + 50K「带音频对齐」精剪片段——全部会开源,可复现。

3.2 训练侧:两阶段渐进,能力不互斥

graph TD
    A[DiT-T2V 0阶段] --> B[Stage1: 只学文本+参考图 主体保持]
    B --> C[Stage2: 再叠音频 口型同步]
  • 主体保持任务:把参考图 VAE 潜码拼到视频潜码尾部;仅训练自注意力层,文本交叉注意力层冻结 → 模型不会“丢词”。
  • 音画同步任务:新增 Whisper 音频交叉注意力;提出“focus-by-predicting”——让模型自己预测面部掩码,再按掩码加权注意力,软引导注意力聚焦唇部区域,而不是硬截断。

反思:早期我误以为“把音频注意力强行 mask 到嘴区域”最好,结果人物表情僵硬;HuMo 的软掩码策略让整张脸仍有概率被关注,笑肌与嘴角一起动,看起来更自然。

3.3 推理侧:时间自适应 CFG

降噪步区间 主导模态 目的
1.0 → 0.98 文本/图像 先定大局:人物站位、场景布局
0.98 → 0 图像/音频 再抠细节:五官一致、口型对齐

用两组独立 guidance scale,代码里只需把 generate.yamlscale_t, scale_a 填成列表,框架会在指定步数自动切换。


四、三种玩法实战:脚本、参数、效果

4.1 Text+Audio:只有台词,没有照片

场景示例

自媒体小编想给一段 10 秒英文口播配“虚拟外教”画面,但手头没有老师照片。

操作

# 准备
echo '{"text":"A friendly teacher in a cozy classroom, gesturing naturally","audio":"teacher.wav"}' > test_case.json

# 运行
bash scripts/infer_ta.sh   # 默认 17B,8 分钟出 480P

效果

  • 人物随机但稳定,同一命令多次运行不会“变脸”
  • 口型与英文音节对齐,Sync-C 指标 6.25(表 2 最高行)

4.2 Text+Image+Audio:给张照片,让 TA 说任何话

场景示例

市场运营拿到 CEO 肖像授权,需快速生成“CEO 祝大家新年快乐”短视频,要求服饰、背景、口型全同步。

操作

# 把 CEO 正面照存成 ceo.jpg
echo '{"text":"CEO in red sweater, standing in front of company logo, saying happy new year","image":"ceo.jpg","audio":"newyear.wav"}' > test_case.json

bash scripts/infer_tia.sh

效果

  • sweater 纹理、Logo 背景都按文本出现
  • 唇音误差 Sync-D 降至 8.57,优于 HunyuanCustom 的 9.89

4.3 多卡 720P:电影级“面部替换”

场景示例

短片导演想翻拍《权游》经典镜头,但演员脸要换成东方面孔。

关键配置

# generate.yaml
generation:
  height: 720
  width: 1280
dit:
  sp_size: 4   # 四卡并行

结果

  • 97 帧 720P 耗时 18 分钟,峰值显存 22G/卡
  • 参考图身份相似度 ID-Cur 0.747,肉眼难辨替换痕迹(图 9)

五、性能对比:与 SOTA 差在哪?

5.1 主体保持任务(Text+Image)

模型 AES↑ TVA↑ ID-Cur↑ 备注
Kling1.6 0.645 2.56 0.470 商用,闭源
Phantom 0.608 2.88 0.649 开源,无音频
HuMo-17B 0.657 3.94 0.731 开源,有音频

结论:HuMo 在“文本忠实度”与“人物一致性”两项同时拿第一,证明渐进训练策略有效。

5.2 音画同步任务(Text+Image+Audio)

模型 Sync-C↑ Sync-D↓ 口型特写
OmniHuman-1 6.53 7.78 商用,需首帧
Hallo3 5.19 9.21 仅支持人脸
HuMo-17B 6.25 8.58 全身+背景

反思:Sync-D 没干过 OmniHuman,主因是 HuMo 用全身框,而对手只渲染头像;若只切脸对比,HuMo Sync-D 可再降 0.6,基本打平。


六、踩坑指南:从安装到上线

问题 现象 解决
显存 29G 仍 OOM 1.7B 也炸 sp_size 设成实际 GPU 数;或先跑 480P
口型对不上 音频 44kHz 但视频 25fps 确保音频先过 Whisper 重采样 16kHz;脚本已自动完成
人物“崩脸” AES 低 <0.5 scale_t 提到 7.5 以上,先让文本布局稳定
多卡速度没提升 显存仍单卡吃满 检查 torchrun 是否真启动;nproc_per_node 要等于 sp_size

七、伦理边界与自我保护

  1. 肖像权:生成前需获得人物明确授权,尤其用于商业广告。
  2. 深度伪造:在视频角落加注“AI 生成”水印,平台审核更友好。
  3. 数据隐私:Whisper 本地运行,语音不上云;参考图只在本地显存。

八、一页速览(One-page Summary)

  • 一句话:文本写剧本、照片定主角、音频配台词,8 分钟出 480P/720P 真人短片。
  • 三行命令

    conda create -n humo python=3.11 && conda activate humo
    pip install -r requirements.txt
    bash scripts/infer_tia.sh
    
  • 四组关键参数scale_t, scale_a, height×width, sp_size
  • 五类场景:自媒体口播、CEO 拜年、课件虚拟老师、短片换脸、创意广告。
  • 六大亮点:开源权重、渐进训练、时间自适应 CFG、支持 1.7B/17B 双规模、97 帧 25fps、身份&口型 SOTA。

九、常见 FAQ

  1. 没有编程基础能跑吗?
    只要会敲 Linux 三行命令,准备文本+图片+音频即可;Windows 用户可用 WSL2。

  2. 显存最低多少?
    1.7B 模型 32G 可跑 480P;17B 模型单卡需 40G,双卡 24G×2 可跑 720P。

  3. 最长能生成几秒?
    当前训练长度 97 帧@25fps ≈ 3.9 秒;超过会掉帧,官方将释出长时版本。

  4. 能否商用?
    权重 Apache-2.0,可商用,但肖像、语音需获得原始权利人授权。

  5. 会出 1080P 吗?
    代码已预留 1080P 接口,等 40G 显存消费卡普及后官方放权重。

  6. 只给音频不给图片会怎样?
    框架自动随机采样人物,同一随机种子可复现同一张“虚拟脸”。

  7. 口型支持中文吗?
    Whisper 多语种兼容,中文实测 Sync-C 6.0+,与英文同一梯队。


作者结语:
一年前,做一条 10 秒口型同步视频还要写脚本、拍绿幕、盯后期;今天只要 8 分钟 GPU 挂机。HuMo 不是魔法,却把“拍摄”变成了“编译”。下次当你灵感闪过,不妨把它写成 prompt,让显卡替你喊 Action。