0官方源码地址:
X-Dub:基于生成式自举的无掩码视觉口型同步工具,支持单角色音视频驱动唇形生成与任意尺寸视频自适应处理
X-Dub 是一款无掩码视觉口型同步项目,可实现音频驱动的视频唇形生成,支持任意尺寸单人物视频的在线自动裁剪与还原,对卡通、动物等非人类角色泛化性更佳;
支持调节外观保真与口型运动平衡,推理参数可灵活配置,为学术研究与技术演示的视觉配音工具。


X-Dub 用于根据一段输入视频和一段输入音频,生成口型同步结果。当前代码同时提供两种使用方式:
当前版本会先对输入视频做人脸区域自动裁剪,再进行 512×512 口型同步生成,最后再贴回原视频画面:README.md:180-186、infer_lip_sync_pipeline.py:59-175。
本手册不展开安装部署,只说明如何启动已有环境中的项目。
在项目根目录执行:
bash start_app.sh
当前脚本会做这几件事:
py312 环境:start_app.sh:14-15start_app.sh:17-23start_app.sh:25-27默认监听:
7860:start_app.sh:6、app.py:1110.0.0.0:app.py:112,119页面初始会显示:
模型状态:未加载(懒加载):app.py:78这表示启动时不会预加载大模型,首次点击推理时才会真正加载;后续请求会复用已加载模型:webui_service.py:37-65。
当前页面真实组件如下:app.py:68-81
.mp4、.mov、.mkv:app.py:69.wav、.mp3、.m4a:app.py:70sample_paste_compare.mp4 兜底:app.py:96。可直接使用默认值,也可按需要微调:
2.5:app.py:73、webui_service.py:2810.0:app.py:74、webui_service.py:2950,范围 1-100:app.py:7542:app.py:76、webui_service.py:32点击“开始推理”。
当前实际流程为:app.py:83-104、webui_service.py:68-78
推理完成后,无需切换页面,当前页即可直接看到:
这三项都与“开始推理”同页展示:app.py:77-81,100-105。
用于控制输出文件前缀。
sample_paste_compare.mp4:app.py:96。sample_name:infer_lip_sync_pipeline.py:60,197。ref_cfg_scale控制对参考画面外观的保持程度。默认 2.5:infer_lip_sync_pipeline.py:131,183。
audio_cfg_scale控制口型受输入音频驱动的强度。默认 10.0:infer_lip_sync_pipeline.py:132,184。
num_inference_steps控制采样步数。默认 50:infer_lip_sync_pipeline.py:133,186。
README 给出的实践建议是 25-50 区间:README.md:199-201。
seed控制本次推理随机性。默认 42:infer_lip_sync_pipeline.py:134,187。
若未手动指定输出目录,每次运行都会在项目根目录下自动创建:
outputs/outputs_YYYYmmddHHMMSS
若同一秒已存在同名目录,会自动追加 _1、_2 等后缀:project_paths.py:24-33。
当前推理链路会至少输出两类对比视频:infer_lip_sync_pipeline.py:171-175
*_crop_compare.mp4:裁剪区域对比视频*_paste_compare.mp4:贴回原视频后的对比视频WebUI 页面中的“生成结果”显示的是:
*_paste_compare.mp4:app.py:95-98“日志”文本框展示的是本次运行的标准输出与错误输出汇总,包括但不限于:
这些日志由服务层重定向后回填:webui_service.py:73-78。
如果你不想使用 WebUI,也可以直接命令行推理。
python infer_lip_sync_pipeline.py \
--video_path <输入视频> \
--audio_path <输入音频>
python infer_lip_sync_pipeline.py \
--video_path assets/examples/video.mp4 \
--audio_path assets/examples/audio.wav \
--sample_name demo \
--ref_cfg_scale 2.5 \
--audio_cfg_scale 10.0 \
--num_inference_steps 50 \
--seed 42 \
--output_dir ./outputs/manual_run
当前脚本支持的主要参数如下:infer_lip_sync_pipeline.py:178-190
--video_path:输入视频,必填--audio_path:输入音频,必填--sample_name:输出文件名前缀,可选--ref_cfg_scale:参考引导,默认 2.5--audio_cfg_scale:音频引导,默认 10.0--audio_feat_window_size:默认 0--num_inference_steps:推理步数,默认 50--seed:随机种子,默认 42--ckpt_path:主模型权重路径--output_dir:输出目录;不填时自动创建运行目录:infer_lip_sync_pipeline.py:195-196因为当前实现是懒加载。启动时不加载模型,首次推理才会真正构建 LipSyncPipeline,后续请求复用同一实例:app.py:78、webui_service.py:44-62。
会直接报错:请先上传视频和音频文件:app.py:84-85。
默认保存在项目根目录 outputs/ 下的新建运行目录中,例如:
outputs/outputs_20260329153000
规则见:project_paths.py:24-33。
是本次输出目录中的 *_paste_compare.mp4,也就是贴回原始视频后的对比结果:app.py:95-98。
当前版本仅支持单人视频。README 已明确当前版本不支持多人场景下的目标跟踪:README.md:180-196。
README 中说明推理通常需要约 21 GB VRAM:README.md:94。
这是公开版当前已知现象。README 已说明:
对应说明见:README.md:71-79,190-193。
README 当前给出的实践建议是 25-50:README.md:199-201。默认值是 50:app.py:75、infer_lip_sync_pipeline.py:186。
512×512:README.md:184-185、infer_lip_sync_pipeline.py:127-128。1,更适合单任务顺序执行:app.py:105。*_paste_compare.mp4;若想看裁剪区域生成效果,可查看 *_crop_compare.mp4:infer_lip_sync_pipeline.py:171-175。models/,输出约定位置是 outputs/:project_paths.py:5-8。
认证作者

支持自启动