Deforum 的关键帧并不是简单的两个数值,而是一组带帧编号的数据,用来控制动画参数在不同时间点的状态。2D 和 3D 模式下,关键帧插值发生的作用空间完全不同,这直接决定了画面过渡是否平滑、镜头运动是否自然。理解关键帧字符串的结构,以及插值算法在平面运动和三维相机运动中的差异,是做出稳定动画的前提。

一、Deforum 关键帧字符串的结构与插值原理
Deforum 的动画参数大多采用关键帧字符串来描述,例如 translation_x 可以写成 0:(0), 30:(5), 60:(0)。这里圆括号里的数值是目标参数值,逗号前的数字是帧编号。插件在生成每一帧时,会根据当前帧在相邻两个关键帧之间的位置计算插值结果。相邻关键帧之间的时间跨度越大,插值持续时间越长,运动变化越平缓;跨度越小,则变化越急促。
插值过程并不是简单的求平均,而是按照设定好的插值函数来计算中间值。默认很多时候是线性插值,也就是每一帧的变化量完全相同。这种插值适合匀速平移或匀速缩放,但在需要起停缓冲的镜头里会显得生硬。Deforum 及相关扩展通常允许在全局设置里指定插值算法,例如 linear、cosine、smoothstep 等,也会根据每条参数是否显式指定缓动来覆盖全局值。理解这个结构后,再看 2D 与 3D 模式的差异会更清楚。
关键帧字符串里还可以使用科学计数法、负数和小数,例如 0:(-0.8), 20:(0.2), 50:(1.5)。括号前后不要使用额外的空格或特殊符号,否则解析器可能无法正确读取。如果同一个参数只写一个关键帧,该参数在整个动画中保持不变;写两个以上就会触发插值。定义关键帧前,建议先确定动画总帧数,因为帧编号超出总帧数或者顺序写反,都会导致插值异常。
{
"animation_mode": "2D",
"max_frames": 120,
"translation_x": "0:(0), 60:(2), 120:(0)",
"translation_y": "0:(0), 60:(-1), 120:(0)",
"zoom": "0:(1.0), 30:(1.2), 120:(1.0)",
"angle": "0:(0), 60:(2), 120:(0)"
}
二、2D 模式下关键帧插值的具体应用
2D 模式主要控制平面空间里的平移、缩放和旋转。常见的四个参数是 translation_x、translation_y、zoom 和 angle。XY 平面上的插值只发生在两个轴向上,视觉上表现为画面上下左右移动,插值是否正确很容易从背景元素的运动速度看出来。
比如你想让画面先向右移动再回到原位,可以设置 translation_x 为 0:(0), 40:(2), 100:(0)。如果使用线性插值,0到40帧期间画面会保持恒定速度右移,40帧后反向匀速回到中心。第40帧处速度方向瞬间改变,如果动画中有明显前景物体,会看到一次轻微顿挫。要避免这种顿挫,可以改用 cosine 或 smoothstep 插值,让接近关键帧时速度降到零,再自然加速。这样即使关键帧数量不变,观感也会柔和很多。
zoom 在 2D 模式下的插值更需要注意:缩放不是线性地改变视角宽度,而是对画面做倍率变换。例如从 1.0 到 1.2 再回到 1.0,线性插值会使缩放速度恒定,在中间点快速拉近又快速拉远,容易出现呼吸感过强的问题。建议为 zoom 单独使用 smoother 插值,或者增加一个中间缓冲关键帧,让缩放变化集中在中间阶段,两端尽量平缓。angle 参数控制平面旋转角度,通常用小数表示弧度或度,插值方向固定,但旋转超过一圈时要避免从 0 到 359 度产生反向旋转,可以先换算到连续区间再写关键帧。
{
"animation_mode": "2D",
"max_frames": 90,
"translation_x": "0:(0), 30:(1.6), 60:(1.6), 90:(0)",
"translation_y": "0:(0), 45:(-0.5), 90:(0)",
"zoom": "0:(1.0), 15:(1.05), 75:(1.15), 90:(1.0)",
"angle": "0:(0), 30:(0.02), 60:(-0.02), 90:(0)"
}
三、3D 模式下关键帧插值的特殊性
3D 模式与 2D 最大的区别是增加了 Z 轴、相机旋转和视场角。常用参数包括 translation_z、rotation_3d_x、rotation_3d_y、rotation_3d_z 和 fov。这些参数并不是在一个平面上做线性移动,而是通过相机模型映射到画面,导致同样的数值变化在画面边缘和中心会产生不同的视觉效果。因此不能简单沿用 2D 的插值经验。
rotation_3d 系列尤其容易出问题。旋转角度在三维空间里存在万向锁和最短路径选择的差异,相邻关键帧之间如果角度差超过 180 度,插值方向可能不是你想要的方向。例如从 rotation_3d_y 的 170 度过渡到 -170 度,数学上只差 20 度,但很多线性插值会沿长路径旋转 340 度,造成镜头快速甩动。解决方法是把关键帧写成连续递增的角度,比如 0:(0), 30:(170), 45:(190),用 190 代替 -170,让插值方向可控。
translation_z 控制相机前后移动,它直接影响透视强度。与 2D 的 zoom 不同,Z 轴移动会产生近大远小的空间变化,画面边缘的物体运动速度可能高于中心。fov 参数则改变可视角度,广角端会拉伸空间,长焦端会压缩空间。如果同时给 translation_z 和 fov 设置线性插值,两者叠加后可能出现非常夸张的畸变。建议在 3D 模式下为 Z 轴移动和 fov 使用不同的缓动曲线,或者通过测试帧观察画面边缘是否有明显扭曲,再调整插值策略。
{
"animation_mode": "3D",
"max_frames": 120,
"translation_x": "0:(0), 30:(0.3), 90:(-0.2), 120:(0)",
"translation_y": "0:(0), 60:(-0.4), 120:(0)",
"translation_z": "0:(0), 45:(1.5), 90:(1.2), 120:(0)",
"rotation_3d_y": "0:(0), 60:(15), 120:(0)",
"rotation_3d_x": "0:(0), 90:(5), 120:(0)",
"fov": "0:(70), 60:(85), 120:(70)"
}
四、插值曲线选择与调试建议
Deforum 及相关动画扩展通常支持多种插值算法,例如线性插值、余弦插值、平滑阶跃插值以及更高级的贝塞尔缓动。不同算法对应不同的速度曲线:线性插值速度恒定;余弦插值在两端速度较慢,中间较快;平滑阶跃插值在关键帧附近有更长的停稳区间;贝塞尔缓动则允许自定义控制点,能模拟出先快后慢或先慢后快的手感。
实际调试时不要一上来就添加大量关键帧。先确定镜头运动的主路径,在路径转折点放置关键帧,然后统一使用同一种插值算法观察整体节奏。如果发现某个区间速度突变,再针对那条参数加入额外的缓冲关键帧,而不是只改全局算法。关键帧值越简洁,后续调整空间越大。动画总帧数较小时,线性插值容易显得机械,推荐使用余弦或平滑阶跃;总帧数较大时,线性插值反而能保留更多匀速运动,避免画面长时间停滞。
调试阶段可以用低分辨率批量生成少量帧,对比不同插值设置下的画面运动,特别关注画面边缘和深度变化明显的区域。也可以把关键帧导出来,用图表查看每个参数的速度曲线,判断是否存在不必要的尖峰。最终设置建议写进独立的配置文件,避免直接在 Deforum 界面里反复修改,这样参数可复现,也方便在 2D 和 3D 模式之间切换时做对比。
Deforum关键帧设置2D/3D模式关键帧插值修改时间:2026-09-25 10:28:17