跑 HOMIE 生成数字人视频,出现报错、输出抖动或干脆跑不完时,先怀疑素材规格,而不是权重和推理参数。音频的时长与采样率、人像的边长与构图、驱动信号是否齐备、目录与命名是否和仓库示例一致——这几项都能用命令或日志直接验证,改动成本也低。下面按“先素材、后参数”的顺序,给出可以逐项核对的清单。
判断顺序建议固定为:先对齐仓库示例目录形态,再用 ffprobe 核对音频时长、采样率与声道,接着比对图像边长与目标输出尺寸,最后才动生成参数。每次只改一项,保留日志与输出文件用于对照。如果素材本身缺驱动信号,或音频长度明显超出示例范围,调参数通常补不回来;具体上限需要结合仓库说明和本次运行日志确认。
打开仓库示例目录,记下官方输入素材的形态
第一个动作不是改配置,是读示例。先把仓库自带的示例输入目录结构记下来,后面所有替换都以它为模板,避免自己造一套命名和层级。
cd <repo_root>
find examples -maxdepth 3 -type f | sort
看输出时把三件事记下来:人像素材有几份、是单张图片还是视频帧序列;音频有几条,命名是否与某份人像一一对应;驱动信号(关键点、姿态、深度图之类)有几个文件,数量是否和图像帧数匹配。数量对不上、命名规则和示例不一致,往往是后续读取失败的直接原因。示例里没有的字段,不要自己加。
用 ffprobe 读出音频的时长、采样率与声道
音频是最容易被忽略的一项。先对示例音频跑一遍命令,把结果当作基线;再对自己要用的音频跑同一条命令,两边对比。
ffprobe -v error \
-show_entries format=duration,format_name \
-show_entries stream=index,codec_name,sample_rate,channels,channel_layout,duration \
-of default=noprint_wrappers=1 input.wav
输出形如:
index=0
codec_name=pcm_s16le
sample_rate=16000
channels=1
channel_layout=mono
duration=6.480000
format_name=wav
duration=6.480000
字段读法:sample_rate 是采样率,channels 与 channel_layout 是声道数和声道布局;两处 duration 分别是容器时长与音频流时长,二者差异过大通常说明容器头信息不干净。期望值不要靠猜,从仓库说明或示例文件反推——示例是 16 kHz 单声道,就先用 16 kHz 单声道试;时长明显长于示例的音频,建议先截到接近示例长度,再看其他项是否还有问题。
核对人像分辨率与最终输出分辨率的对应关系
把目标输出尺寸和人像边长写在一起看,比单看某一项有用。建议按下面的形式记录:
- 人像原始边长:宽 × 高,用 ffprobe 或看图属性确认,不要凭截图判断
- 目标输出尺寸:宽 × 高
- 两者比例:是否接近同一宽高比,是否需要裁剪
- 实际动作:缩放、裁剪,还是原样送进去
通常来说,人像边长低于目标输出短边时属于放大采样,面部细节会先丢:眼睛、牙齿、发丝边缘发虚,口型快速开合处出现拖影或振铃。反过来,人像远大于输出尺寸是降采样,一般更稳,但过度降采样同样会软化边缘。判断不用猜——看输出帧里五官区域是否糊、边缘有没有锯齿或光晕,再决定是换素材还是调裁剪框。
把一次失败生成拆成素材项逐条排除
用单变量替换来定位问题。顺序建议是:先换音频,再换人像,最后才动生成参数。理由很实际——音频替换成本最低,人像次之,参数改动的组合最多、最难归因。
- 第 1 步:只换音频,其余和上一次完全一致,记录是成功、失败还是输出异常。
- 第 2 步:只换人像,连分辨率和构图一起换掉,音频沿用第 1 步的,继续记录。
- 第 3 步:素材都对齐示例后仍不稳,再改生成参数,且一次只改一个。
每次记同样四栏:改了什么、日志末尾的报错或警告、输出文件是否生成、输出时长是否与音频接近。三轮下来,问题落在哪一侧基本就清楚了。换任意音频都失败,多半不在音频;只有某张人像出问题,多半是分辨率或人脸区域占比不合适。
确定调整顺序:先素材合规再动生成参数
下面这份清单按顺序执行,每一步都标注要看的日志或输出文件,前一步没过就不要跳到下一步:
- 目录与命名对齐示例 —— 看文件扫描或数据加载相关的日志,是否报告找不到文件、键名不匹配。
- 音频规格合规 —— 看 ffprobe 输出,以及日志里读入的音频时长是否与文件实际时长一致。
- 人像分辨率与构图 —— 看预处理阶段的 resize / crop 日志,或落盘的中间帧。
- 驱动信号齐备且对齐 —— 看关键点或姿态输出文件是否生成、帧数是否与人像帧数对应。
- 最后才调生成参数 —— 看推理日志与最终输出视频,确认时长、帧率、画面是否稳定。
这样排的原因很简单:素材项都能用命令验证,属于确定性判断;生成参数只能靠输出效果反推,属于概率性判断。先把确定性的部分清干净,再调参数,改动才有可归因的结果。如果某一步在本地无法确认,先保留该步的日志和输出文件,再继续下一步,不要用参数去掩盖素材问题。