搜「AI数字人怎么做视频制作」的人,多数不是卡在“选哪个平台”,而是卡在素材、配音、合成这三段接不上:形象和音色没固化,文案改一次就要重跑一遍,最后导出的 mp4 音画对不齐。比较稳的做法是把流程拆成“先固定形象与音色,再把文案转成音频,最后合成并校验时长”三步,每步都能单独重跑。下面按真实排查顺序写。
做数字人视频,先别急着点“一键生成”。建议按“确认版本与权限 → 固化形象音色 → 文案转 TTS 音频 → 合成 → 用 ffprobe 校验时长”的顺序走一遍,其中音频时长是整个流程的基准,画面跟着音频走。如果音画不同步、任务卡在排队、素材上传被拒,先查音频采样率、账号额度与并发、素材人脸清晰度这三处。不同平台的口型驱动能力差异较大,具体效果需要结合所用引擎的版本文档确认。
AI数字人之前先确认这三件事
版本、权限、入口位置,缺一个都会让流程停在半路,而且报错往往不指向真正原因。
- 版本:本地跑的话,在终端执行
ffmpeg -version、nvidia-smi、python -c "import torch;print(torch.__version__)",分别确认编码器、显卡驱动、推理框架。用平台的话,在控制台右上角「设置 → 关于」或页面底部看引擎版本号和形象模型版本;口型驱动模型升级后旧形象有时需要重新训练。 - 权限:在控制台「访问控制 / API 密钥」里打开 Key 详情,看 scopes 字段是否同时包含视频合成、语音合成、对象存储写入这三类权限。只有读权限的 Key,提交任务时会被拒,但提示常写成“资源不存在”。
- 入口位置:确认你要用的是「数字人 → 视频合成 → 新建视频」,而不是「实时互动 / 直播」入口;两个入口的形象 ID 不通用。本地 pipeline 则确认
config.json与脚本在同一目录,或已用绝对路径传入。
判断顺序清单,按这个顺序自检,不要跳步:
- 版本对得上 → 驱动与编码器可用 → 再谈合成。
- API Key 有合成权限 → 再提交任务。
- 形象、音色返回“可用”状态 → 再写文案。
- TTS 音频能正常播放且 ffprobe 能读出时长 → 再合成画面。
- 输出 mp4 的时长与音频时长差在 1 帧以内 → 才批量跑。
AI数字人:最短可用路径
只保留必要步骤,每一步做完都要看到明确的产物,否则不要往下走。

- 固化形象与音色:在控制台「数字人 → 形象管理」选一个公有形象,或上传一段正面、单人、光线均匀的素材;「音色管理」里选预置音色或上传授权音频做克隆。做完应看到状态从“训练中”变为“可用”,并拿到
avatar_id和voice_id两个字符串。 - 写一份合成配置:把文案、形象 ID、音色 ID、分辨率、输出路径落到一个 json 文件,放在脚本同目录。这份配置可以直接复制改:
替换项只有{ "avatar_id": "av_xxxxxxxx", "voice_id": "vo_xxxxxxxx", "text": "这里是第一句文案。这里是第二句文案。", "resolution": "1080x1920", "fps": 25, "background": "#FFFFFF", "output": "./out/demo_001.mp4" }avatar_id、voice_id、text与output。 - 先单独生成配音:用音色合成一条 wav,再用
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 ./out/tts.wav读时长。应看到一个带小数的秒数;如果输出N/A,说明文件没写完或格式不对,此时不要继续合成视频。 - 提交合成任务并轮询:本地 pipeline 直接跑脚本;走平台的话,提交后在「任务列表」里看状态从 queued 变 running 再变 succeeded,成功后任务详情里有可下载的 mp4 地址。
- 后处理与校验:需要加封面、字幕或统一封装时,用下面这条命令,只做封装不重编码画面,速度快:
跑完再执行一次ffmpeg -y -i ./out/raw.mp4 -i ./out/tts.wav \ -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k \ -shortest -movflags +faststart ./out/demo_001.mp4ffprobe,确认输出时长与 tts.wav 的时长基本一致。
AI数字人:一个真实场景的完整做法
场景:给 40 个商品各做一条竖版口播短视频,每条形像固定、文案 200~300 字、时长 40~60 秒,发布到手机端。对象类型是商品图文素材,不需要真人出镜。
配置文件 ./config.json 按下面的实际取值写,每一项在哪里改也一并标出:

{
"avatar_id": "av_store_clerk_01",
"voice_id": "vo_female_calm_02",
"text": "这款保温杯容量 500 毫升,杯身不锈钢,杯盖可拆洗……",
"resolution": "1080x1920",
"fps": 25,
"background": "#F5F5F5",
"subtitle": true,
"output": "./out/sku_0001.mp4"
}
avatar_id、voice_id:来自控制台「形象管理」「音色管理」列表,复制即可,不要手打。resolution与fps:在配置文件里改,竖版固定 1080x1920;帧率与形象训练时的帧率保持一致,改帧率容易让口型出现细微抖动。text:从商品表格里逐行读取,建议每条控制在 250 字上下,长文案拆成两条视频,比分段合成更容易对齐。subtitle:字幕开关,在配置文件里控制,开启后由脚本侧用 TTS 返回的时间戳生成 srt。
批量跑完后,用一条循环把 40 条视频的时长都打出来,和音频时长对照:
for f in ./out/sku_*.mp4; do
printf "%s\t" "$f"
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 "$f"
done
正常情况下每条视频时长应略长于对应音频,差值来自片尾停顿。若某条明显短于音频,说明该条被截断,单独重跑这一条即可,不必整批重来。
最容易踩的坑:把 TTS 输出的 mp3 直接喂给合成引擎,而引擎内部按 wav 帧对齐。mp3 首尾有编码器填充,时长会多出几十毫秒,表现为每条视频结尾多一段静止画面,或者最后一句口型被吃掉。规避办法是统一让 TTS 输出 wav、统一采样率(先确认引擎文档要求的 16k 还是 24k),合成前用 ffprobe 核对一次时长,再进入合成。这个问题在单条试跑时不明显,批量后才集中暴露。

AI数字人:跑不通先查这三处
按出现频率从高到低排,每处给判断方法。
- 任务一直停在 queued,或提示额度不足。页面提示通常是“当前并发已满,请稍后重试”或“剩余时长不足”。先到控制台「用量 / 额度」页看剩余合成时长与当前并发上限,再确认是否上一批任务没释放。批量提交时建议串行加固定间隔,不要一次打满并发。
- 形象素材上传被拒。提示多为“未检测到清晰人脸”或“视频时长不符合要求”。检查位置是「形象管理 → 上传记录」里的失败原因,对照素材本身:单人正面、脸部占画面比例不过小、光线均匀、无遮挡。分辨率过低或侧脸严重的素材,重新拍一段通常比调参数更快。
- 音画不同步、结尾静止或口型错位。这类问题不报错,只能靠比对。用
ffprobe分别读输出视频和音频的时长与采样率,检查音频是否为引擎要求的格式;再看合成引擎日志里是否有“音频重采样”一类的提示。若采样率被隐式转换,宁可先在本地用ffmpeg -ar 24000 -ac 1统一,再提交合成。
三处都排除后仍跑不通,再去看引擎版本与驱动,因为版本问题往往表现为上面三种症状之一,而不是独立报错。