AI 短剧口播 · OmniHuman 生成技术方案

音频驱动
让主播开口说戏

从一张真人锚点图出发,一段音频直接驱动出唇形 · 眼神 · 手势全协调的口播视频——一套 fal 托管、按次付费、单条 $14.82 的 AI 短剧产线。

// 记录 v1→v2 的架构转变、反打单人套路、fal/RunPod 调用地图与自建替代评估

SEEDREAM 4.0 / EDIT KLING V2.6 PRO I2V OMNIHUMAN 音驱动 SYNC-LIPSYNC V2 MINIMAX TTS · 音色克隆 RUNPOD SULPHUR-2 备选 $14.82 / 条
SCROLL / 向下滚动
01
The Iteration · v1 → v2

从「先生动作再补口型」到「一步音驱动」

v1 用 Kling 生动作、再串 lipsync 补口型,多步级联把误差层层叠加。v2 换成 OmniHuman 单次音频驱动——一个模型同时吐出唇形、眼神、头部与全身表情,成本持平,质量显著提升。

v1 · 旧方案◈ Kling + lipsync

动作与口型分两步

Kling i2v → sync-lipsync 串行

用户三点反馈:① 口型对不上(唇形与音频错位)② 表情生硬(面部缺乏自然变化)③ 肢体僵硬(全身动作呆板无生活感)。多步级联的误差在最后一步集中爆发。

~$7-8 / 条 · 级联误差叠加
v2 · 当前方案✦ OmniHuman

一步吐出会说话的人

audio → video + face + body

输入音频,直接输出驱动好唇形、眼神、头部细节、全身表情协调一致的口播视频。避开级联,「生动作」和「对口型」在同一步内天然对齐。

~$7-8 / 条 · 成本持平质量跃升
Key Finding

OmniHuman 一步到位(audio→video+face+body),避免多步级联误差叠加。成本与 v1 持平,但把 v1 的三个病一次治好——这是整次迭代的核心结论。完整成片总成本 $14.82(含拍摄、剪辑、音频处理)。

02
Generation Pipeline · fal-hosted

一张锚点图怎么变成一条口播戏

全链路走 fal.ai 托管、按次付费、零 GPU 运维。锚点图的真实感直接决定成片逼真度;配音必须先于视频,好让画面时长迁就配音节奏。

SEEDREAM
真人锚点
bytedance/seedream/v4/edit:把自有主播真实照片塞进 image_urls[] 当参考图,脸锚定在真照片上,天生带真实肤质与不对称五官$0.03/张
MINIMAX
配音先行
先克隆音色(minimax/voice-clone,$1.5 一次性可复用),再 speech-02-hd 合成中文口播;语速 1.15-1.30 贴节奏$0.10/千字
OMNIHUMAN
音驱动
锚点图 + 音频 → 一步吐出唇形/眼神/手势协调的说话视频。底图是胸上景+双手入镜,一步就带手势——景别由底图决定,不由模型决定~$0.056/s
LIPSYNC
单独修嘴
走三步链(Kling i2v 动手势)时,口型另用 sync-lipsync/v2 精修;台词 >5s 的镜头 Kling 必须提交 10s 档,否则后半句哑掉$0.05/s
FFMPEG
合成交付
concat 滤镜拼接、STHeiti 叠字幕、loudnorm 归一化到 -14 LUFS + 转立体声,末段抖音「AI 生成」合规勾选免费 · 本地

// 两条链路:纯头肩静态播报走 一步 OmniHuman/avatar;要「手势 + 全身动感」走 Seedream → Kling i2v → sync-lipsync 三步链。

03
Shot Structure · The Core Trick

为什么多人对话必须「反打单人」

Constraint

OmniHuman 在两人同框对话时,音频驱动指令会让两张脸同时张嘴——口型全错。双人同框是这套音驱动方案的天然禁区。

🎬

SOLUTION · 镜头交切宽镜建共存 → 反打单人

开场用宽镜(两人走廊)建立共存感,然后切反打单人镜头:每个人物单独驱动 OmniHuman,一对一映射保证口型准确,眼神交互感靠镜头交切完成。总镜头数 = 2 人 × 2-3 个反打角度。

🚫

PROMPT · 防脸泄露单人镜提示词规范

生成单人镜头必须显式约束:only she in frame 防对方脸/身体幻觉泄露;hands visible in mid-shot 避免大手 POV 或手臂扭曲。例:"Indoor scene, woman speaking, only she in frame, hands in mid-shot, natural lighting"

反打结构套路

宽镜(两人走廊,0-3s) → [A 说话] 特写 + OmniHuman 驱动 → [B 回应] 特写 + OmniHuman 驱动 → [A 再说] 反向角度特写 → 宽镜(两人互动,结尾)。开场+结尾宽镜保共存,中间单人特写保对白清晰,转场靠交切而非生硬切换。

Anchor

Seedream 锚点质感 = ~90% 真实感。锚点图(由 SDXL/Seedream 出)质量直接决定 OmniHuman 输出逼真度:禁用美颜/磨皮(避免 CG 塑料感,要自然肤质毛孔),分辨率 ≥832×1216 竖屏,OmniHuman 会重编码到 952×1696。

04
Call Map · fal vs RunPod

哪些走 fal,哪些走 RunPod

一个常见的误会是「短剧视频也用了 RunPod」。核对实际脚本后:这条短剧视频链路里 RunPod 一处都没调用,全程走 fal.ai。RunPod 属于另一条完全独立的批量生图链路。

🟢

FAL.AI · 按次付费短剧视频 = 100% fal

Seedream 生图 · Kling i2v · OmniHuman 音驱动 · sync-lipsync · MiniMax TTS/克隆——全部经 queue.fal.run 调用。零 GPU 运维、零冷启动。封装脚本 fal_pipeline.py(纯 stdlib)。

FAL_API_KEY @ softie-n8n / vividreams Fly secrets
🔴

RUNPOD · 另一条链路批量生图,非视频

RunPod 承的是 Workflow 仓库的批量图片生成:SDXL(Juggernaut,换装 + 批量 SFW)与 FLUX.1-dev(PuLID)。跟短剧视频是两码事。

SDXL pxfszlcwvemdq6 · FLUX 9r009fw9nks7c1
澄清

记忆里「锚点由 SDXL 生成」是旧措辞——实际脚本 seedream_gen.py 打的是 fal.run/fal-ai/bytedance/seedream/v4/edit,锚点也在 fal。RunPod 在视频链路里的唯一出现,是尚未搭建的降本备选(自建 LatentSync + IndexTTS Pod,量大才回本)。

05
Self-Host Evaluation · Where RunPod Can Replace fal

哪些环节能换成 RunPod 自建

核心判断:能替代的只有「空镜 / 场景类画面生成」;口播真人镜(脸 / 口型 / 音色)无等质开源替代,自建已失败 10+ 轮,必须留 fal。所有替代都以月产量为分水岭。

fal 环节RunPod 替代 · 可行性建议
Kling i2v(空镜/漫游)Sulphur-2 Pod(LTX 22B,已投产):家装漫游 A/B 验证,画质接近 Kling v2.5-turbo,~$0.14 vs $0.70 约 5× 便宜✅ 上量替代
Seedream 生图(场景底图)SDXL serverless pxfszlcwvemdq6(已有):家装「SDXL→Sulphur」已零 fal 跑通✅ 场景可换
sync-lipsync v2LatentSync 1.6 Pod(Apache-2.0,18GB,4090/A6000):$0.3-0.7/条⚠️ >15 条/月回本
MiniMax TTS 合成IndexTTS-2(B站开源,中文强):能自建,但省的钱太少⚠️ 优先级最低
Seedream /edit(真人脸锚点)SDXL 纯文生图:真人感靠真人照片 edit,文生图会假❌ 留 fal
Kling avatar / OmniHuman(音驱动)Hallo / SadTalker 等:质量断崖 + Wan 自建 10+ 轮失败前科❌ 留 fal
MiniMax voice-clone无等质开源;且 $1.5 一次性、registry 复用❌ 留 fal

✅ 值得做(上量时)

  • 空镜/场景/漫游镜头 Kling → Sulphur-2 Pod
  • 最大金额项、已投产、~5× 便宜
  • SDXL 底图链路已跑通
  • lipsync → LatentSync 作第二步

❌ 不值得做

  • Seedream 真人锚点留 fal
  • OmniHuman 音驱动留 fal
  • voice-clone 留 fal
  • 质量生死线,开源无等质替代

⚠️ 先别动(低频时)

  • 单条/低频出片,全留 fal 最划算
  • RunPod 省钱靠量摊薄 Pod 成本
  • Sulphur 串行 8.5min/条,上量要并行
  • Sulphur 只动「场景」不动「人」
成本管控铁律

Serverless 跑不了 22B(必 OOM),Sulphur 只能 Pod;曾因反复冷启动盲调烧掉 $12。真上 RunPod,Serverless 调试必须 workersMax=0 起步封顶预算。

06
Hard-Won Rules · 会让整片白做的坑

开工前必须知道的工程铁律

这些不是查得到的参数,是踩过一遍代价很高的架构级卡点——余额耗尽多次、3.5s 漂移查了很久、损坏文件混过校验。

🎙️

Kling 没有音频输入

只能凭 prompt 瞎编嘴型,口型对不上是必然,换任何 Kling 版本都没用。运动和口型必须分两步:Kling 只管画面,后接独立 sync-lipsync。

🔗

lipsync 输出必须整条用

它会把音频重新计时/偏移(实测 +1.17s~−0.30s),嘴型对齐它自己那条轨。永远不要拆开、不要把原始 TTS 重挂回它的画面。

🧵

拼接用 concat 滤镜

不是 concat 解复用器——解复用器逐段 20-35ms 误差跨 35 段累积成 3.5s 漂移,且单看每个镜头都正常。用单条命令同拼音视频。

⏱️

时间轴按配音真实时间排

不能用「原片镜头时间 × 拉伸系数」——TTS 节奏和原主播不同,线性拉伸后半段累积 >1s 漂移。把每镜锚到它在配音里被念到的时刻。

🕵️

ffmpeg 解码报错也 exit 0

完整性校验看 stderr(ffmpeg -v error -i x -f null -,非空即坏),别信返回码;curl -C - 会跳过旧文件,重下前先删目标。

💳

fal 无余额/账单 API

耗尽会静默失败;队列先收后校验,提交返回 200 不代表模型存在(Seedream 5.0 在 fal 上 404,最新就是 4.0)。urllib 必须带 retry。

两条贯穿性规则

① 底图决定景别:手势/背景取决于底图景别,不取决于走几步——喂胸上景+双手入镜的底图,一步 avatar 就带手势;头肩裁切的底图任何模型都只能出头肩。② 配音先于视频:TTS 比真人慢 16-19%,规则 镜头时长 = max(分镜时长, 配音+0.15s),让画面迁就配音。

07
Cost & Stack · Latest

一页看全用了什么、花了多少

环节模型 / 工具价格 · 供应
真人锚点图Seedream 4.0 /edit(真人照片锚点)$0.03/张 · fal
图生视频Kling v2.6/pro image-to-video$0.35/5s · fal
音驱动口播OmniHuman / kling ai-avatar v2~$0.056/s · fal
口型精修sync-lipsync v2(lipsync-2, cut_off)$0.05/s · fal
音色克隆MiniMax voice-clone(≥10s 参考音)$1.50/次 · fal
TTS 合成MiniMax speech-02-hd / 2.8-hd$0.10/千字 · fal
裁剪 / 叠字 / 拼接ffmpeg · STHeiti · loudnorm -14LUFS免费 · 本地
批量生图(另一链路)SDXL Juggernaut · FLUX.1-dev PuLIDRunPod serverless
空镜降本备选Sulphur-2(LTX 22B)Pod i2v~$0.14/条 · RunPod Pod
lipsync 降本备选LatentSync 1.6(Apache-2.0)$0.3-0.7/条 · RunPod Pod
一句话总括:短剧口播视频 = Seedream 真人锚点 + OmniHuman 音频驱动 + 反打单人架构,全程 fal 托管、单条 $14.82,取代了 v1 的 Kling+lipsync 多步级联。RunPod 是另一条批量生图链路,只有当出片上量(≥15-20 条/月)时,才值得把空镜/场景镜头迁到 Sulphur Pod 省钱——口播真人的脸、口型、音色永远留在 fal。