libincao
← ARTICLES
2026.09.03 · 6 MIN · 中文 · AI

我用 AI 把一个普通人「塞进」了《玩具总动员》

在短视频平台刷到一类效果:《玩具总动员》里的角色被换成一个真人,动作和场景全都保留,像这个人住进了动画里。评论区一片「这怎么做的」,我决定从零复刻一条。动手前踩的第一个坑是认知上的:Seedance 是「参考生成」,不是抠图换脸——它会重新生成整段视频。想清楚这一点,剩下的就是围绕 15 秒上限、只出 16:9、以及版权过滤这三个约束去设计流程。

起因:刷到一条视频

前几天我在短视频平台刷到一类视频:把《玩具总动员》里的某个角色,换成一个真人(做成同样的卡通风格),角色的动作、场景全都保留,看起来就像这个人「住进」了动画里。评论区一片「这怎么做的」,我也很好奇——于是决定自己从零复刻一条。

我挑的素材是网上找到的一条二创视频(Ken 从柜子里跳出来跳舞,41 秒),不是《玩具总动员》的官方片段。下文提到的「原片」都指它:

🎬 素材视频Ken 从柜子里跳出来跳舞,41 秒

目标:把里面的 Ken 全程换成我准备的一个真人照片,其余(场景、旁边的翠丝和马、旁白)尽量不动。


一个关键认知:这不是「抠图换脸」

动手前我踩的第一个认知坑,值得先说清楚:

我用的视频模型是 Seedance 2.0,它是「参考生成」——你给它一段参考视频 + 一张参考图 + 一段提示词,它会重新生成一段新视频,而不是「只把某个人抠出来替换、其它像素原封不动」。

所以整套流程都是围绕这个事实设计的:

如果你要的是「原视频一帧不改、只换一个人」,那是另一种技术(视频 inpainting),这套流程做不到。


Step 1:先把真人变成卡通角色(gpt-image)

真人照片直接丢进视频模型,会和卡通场景「打架」——一张真实的脸贴在卡通身体上,很违和。所以第一步,先用 gpt-image 把真人重画成和原片一致的 3D 皮克斯画风

我的做法是同时喂两张参考图

提示词让它输出全身、正面、纯色背景的「角色设定图」——这张图后面每个镜头都能复用。

我实际用的 prompt 和命令(两张参考图:真人照片定长相、原片一帧定画风):

python3 gpt-image/generate.py \
  -i image.jpg -i ken_style_ref.jpg \
  --size 1024x1536 --quality high \
  "Redraw the woman from the FIRST reference photo as a full-body 3D Pixar / Toy-Story-style cartoon character, matching the art style, glossy CG shading and soft warm lighting of the SECOND reference render. Stylized 3D look: smooth plastic-like skin, large expressive eyes, slightly exaggerated friendly proportions. Keep her recognizable: round face with glasses, dark shoulder-length hair with bangs, her outfit of a khaki short-sleeve tee, khaki cargo pants, grey sneakers, and a small crossbody bag. Standing, neutral front-facing pose, arms relaxed at her sides, full body head-to-toe in frame. Plain neutral light-grey studio background, no scenery. Clean character-sheet look."
用 gpt-image 生成的卡通角色设定图:全身、正面、纯色背景
gpt-image 生成的角色设定图:全身正面、纯色背景,后面每个镜头都复用这一张

小提示:如果特别在意「像不像本人」,可以用 gpt-image-1--input-fidelity high;如果更在意「融进画风」,默认模型就够了。我这次选的是「画风优先」。


Step 2:拆解原视频,找到要换的镜头

不能一股脑把 41 秒全丢进模型(后面会讲为什么),得先看清结构。我用 ffmpeg 做了两件事:

  1. 抽帧拼成一张「联系表」,一眼看清谁在第几秒、什么镜头;
  2. 检测转场切点,让后面分段的接缝正好落在原片真实剪辑处(这样拼起来最不突兀)。
# 找转场切点
ffmpeg -i video.mp4 -filter:v "select='gt(scene,0.15)',metadata=print" \
  -f null - 2>&1 | grep -oE "pts_time:[0-9.]+"

拆完得到一张「分镜处理表」:哪几段有 Ken(要重生成)、哪几段没有(原片保留)。


Step 3:切片 + 传到公网(R2)

Seedance 的参考素材必须是公网 URL(它自己去下载),所以本地文件要先上传。我用的是 Cloudflare R2:


Step 4:逐段替换(Seedance 参考生成)

对每个要换的镜头:

我实际用的 prompt(每段都带上同一段角色描述,保证前后一致):

# 复用的角色描述,拼进每段提示词
GIRL="a friendly 3D Pixar-style girl with round glasses, dark shoulder-length hair \
with bangs, a khaki short-sleeve tee, khaki cargo pants, grey sneakers and a small \
crossbody bag"

# 例①:开门亮相那段
--prompt "Use the reference video as the main guide for camera, timing and motion. \
A tall wardrobe/box door is open and a character is revealed inside striking playful \
poses. Replace that revealed character with $GIRL. She performs the exact same reveal \
and posing motion, same body movements and timing, medium shot. Keep the warm indoor \
lighting and glossy Toy Story 3D cartoon rendering, consistent character."

# 例②:结尾三人同框——注意「去品牌化」措辞,绕开版权过滤
--prompt "... A hooded/other character interacts with a small cowgirl toy figure and a \
toy horse figure. Replace ONLY that character with $GIRL; keep the two toy figures \
EXACTLY as in the reference video, unchanged. Same movements and timing. ..."

# 每段调用的骨架都一样,只换 ref-video / duration
seedance --model seedance-2.0 \
         --ref-video <该段的公网URL> --ref-image <角色图公网URL> \
         --ratio 16:9 --duration <4-15> --resolution 1080p --no-audio

多段可以并行提交、一起等,省时间。没有 Ken 的镜头(片头翠丝喊人、中间的过渡)直接跳过,用原片。


Step 5:合成(ffmpeg)

模型只能出 16:9,而原片是 4:3,所以每段生成完还要:

成品就出来了:

最终成品换完人的完整 41 秒


踩过的坑(这几条最费时间)


小结

整条链路其实就五步:gpt-image 卡通化 → 拆分镜 → 切片上传 → Seedance 逐段换人 → ffmpeg 拼接配音

真正的难点不在某个工具,而在认知:想清楚「它是重新生成、不是抠图替换」,剩下的就是围绕 15 秒上限、比例、版权过滤这些约束去设计流程。

第一次跑通花了点功夫,但流程沉淀下来之后,换个角色、换个原片再做一条,就很快了(我后来又用同样的流程做了一条 Alan Walker 版的)。

⚠️ 说明:这里用作素材的是网上找到的一条二创视频,并非《玩具总动员》的官方片段;片中出现的角色版权归迪士尼 / 皮克斯所有。本文只作个人学习与技术分享用途,请勿商用。


工具清单:gpt-image(卡通化)、Seedance 2.0(参考生成视频)、Cloudflare R2(公网托管)、ffmpeg(切片与合成)。