想象你面前有一座微缩沙盘:小木屋、行道树、停在路边的自行车,全部被胶水粘在底盘上。你想让树叶轻轻摆动、屋顶的炊烟缓缓流动、自行车轮子转起来,但你不能端起整座沙盘摇晃。Motion Brush 就是 AI 视频工具里的一把魔法喷漆枪。你只需在画面某个区域喷上一笔,那个区域就像被解除了定身咒,开始按照你拖动画笔的方向运动;没喷到的地方仍然安安静静。喷得浓,动得多;喷得淡,动得少。方向、幅度、范围,全都由这一支笔刷控制。本文就用这把喷漆枪,带你从头到尾学会精准控制视频里的局部运动。
对 AI 视频创作者来说,学会 Motion Brush 等于从「整段视频随机动」升级到「想动哪里动哪里」,是做出专业级局部动效的核心技能。
可视化演示
展示Motion Brush笔刷区域选择、运动方向幅度控制及效果对比,揭示AI视频局部运动精确控制的核心机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Motion Brush笔刷区域控制 笔刷涂抹:在视频帧上绘制需要产生运动的区域 区域蒙版:笔刷轨迹生成精确的运动区域蒙版 运动方向:指定区域内像素的运动方向和幅度 Motion = BrushMask × Direction × Amplitude Motion Brush实现视频局部运动的精确控制
认识运动笔刷
把照片想象成沙盘,Motion Brush 就是一把魔法喷漆枪。你拿着喷枪在沙盘的小路上喷了一笔,之后模型生成时,才敢让小路附近的模型动起来。喷枪没有把物体抓走,只是给这块区域发了一张「运动许可证」。这种理解非常重要:它决定了你后续所有的操作,都是在划定「哪里能动」和「怎么动」,而不是直接搬运画面。
在技术层面,图生视频模型默认会给整张图生成运动,容易导致背景乱晃、主体漂移。Motion Brush 提供的是一张由你的笔画人工指定的空间遮罩。常见工具里的 motion brush、motion paint、局部运动笔刷,名称不同,核心逻辑却一致:先用遮罩框出局部,再为目标区域赋予运动信息。
运动笔刷生成的结果,可以看作一个逐像素的运动场。每个像素都被赋予一个位移向量;没被笔刷覆盖的地方,这个向量为 0,画面自然保持静止。用公式表达,就是原图加上「遮罩 × 方向 × 时间」的累积效果。
所以,拿喷漆枪之前,先认识一瓶漆的边界:它只负责「哪里能动、怎么动」,不会替你判断哪些内容该动。所有局部运动,都从这一笔开始。
- 输出像素
I_out(p,t)表示位置 p 在时刻 t 的最终像素颜色。 - 输入像素
I_in(p)是原图在位置 p 的像素,也就是运动开始前的底色。 - 笔刷遮罩
M(p)表示该像素是否被喷漆枪覆盖,覆盖取 1,未覆盖取 0。 - 运动方向
D(p)是每个被覆盖像素的位移向量,方向由你拖动画笔的路径决定。 - 时间累计
t是播放时间,随时间增大,位移不断累积,形成连续动效。
区域选择技巧
喷漆最怕喷歪。给沙盘喷漆之前,你会用报纸和遮蔽胶带把不想动的地方挡住。Motion Brush 的区域选择就是这个道理:笔刷划过的地方是「候选运动区」,笔画之外是「禁区」。你画的范围越精准,最终效果就越接近「只动该动的部分」。
实际操作中,笔刷大小直接控制区域粗细。笔刷太粗,背景会被卷进来,比如想让水面动,结果把岸边树影也一起带起来;笔刷太细,发丝、水纹、小光斑这些细节又容易被漏掉。经验做法是先用大笔刷做粗选,把主体区域整体覆盖一遍,再缩小笔刷,细致补上边缘细节。
从算法视角看,区域选择本质上是在生成一张遮罩。遮罩的每个像素值表示运动许可比例:0 代表完全不动,1 代表允许全幅度运动。中间值则用来做柔和过渡。
好的遮蔽等于成功了一半。不要用生硬的一刀切选区,边缘要留一点过渡带,让漆自然晕开,选区才不会像刀切一样在视频里露馅。
- 像素位置
p表示画面里的任意一个像素点。 - 笔刷区域
Ω_brush是被笔画覆盖的所有点的集合。 - 覆盖判定当
p属于笔刷区域时,遮罩值取 1,运动许可全开。 - 未覆盖判定当
p不属于笔刷区域时,遮罩值取 0,保持静止。
运动方向控制
喷漆枪的喷嘴可以调方向,Motion Brush 的笔画也一样。你画一笔不只是圈范围,你拖动笔尖的路径,就是告诉模型「风往哪里吹」。如果想让小河向右流,就沿着河床从左往右画一笔;想让烟雾向左飘,就沿着烟雾路径从右往左带一下。
方向控制不是只能画一笔。同一画面里,不同局部经常需要不同的方向:头发向右飘、衣角向左扬、树叶向斜上方抖动。你可以在不同区域分别画上各自的方向。模型会把不同笔画的方向融合成一个连续的方向场,避免相邻区域之间像两块硬接的布料。
这种融合在数学上就是多次笔画的方向加权叠加。每一笔在某个位置的作用强度由笔刷浓度决定,浓度越高,这一笔对最终方向的影响越大。
沙盘上可以同时存在东南风和西北风,只要不同区域用不同笔尖方向,模型就会让每个局部各自随风而行,互不干扰。
- 最终方向
D(p)是像素 p 经过多笔合成后的运动方向。 - 第 k 笔方向
d_k是你画的第 k 笔的单位方向向量。 - 笔画权重
w_k(p)表示第 k 笔在位置 p 的覆盖强度或浓度。 - 累加求和
Σ把多笔贡献相加,让方向从一笔平滑过渡到另一笔。
幅度与速度控制
喷枪除了方向,还有出漆量旋钮。Motion Brush 的笔刷强度、不透明度或浓度,就相当于这个旋钮。旋钮拧小,树叶只是微微颤动;旋钮拧大,树叶能明显摆动。这个「动多大」的尺度,就是运动幅度。
运动幅度不是每一帧匀速往前推的。真实世界的运动通常有启动、加速、减速、停止。如果每一帧都线性位移,画面会像幻灯片平移,毫无质感。Motion Brush 类工具通常会提供强度曲线、速度曲线或时间权重,让你把运动节奏从「僵直平移」调成「自然摆动」。
一个常用的平滑运动模型是从 0 缓慢加速、再缓慢减速到终点,像喷漆从枪口轻轻涌出,最后稳稳收住。
拧出漆量时别贪多,先让局部轻轻动起来,再逐步加大幅度。风太大,容易把沙盘上其他小道具一起刮跑。
- 位移量
s(t)表示时刻 t 相对原位置的偏移大小。 - 最大幅度
A由笔刷强度决定,喷得越浓,A 越大。 - 平滑因子
1 - cos(πt/T)在起点和终点附近变化都很慢,中间加速,形成柔和节奏。 - 运动时长
T控制整个运动完成的时间,T 越小,看起来越快。
参数精调方法
一个老练的喷漆工,不会一枪喷到底,而是调口径、调浓度、喷一层晾一层。Motion Brush 的参数面板就是你的喷漆工具箱:笔刷大小、不透明度、羽化、时间范围,每一项都值得单独打磨。
最关键的一项是羽化。羽化让遮罩边缘从 1 慢慢降到 0,而不是从 1 突然跳到 0。硬边会造成边缘像素在相邻帧之间时动时不动,出现闪烁和锯齿。就像喷漆到墙面边缘突然截止,会留下一道生硬的棱线;稍微让漆雾扩散一点,边界便自然融入背景。
羽化遮罩可以用一个平滑的 S 形函数表示:像素离笔刷边界越远,运动许可越接近 1;越接近边界外侧,越接近 0。
每调整一个参数,就循环预览几帧,再改下一项。少食多餐式调参,才能避免一次改太多,最后出了问题都不知道是谁的锅。
- 羽化后遮罩
M_f(p)表示经过边缘柔化后的运动许可值。 - 有符号距离
d(p)表示像素 p 到笔刷边界的距离,内部为正,外部为负。 - 软硬系数
k控制过渡带陡峭程度,k 越大,边界越锐利。 - S 形压缩
1 / (1 + e^-x)把任意实数压缩到 0 到 1 之间,形成平滑渐变。
实战完整流程
把喷枪收好之前,最后走一遍完整喷涂流程。假设你有一张湖面照片,想让湖水涟漪动起来,湖心小船保持不动。这个案例足够说明 Motion Brush 的标准工作流。
第一步是素材准备,确认画面分辨率、运动主体的边界和背景关系。第二步是首笔策略:先用大笔刷把水面区域粗喷一遍,方向沿波纹延伸方向轻扫,这样模型能抓住水流的整体趋势。第三步是检查修正:播放预览,如果发现湖边树影被带动,就缩小笔刷或降低不透明度,把多余区域擦掉。第四步才是导出合成,确认没有撕裂和闪烁后,再叠加调色、音效。
实战中经常需要控制运动只在一段时间内发生,比如前两秒水面静止,第三秒才开始起风。这时要使用时间范围控制,让运动只在指定窗口内生效。
完整流程就是一次「喷前检查、喷中观察、喷后修补」。不要指望一笔封神,小步迭代才是 Motion Brush 的真相。
- 时空遮罩
M_t(p,t)同时依赖空间位置 p 和时间 t,决定某一帧某一点能否运动。 - 空间遮罩
M(p)是该点是否被笔刷选中的空间许可。 - 指示函数
1_{[t_s,t_e]}(t)只有在 t 位于[t_s,t_e]区间内才等于 1,否则为 0。 - 整体效果空间许可和时间窗口相乘,让运动只在指定时间段发生。
AI 应用场景
产品广告的局部光效流动
阶段:图生视频生成阶段的局部运动控制
解决的问题:传统广告片中,让产品标签上的高光自然流动,需要逐帧抠像、网格变形和跟踪绑定,工作量很大。Motion Brush 可以直接在静态产品图上圈出标签区域,用低强度笔刷画一条纵向路径,让光效柔和滑动,背景和瓶身保持静止。
具体案例:某护肤品牌需要一支精华液主图视频。把产品高清图导入工具,用 Motion Brush 选中标签上的高光区,画一条从上到下的短路径,强度设为 20%,时间曲线选平滑加速减速,生成 3 秒预览。画面中只有瓶身高光缓缓流动,品牌字和瓶盖纹丝不动。
老照片局部活化
阶段:后期动效微调
解决的问题:老照片活化时,最怕整张照片像果冻一样乱晃。Motion Brush 可以把运动严格限制在头发、衣角等局部,让五官和背景保持稳定,避免恐怖谷效果。
具体案例:一张民国时期全家福,希望照片中一位女士的头发和衣角轻轻飘动。用笔刷沿发梢和衣摆画斜向微风,开启羽化,最大幅度控制在 8%,时间曲线使用先快后慢的衰减节奏。生成后反复预览,发现衣角幅度偏大,再单独降低该区域强度,最终导出 5 秒动图。
Python 演示
import numpy as np def build_circle_mask(h, w, cx, cy, r, feather=3.0): y, x = np.ogrid[:h, :w] d = np.sqrt((x - cx) ** 2 + (y - cy) ** 2) mask = np.clip((r - d) / feather + 0.5, 0.0, 1.0) return mask def motion_brush_frame(img, mask, velocity, t): out = img.astype(np.float32) h, w = img.shape[:2] dy, dx = int(velocity[0] * t), int(velocity[1] * t) src_y = np.clip(np.arange(h) - dy, 0, h - 1) src_x = np.clip(np.arange(w) - dx, 0, w - 1) shifted = img[src_y][:, src_x] m = mask[..., None] if img.ndim == 3 else mask out = img * (1 - m) + shifted * m return np.clip(out, 0, 255).astype(np.uint8) def make_checkerboard(h, w, cell=16): base = np.zeros((h, w), dtype=np.uint8) parity = (np.arange(h)[:, None] // cell + np.arange(w)[None, :] // cell) % 2 base[parity == 0] = 255 return np.stack([base] * 3, axis=-1) def main(): h, w = 64, 96 img = make_checkerboard(h, w) mask = build_circle_mask(h, w, 48, 32, 14, feather=4.0) velocity = (0, 12) for t in range(5): frame = motion_brush_frame(img, mask, velocity, t) print("frame", t, frame.shape, "mask_max", round(float(mask.max()), 2)) if __name__ == "__main__": main()
mask = np.clip((r - d) / feather + 0.5, 0.0, 1.0)生成带羽化的圆形遮罩,内部接近 1,外部接近 0。shifted = img[src_y][:, src_x]从原图错位采样,模拟局部像素被推动后的效果。m = mask[..., None] if img.ndim == 3 else mask把遮罩扩展成三通道,方便直接和三通道图像相乘。out = img * (1 - m) + shifted * m只有遮罩为 1 的区域使用位移后的像素,其余保持原样。for t in range(5)按时间步生成 5 帧,验证运动是逐帧累积的。
常见误区
误区我以为笔刷画到的区域就是最终会动的所有像素;如果边缘还有一点在动,说明我画得不够准。
正解画到的区域只是运动许可区,模型还会根据纹理、前后景关系和光流决定哪些像素真正位移。运动可能在边缘轻微扩散,所以正确的做法是留出安全边距,并用羽化把过渡做柔和,而不是用硬边去卡死。
为何常见:工具名字里带「笔刷」,容易让人把它等同于 Photoshop 选区工具,以为选区就是精确结果。
误区画运动方向时,我总想把笔画拖得很长,觉得箭头越长,物体就动得越快、越明显。
正解笔画方向和位移路径不等于瞬时速度。速度主要由笔刷强度、幅度参数和时间曲线控制。拉长笔画可能只改变运动轨迹或终点,并不能直接让速度翻倍。
为何常见:现实中推东西用的力气越大,东西动得越快,所以下意识把笔画长度当成力量大小。
误区想让画面更活泼,就把运动幅度调得很大,反正 AI 会自动补全中间过程。
正解Motion Brush 适合局部微动。幅度过大时,模型没有足够的背景参考来补全被遮挡的像素,容易产生拉伸、扭曲、鬼影或画面撕裂。宁可小幅多次,也不要一次拉满。
为何常见:宣传片里的大动态很震撼,初学者容易忽略局部运动的物理约束和模型能力边界。
误区羽化这种参数,导出视频后根本看不出来,随便设一下就行。
正解硬边遮罩会让选区边界像素在相邻帧间时动时不动,产生闪烁和锯齿。羽化后过渡带里的运动权重平滑下降,人眼就不容易察觉分界线。静态截图看不出问题,但一播放就非常明显。
为何常见:闪烁是时间维度上的问题,只看单帧截图的人很难发现。
误区我觉得一次画完所有笔画,然后直接生成高清视频,不满意再重画,这样最节省时间。
正解AI 生成有随机性,直接出高清视频后发现问题,重画成本很高。正确流程是先低分辨率、短时长快速预览,对每一笔局部修正,确认运动自然后再做高清导出。
为何常见:很多人沿用传统滤镜的工作习惯,忽略了 AI 生成结果需要多次抽卡和迭代。
面试题
Q1. Motion Brush 的核心作用是?
- A.生成整段视频的背景音乐
- B.让局部区域按笔画运动← 正确答案
- C.自动替换视频中的人物
- D.提高视频文件清晰度
答案:B。Motion Brush 的核心是在图生视频中指定局部区域,并让该区域按笔画方向运动。它不会生成音乐、替换人物或提升画质,所以只有 B 符合。
Q2. 没有笔刷覆盖的区域,生成时通常会?
- A.同样被带动起来
- B.保持相对静止← 正确答案
- C.自动变模糊
- D.被裁剪掉
答案:B。没有笔刷覆盖的地方,遮罩值为 0,相当于没有得到运动许可证,模型通常会保持相对静止。这也是 Motion Brush 能做到局部控制的基础。
Q3. 羽化选区的主要作用是什么?
- A.让边缘更生硬醒目
- B.让运动过渡更柔和← 正确答案
- C.让视频整体更清晰
- D.加快渲染速度
答案:B。羽化让遮罩从 1 平滑降到 0,避免边缘像素在帧间突然启动和停止,从而减少闪烁和锯齿。它不能提升清晰度或渲染速度。
Q4. 只想让画面中的河水向右流,最合理的首笔操作是?
- A.用最大笔刷涂满全屏
- B.沿河水区域向右画一笔← 正确答案
- C.在河岸左侧点一下
- D.在天空画一个圆圈
答案:B。Motion Brush 的方向由笔画路径决定,所以应该沿河水区域从左向右画一笔。涂满全屏会让背景也动,点按和圆圈都不能表达明确的方向。
Q5. 哪些因素会影响局部运动的幅度?
- A.笔刷强度或浓度← 正确答案
- B.运动时间曲线← 正确答案
- C.图片的文件格式
- D.视频输出分辨率
答案:AB。幅度主要由笔刷强度决定,时间曲线决定运动如何加速和减速。文件格式和输出分辨率影响的是编码与清晰度,与运动幅度没有直接关系。
Q6. 同一画面多个区域要往不同方向运动,正确做法是?
- A.所有区域共用一次笔画
- B.分区域多次画方向← 正确答案
- C.先压缩图片再操作
- D.手动逐帧修补视频
答案:B。Motion Brush 支持多笔叠加,可以为不同区域分别画方向,模型会把多笔方向融成一个连续方向场。共用一笔无法表达不同方向,手动逐帧也不符合工具定位。
Q7. 以下哪些属于 Motion Brush 使用中的常见坑?
- A.硬边缘引发闪烁← 正确答案
- B.幅度过大画面撕裂← 正确答案
- C.不看预览直接导出← 正确答案
- D.调低视频输出分辨率
答案:ABC。硬边缘会导致遮罩突变更闪,幅度过大会拉伸像素,不预览直接导出会浪费大量重画时间。调低分辨率只是在压缩性能上取舍,不属于 Motion Brush 特有的坑。
Q8. Motion Brush 通常在哪个环节使用?
- A.图生视频的局部运动控制← 正确答案
- B.文本生成字幕配音
- C.图像批量无损压缩
- D.视频色彩科学校正
答案:A。Motion Brush 依赖静态图像作为底图,通过笔刷控制局部运动,所以属于图生视频阶段的运动控制,而不是字幕、压缩或校色功能。
Q9. 判断局部运动是否自然,最好依赖什么?
- A.只看第一帧效果
- B.连续预览多帧循环← 正确答案
- C.放大静态边缘截图
- D.直接看输出文件大小
答案:B。运动是否自然体现在时间维度上,单帧看不出发丝是否闪烁、幅度是否撕裂。连续预览多帧循环播放,才能发现边缘抖动、速度节奏等问题。
Q10. 提高局部运动自然度的技巧有哪些?
- A.给选区加羽化过渡← 正确答案
- B.小幅度多次迭代← 正确答案
- C.让运动区域全图硬切
- D.用时间曲线控制节奏← 正确答案
答案:ABD。羽化让边缘柔和,小幅度迭代能避免单次参数过大带来的撕裂,时间曲线则让运动更接近真实物理节奏。全图硬切会把所有区域一起带动,恰恰破坏了局部运动的自然度。