视频复刻产线 · 技术方案讲解

爆款视频的
换人换声引擎

拿一条已经跑出成绩的爆款,换成自家主播的脸和声音重新出片——观众看不出是 AI 做的,单条成本 $1.8、全程约 40 分钟。

// 面向团队同事的技术讲解 · 三大核心:音色克隆 / 唇形同步 / 表情保真

MINIMAX VOICE-CLONE SYNC LIPSYNC-2 WHISPER TIMELINE OPENCV INPAINT $1.8 / 条 4 轮真人审片迭代
SCROLL / 向下滚动
01
End-to-End Pipeline

一条爆款怎么变成自家素材

九段流水线:只有两段真正花钱(克隆 TTS 与唇形同步),其余全部本地零成本。LLM 只负责判断类工作(改稿、分镜),机械步骤全部脚本化。

本地
取片
分享页 _ROUTER_DATA 提取无水印直链下载(yt-dlp 会被风控拦,不用)
本地
转写
mlx-whisper large-v3-turbo 出逐句时间戳;按 4 秒抽帧看清源视频镜头结构(口播段 / 文件特写段)
LLM
改稿
保留全部核心要点和数字,重写措辞不逐句照搬;按底片场景数切段,每段时长 ≤ 对应底片长度
云端
克隆+TTS
主播真声 62s → MiniMax 零样本克隆 → 用她自己的音色合成新口播(详见 02 章)
LLM
分镜
按 TTS 实测时间戳划定真人出镜窗口插页窗口(条款文件特写)——这是省钱的关键一刀
云端
唇形
先剪后驱动:只把出镜窗口切段送 sync-lipsync v2,插页时段一分不花(详见 03 章)
本地
擦字幕
OpenCV 逐帧 inpaint 擦除底片自带的烧录字幕,构图零改动(详见 05 章)
本地
合成
storyboard.json 驱动 ffmpeg 单 pass:真人段 + Pillow 真实条款插页 + 逐句字幕 + 分段标题
人在环
验收
抽帧逐段目检 + 音轨校验 + 真人听配音、看嘴型;投放前按平台政策做 AIGC 标注

// 设计取向:确定性步骤交给代码,模糊判断才交给模型——下载、切片、擦除、合成全是脚本;只有改稿和分镜由 LLM 做。

02
Voice · Zero-Shot Cloning + TTS

声音:不是像她,就是她

第一版用微软 edge-tts 免费合成,用户一票否决——「声音不像真人,很生硬」。根因是通用 TTS 音色与真人主播完全对不上。解法:先把主播自己的声纹克隆下来,再用她的音色合成任何新台词。

Step A · 克隆一次性

零样本音色克隆

fal-ai/minimax/voice-clone

≥10 秒主播真声(我们用两条底片合并的 62s),模型抽取声纹特征生成专属 voice_id。开 noise_reduction + 音量归一化,带 BGM 的素材也能克隆。

$1.50 / 主播 · 一次性 · 登记进 voice registry 复用
Step B · 合成按字计费

speech-02-hd 出片

fal-ai/minimax/speech-02-hd

MiniMax 是中文语音赛道的第一梯队,韵律、停顿、儿化都自然。参数:speed 1.05 贴抖音口播节奏、language_boost: Chinese、32kHz 采样。

$0.10 / 千字 → 一条 52s 口播 ≈ $0.03
Step C · 质检本地免费

Whisper 回环校验

mlx-whisper · 双用途

TTS 产物回喂 whisper 再转写一遍:①逐字比对确认没吞字错读(本条 235 字零错);②拿到的逐句时间戳是后续字幕轴和分镜窗口的唯一事实源,长段内再按字数比例细分。

时间轴禁止按字数估全片 —— 必须用实测时间戳
选型账

备选里 F5-TTS(开源)中文偏平、CosyVoice 需要 DashScope 账号、IndexTTS-2(B站开源)是自建首选——量大后可搬到 RunPod 把 TTS 成本归零。当前量级下 MiniMax 的自然度溢价完全值得。⚠️ voice_id 闲置 7 天会被回收,克隆前先查共享登记表 fal-voice-registry.md,别重复花 $1.5。

03
Lip-Sync · Diffusion Mouth Resynthesis

嘴型:让底片说出它没说过的话

第一版「照片 + 配音」嘴完全不动,用户反馈「说话时声音跟嘴型对不上」。解法是唇形同步(lip-sync):模型听着新音频,只重绘画面中嘴部区域的每一帧——牙齿、舌位、唇形跟随音素变化,脸的其余部分和背景一个像素都不动。

👄

HOW IT WORKS扩散式嘴部重绘

sync.so 的 lipsync-2 属于音频条件扩散模型:逐帧检测人脸 → 抠出嘴部区域 → 以音频特征为条件重新生成该区域 → 贴回原帧。因为只动嘴部,身份、肤质、光影全部原生保留——这是「看不出 AI」的基础。

fal-ai/sync-lipsync/v2 · model: lipsync-2
✂️

COST TRICK先剪后驱动

唇形按视频秒数计费($3/分钟)。插页(条款特写)时段观众根本看不到嘴——所以先按分镜把真人出镜窗口切出来,只驱动这些秒数。本条:出镜 35.5s vs 整条 52.3s,唇形费 $2.62 → $1.77,省 32%。

sync_mode: cut_off · 输出时长 = 音频切片时长
方案结论价格 / 约束
sync lipsync-2 ✅嘴部细节最佳、无时长切块限制、720p 竖屏原生——采用$3/min
· lipsync-2-pro特写镜头嘴部细节升级档,标准档不够再上$5/min
Kling 官方对口型质量好但 2–10s/次硬限制,60s 要切 6 块拼接,接缝风险~$0.014/5s
LatentSync 1.6字节开源(Apache-2.0),512px 嘴部精度、中文调优,自建质量上限RunPod 自跑 · 18GB VRAM
MuseTalk实时级速度,但嘴部内部分辨率低 → 720p 上牙齿发糊$0.04/次 · 草稿档
Wav2Lip 系老一代 GAN,嘴糊 + 原版权重不可商用——弃
工程护栏

每段 VO 切片必须 ≤ 对应底片段长(cut_off 模式下超长会被拦腰截断);合成时对每段做 tpad + trim 帧级对齐,防止毫秒级漂移逐段累积拖歪整条时间轴。

04
Facial Expression · Real Footage First

表情:不是生成出来的,是保留下来的

这是整套方案最反直觉的一点:我们不用任何模型去「生成」表情。表情、眼神、挑眉、点头、手势——全部来自主播真实拍摄的底片,唇形模型只接管嘴部一小块区域。真实的东西不需要以假乱真。

🚫

否决 · 路线一AI 生成人像

v1 用 FLUX 生成「相似的人」当画面——静态图没有微表情,Ken Burns 推拉也救不了,AI 感一眼穿。生成路线在「像真人」这件事上天花板太低。

🚫

否决 · 路线二数字人开口(s2v)

照片驱动的数字人(如 Wan s2v)实测「照片开口」感强烈:眨眼频率机械、头部僵直、情绪与语义脱节——外部评测同样结论。表情是数字人的阿喀琉斯之踵。

采用 · 路线三真人底片 + 局部重绘

底片里她的每一次微笑、每个手势都是真实表演。唇形模型只重绘嘴部 ~5% 的像素,其余 95% 原封不动——表情保真度天然 100%。

🎬

表情与内容对齐 = 选片的艺术

分镜时按台词情绪挑底片区间:钩子段选手势强调的部分、CTA 选笑容收尾的部分;两条底片(展厅黄裙 / 工厂黑西装)做双场景切换,讲「材料」时正好站在工厂里——场景为内容背书。

🔭

表情升级路线(待开通)

需要「照着新台词重新表演」时的下一代方案:OmniHuman-1.5(音频驱动全身表演 + 语义情绪,火山引擎)与 Seedance 1.5 Pro(原生毫秒级对口型)。工法要点:3–5s 短镜多切、prompt 加乱发丝等「不完美」词防塑料感、禁露齿笑。

Human Loop

本方案是 4 轮真人审片逼出来的:v1 声音生硬+嘴不动被否 → v2 换克隆+唇形但字幕带太重 → v3 裁切去字幕但构图变形被否 → v4/v5 逐帧擦除+原构图通过。审片人的眼睛是最终的损失函数。

05
Artifact Removal · Burned-in Subtitle Inpainting

穿帮消除:旧字幕必须凭空消失

底片自带烧录字幕(旧广告词),和新口播完全对不上——是最大穿帮点。四代方案迭代后的结论:遮不如擦

Dead Ends · 三条死路

黑色字幕带盖住 → 被否「黑色区域过大」;重度模糊+压暗 → 大号高对比字幕的残影仍可读;裁切放大把字幕裁出画面 → 人物变低变近、构图被否。通用视频 inpainting 模型(ProPainter 等)对「全程被盖的静态区域」无源可借,只会生成一团糊——调研后放弃。

🎯

WINNING MOVE逐帧字形级擦除

不遮整条区域,只擦字本身:条带内检测白色字芯(RGB>185 且近灰白)∪ 贴边黑描边(暗像素 ∩ 字芯 13px 邻域),膨胀 5px 成掩膜,cv2.inpaint(TELEA) 用周围像素插值填充。字幕落在纯色衣物上时基本无痕

ZERO COST本地流式处理

ffmpeg rawvideo 管道解码 → NumPy 逐帧处理 → 管道回编码,1569 帧约 1 分钟跑完,零 GPU 零 API 费。新字幕恰好压在擦除区上方,进一步掩盖手部经过时的轻微涂抹感。

ffmpeg 冷知识(都翻过车)

concat 分支内 overlay 无限循环图片流必须 shortest=1,否则其它分支整段消失而总时长正常——极难察觉;JPEG 是全范围色域,进视频链路必须 in_range=pc:out_range=tv;静态 PNG overlay 必须 -loop 1 否则跨拼接边界后 enable 窗口失效。

06
Unit Economics

一条 52 秒成片的账

环节说明成本
音色克隆每位主播一次性,voice_id 登记复用$1.50(摊销后 ≈ 0)
TTS 合成235 字 × $0.10/千字$0.03
唇形同步先剪后驱动:只驱动出镜 35.5s × $0.05/s$1.77
取片 / 转写 / 擦字幕 / 合成全部本地脚本$0
单条合计同主播稳态成本≈ $1.80 / 条
📉

成本主要由片长决定

95% 的钱花在唇形按秒计费上:30s 短版 ≈ $1.2,60s ≈ $2.4。压成本的杠杆是多用插页、少驱动出镜秒数,而不是压质量档位。

🏗️

量大后的自建路线

LatentSync 1.6 + IndexTTS-2 部署到自有 RunPod(4090/A6000 Pod),单条 GPU 成本 $0.3–0.7、无限重跑挑最好一版;搭建验证约一天,产量 >15 条/月才回本——试投阶段不值得。

07
Team Playbook · Skill

怎么用:一句话触发

整条产线已沉淀为 Workflow 仓库的共享 skill .claude/skills/douyin-replica(PR #28 已合并),文档经过「新人代理干跑测试」修订,照着走不会踩坑。

✅ 触发方式

  • Workflow 仓库目录打开 Claude Code
  • 说「复刻这条视频 <链接>,换成 xx 主播」并附底片路径
  • 全流程约 30–40 分钟,唇形任务并行提交

📋 前置条件

  • 主播口播底片 ≥30s(720×1280,脸部清晰)
  • FAL_API_KEY:softie-n8n Fly secrets(skill 内有取法)
  • 克隆前查 fal-voice-registry.md 登记表
  • 本机 flyctl 已授权(没有找 Gus 开)

⚠️ 投放红线

  • 口播稿重写,不逐句照搬源视频
  • 音色克隆仅限已授权的自家主播
  • 投放前按抖音政策做 AIGC 标注
  • 成片必须真人过一遍:听配音、看嘴型
一句话总括:零样本音色克隆让声音「就是她」,用扩散式嘴部重绘让嘴跟上新台词,用真人底片让表情天然为真,再用逐帧擦除消掉唯一的穿帮点——四件事拼起来,就是一条观众看不出 AI 的投放素材,$1.8 一条。