SOLUTION · 镜头交切宽镜建共存 → 反打单人
开场用宽镜(两人走廊)建立共存感,然后切反打单人镜头:每个人物单独驱动 OmniHuman,一对一映射保证口型准确,眼神交互感靠镜头交切完成。总镜头数 = 2 人 × 2-3 个反打角度。
从一张真人锚点图出发,一段音频直接驱动出唇形 · 眼神 · 手势全协调的口播视频——一套 fal 托管、按次付费、单条 $14.82 的 AI 短剧产线。
// 记录 v1→v2 的架构转变、反打单人套路、fal/RunPod 调用地图与自建替代评估
v1 用 Kling 生动作、再串 lipsync 补口型,多步级联把误差层层叠加。v2 换成 OmniHuman 单次音频驱动——一个模型同时吐出唇形、眼神、头部与全身表情,成本持平,质量显著提升。
Kling i2v → sync-lipsync 串行
用户三点反馈:① 口型对不上(唇形与音频错位)② 表情生硬(面部缺乏自然变化)③ 肢体僵硬(全身动作呆板无生活感)。多步级联的误差在最后一步集中爆发。
audio → video + face + body
输入音频,直接输出驱动好唇形、眼神、头部细节、全身表情协调一致的口播视频。避开级联,「生动作」和「对口型」在同一步内天然对齐。
OmniHuman 一步到位(audio→video+face+body),避免多步级联误差叠加。成本与 v1 持平,但把 v1 的三个病一次治好——这是整次迭代的核心结论。完整成片总成本 $14.82(含拍摄、剪辑、音频处理)。
全链路走 fal.ai 托管、按次付费、零 GPU 运维。锚点图的真实感直接决定成片逼真度;配音必须先于视频,好让画面时长迁就配音节奏。
bytedance/seedream/v4/edit:把自有主播真实照片塞进 image_urls[] 当参考图,脸锚定在真照片上,天生带真实肤质与不对称五官$0.03/张
minimax/voice-clone,$1.5 一次性可复用),再 speech-02-hd 合成中文口播;语速 1.15-1.30 贴节奏$0.10/千字
sync-lipsync/v2 精修;台词 >5s 的镜头 Kling 必须提交 10s 档,否则后半句哑掉$0.05/s
// 两条链路:纯头肩静态播报走 一步 OmniHuman/avatar;要「手势 + 全身动感」走 Seedream → Kling i2v → sync-lipsync 三步链。
OmniHuman 在两人同框对话时,音频驱动指令会让两张脸同时张嘴——口型全错。双人同框是这套音驱动方案的天然禁区。
开场用宽镜(两人走廊)建立共存感,然后切反打单人镜头:每个人物单独驱动 OmniHuman,一对一映射保证口型准确,眼神交互感靠镜头交切完成。总镜头数 = 2 人 × 2-3 个反打角度。
生成单人镜头必须显式约束: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 再说] 反向角度特写 → 宽镜(两人互动,结尾)。开场+结尾宽镜保共存,中间单人特写保对白清晰,转场靠交切而非生硬切换。
Seedream 锚点质感 = ~90% 真实感。锚点图(由 SDXL/Seedream 出)质量直接决定 OmniHuman 输出逼真度:禁用美颜/磨皮(避免 CG 塑料感,要自然肤质毛孔),分辨率 ≥832×1216 竖屏,OmniHuman 会重编码到 952×1696。
一个常见的误会是「短剧视频也用了 RunPod」。核对实际脚本后:这条短剧视频链路里 RunPod 一处都没调用,全程走 fal.ai。RunPod 属于另一条完全独立的批量生图链路。
Seedream 生图 · Kling i2v · OmniHuman 音驱动 · sync-lipsync · MiniMax TTS/克隆——全部经 queue.fal.run 调用。零 GPU 运维、零冷启动。封装脚本 fal_pipeline.py(纯 stdlib)。
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,量大才回本)。
核心判断:能替代的只有「空镜 / 场景类画面生成」;口播真人镜(脸 / 口型 / 音色)无等质开源替代,自建已失败 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 v2 | LatentSync 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 |
Serverless 跑不了 22B(必 OOM),Sulphur 只能 Pod;曾因反复冷启动盲调烧掉 $12。真上 RunPod,Serverless 调试必须 workersMax=0 起步封顶预算。
这些不是查得到的参数,是踩过一遍代价很高的架构级卡点——余额耗尽多次、3.5s 漂移查了很久、损坏文件混过校验。
只能凭 prompt 瞎编嘴型,口型对不上是必然,换任何 Kling 版本都没用。运动和口型必须分两步:Kling 只管画面,后接独立 sync-lipsync。
它会把音频重新计时/偏移(实测 +1.17s~−0.30s),嘴型对齐它自己那条轨。永远不要拆开、不要把原始 TTS 重挂回它的画面。
不是 concat 解复用器——解复用器逐段 20-35ms 误差跨 35 段累积成 3.5s 漂移,且单看每个镜头都正常。用单条命令同拼音视频。
不能用「原片镜头时间 × 拉伸系数」——TTS 节奏和原主播不同,线性拉伸后半段累积 >1s 漂移。把每镜锚到它在配音里被念到的时刻。
完整性校验看 stderr(ffmpeg -v error -i x -f null -,非空即坏),别信返回码;curl -C - 会跳过旧文件,重下前先删目标。
耗尽会静默失败;队列先收后校验,提交返回 200 不代表模型存在(Seedream 5.0 在 fal 上 404,最新就是 4.0)。urllib 必须带 retry。
① 底图决定景别:手势/背景取决于底图景别,不取决于走几步——喂胸上景+双手入镜的底图,一步 avatar 就带手势;头肩裁切的底图任何模型都只能出头肩。② 配音先于视频:TTS 比真人慢 16-19%,规则 镜头时长 = max(分镜时长, 配音+0.15s),让画面迁就配音。
| 环节 | 模型 / 工具 | 价格 · 供应 |
|---|---|---|
| 真人锚点图 | 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 PuLID | RunPod serverless |
| 空镜降本备选 | Sulphur-2(LTX 22B)Pod i2v | ~$0.14/条 · RunPod Pod |
| lipsync 降本备选 | LatentSync 1.6(Apache-2.0) | $0.3-0.7/条 · RunPod Pod |