翻译了 AE 动效插件 Bodymovin 的项目介绍,将 AE 做的动画导出为 svg/canvas/html + js。

2017-03-22 17:50:25 +08:00
 bigxixi

这是 bodymovin 插件说明的中文版,由BigXiXi翻译, 原文地址: https://github.com/bodymovin/bodymovin
注意!项目中除了 readme 保持更新,其他文件最新版请移步原版获取。
文中 After Effects 术语参考自官方中文版 AE 。

bodymovin

After Effects 插件,用于将动画导出为 svg/canvas/html + js 。

V 4.6.1

V 4.6.0

V 4.5.9

V 4.5.8

V 4.5.7

V 4.5.6

V 4.5.5

V 4.5.4

V 4.5.3

V 4.5.2

V 4.5.1

V 4.5.0


直接从 adobe 在线商店获取! https://creative.adobe.com/addons/products/12557
支持 AE CC2014 及以上版本。

如果需要最最新的版本,可以从这里安装:

安装方式 1 (推荐):

安装方式 2 :

安装方式 3 :

按照官方手册的指导安装 zxp 插件,地址如下(英文):   https://helpx.adobe.com/x-productkb/global/installingextensionsandaddons.html
直接跳到 "Install third-party extensions"

安装完成后

如何使用

在 After Effects 中

设置:

分段: 分段导出你的动画。 如果你的动画有很多层,可以选择分段导出,这样就不会一次性全部加载。 导出工具将会根据图层开始时间进行分段。
快照: 保存一张 svg 格式的快照作为动画的封面。渲染完动画后, 你可以截取任意一帧快照并保存到硬盘上。 我建议优化这张 svg 快照,可以利用一些工具比如 https://jakearchibald.github.io/svgomg/ 并好好设置一番。

用于 HTML

查看 demo ,有不同的动画加载方式:

<script src="js/bodymovin.js" type="text/javascript"></script>

你可以调用 bodymovin.loadAnimation() 来开始动画。 可以用一个对象传递这些参数:


返回一个动画对象,你可以控制它播放、暂停、设置速度。。。。

bodymovin.loadAnimation({
  container: element, // 渲染动画的 dom 元素
  renderer: 'svg',
  loop: true,
  autoplay: true,
  animationData: JSON.parse(animationData) // 动画数据
});
bodymovin.loadAnimation({
  container: element, // 渲染动画的 dom 元素
  renderer: 'svg',
  loop: true,
  autoplay: true,
  animationData: animationData, // 动画数据
  rendererSettings: {
    context: canvasContext, // canvas 画布上下文
    scaleMode: 'noScale',
    clearCanvas: false
  }
});

如果你这么做了, 必须在每一帧渲染后清除画布。
另一个加载动画的办法是为 dom 元素加上特定的属性。 你需要包含一个 div 元素,并设置他的 class 为 bodymovin 。 如果你在页面加载前这么做了,它将自动检测页面上所有 class 标签值为"bodymovin"的元素。 或者你可以在页面加载完成后调用 bodymovin.searchAnimations(),同样会检测页面上所有 class 标签值为"bodymovin"的元素。

步骤:

必要属性
一个名为"bodymovin"的 class
一个 "data-animation-path" 属性,值为 data.json 的相对路径。
可选属性
一个 "data-anim-loop" 属性,控制循环。
一个 "data-name" 属性,用于指定一个名字作为播放控制的控制目标。

示例

 <div style="width:1067px;height:600px" class="bodymovin" data-animation-path="animation/" data-anim-loop="true" data-name="ninja"></div>

用法

动画实例可用的方法如下:
anim.play()
anim.stop()
anim.pause()
anim.setSpeed(speed) -- 播放速度 , 1 为正常速度。
anim.goToAndStop(value, isFrame) 跳转到某一时间(或帧)并停在那。第一个参数(value)是数值。第二个参数是布尔值,"true"则第一个参数表示“帧”,“ false ”则表示“时间”。
anim.goToAndPlay(value, isFrame) 跳转到某一时间(或帧)并播放。第一个参数(value)是数值。第二个参数是布尔值,"true"则第一个参数表示“帧”,“ false ”则表示“时间”。
anim.setDirection(direction) -- 播放方向,正数和 0 为正常播放,负数为倒放。
anim.playSegments(segments, forceFlag) -- 播放指定段落。第一个参数是一个数组,形式为[(a,b),(c,d),(e,f)...]则播放第 a 帧到 b 帧,然后第 c 帧到 d 帧, e 到 f …… ,第二个参数为布尔值,“ true ”则立刻播放参数一中的片段,“ false ”则播放完当前动画后再开始播放片段。
anim.destroy()

bodymovin 有 8 个方法:
bodymovin.play() -- 播放指定动画, 1 个参数动画名
bodymovin.stop() -- 停止播放指定动画, 1 个参数动画名
bodymovin.setSpeed() -- 第一个参数设置动画速度 (1 为正常速度),第二个参数动画名可选。
bodymovin.setDirection() -- f 播放方向,正数和 0 为正常播放,负数为倒放,第二个参数动画名可选。
bodymovin.searchAnimations() -- 检测 class 值为"bodymovin"的元素。
bodymovin.loadAnimation() -- 前面已有介绍, 返回一个可单独控制的动画实例。
bodymovin.destroy() --销毁和释放资源。 DOM 元素将会被清空。
bodymovin.registerAnimation() -- 你可以直接用 registerAnimation 来注册一个自定义元素,它必须包含"data-animation-path"属性并指向 data.json 的地址。
bodymovin.setQuality() -- 画质设置,调整动画播放器性能。默认为高画质(high), 可选值为'high'、'medium'、'low', 或者大于 1 的数字。对于有的动画这些设置差别不大。

事件

或者你可以对以下事件设置监听(addEventListener):

查看 demo 文件夹中的例子,或者访问 http://codepen.io/airnan/ 可以看到精彩的演示动画

一些建议

文件

如果你使用了图片资源或者未转成形状图层的 Adobe Illustrator 文件图层, 将会同时生成一个 images 文件夹存放这些图片资源。(我建议将 ai 图层转换为形状图层,这样他们会被导出为矢量数据,只需在 AE 中导入的 ai 图层上右键 > 从矢量图层创建形状) 注意,如果不同的带图片资源的动画导出到同一地址, images 文件夹将会被覆盖。

性能

Bodymovin 的动画都是实时渲染的。 虽然经过了大量优化,最好还是控制 AE 工程文件体积在一个必要的值。
更多的优化也正在进行中,但请避免这种情况:绘制了一个巨大的形状图层,但是只通过遮罩使用其中一小部分。
过多的节点同样会影响性能。

帮助

如果你有动画导出失败或者想让我帮你导出, 不要犹豫请告诉我。
我很乐意能找到这个插件的不足之处。
我的邮箱是 hernantorrisi@gmail.com

演示

访问 codepen 查看动画演示

支持的 AE 特性

其他说明

18516 次点击
所在节点    分享创造
6 条回复
fhefh
2017-03-22 23:07:25 +08:00
这个不错 666
designer
2017-03-23 00:46:09 +08:00
厉害
HiJony
2017-03-24 15:14:54 +08:00
感谢感谢,能不能顺便把 lottie 翻译下:D
bigxixi
2017-03-24 16:39:34 +08:00
@HiJony 翻译了安卓的: https://github.com/bigxixi/lottie-android
ios 和 rn 的翻页里头也提供了链接
bigxixi
2017-03-26 19:00:26 +08:00
这里好像不能更新已发布的主题?
我汉化了 bodymovin 插件,说明及下载见:
https://zhuanlan.zhihu.com/p/25935006
欢迎试用
raiz
2019-04-24 14:04:05 +08:00
@bigxixi 最近项目需要用到类似的技术,将 AE 动画实时渲染出来,但不是输出到一个 view,而是输出成视频图像,想了解 bodymovin json 文件的结构,发现这个项目 github 地址变了,好像没有文档定义 bodymovin 的文件解析规范,请问有这方面了解么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX