Mayavi通过Moviepy输出动画

1,准备

首先得安装Mayavi,看我之前的帖子,链接

然后安装Moviepy,pip install moviepy. 关于Moviepy怎么用,可以见官网

2,思路

通过Mayavi绘制每一帧的图片,然后Moviepy获取到每一帧,生成视频文件。

3,示例

 1 import numpy as np
 2 import mayavi.mlab as mlab
 3 import  moviepy.editor as mpy
 4
 5 duration= 2 # duration of the animation in seconds (it will loop)
 6
 7 # 使用MAYAVI先创建一个图片
 8 fig_myv = mlab.figure(size=(220,220), bgcolor=(1,1,1))
 9 X, Y = np.linspace(-2,2,200), np.linspace(-2,2,200)
10 XX, YY = np.meshgrid(X,Y)
11 ZZ = lambda d: np.sinc(XX**2+YY**2)+np.sin(XX+d)
12
13 # 使用MoviePy把这个图片创建为一个动画,并保存
14 def make_frame(t):
15     mlab.clf() # clear the figure (to reset the colors)
16     mlab.mesh(YY,XX,ZZ(2*np.pi*t/duration), figure=fig_myv)
17     #下面两句很重要
18     f = mlab.gcf()
19     f.scene._lift()
20     return mlab.screenshot() #antialiased=True
21
22 animation = mpy.VideoClip(make_frame, duration=duration)
23 animation.write_gif("sinc.gif", fps=20)

值得注意的是,很多地方提供了类似于上面的代码,但是运行时会报错:“ValueError: cannot reshape array of size 12 into shape (0,0,3)”

解决办法是在 返回screenshot()前添加两行代码

1 f = mlab.gcf()
2 f.scene._lift()

运行结果如下

4,示例二

将我之前博客中的例子转换成动画

 1 import mayavi.mlab as mlab
 2 import numpy as np
 3 from moviepy.editor import VideoClip
 4
 5 fig=mlab.figure(size=(200,200),bgcolor=(1.0,1.0,1.0))
 6 duration = 5
 7 #生成20个点坐标
 8 t = np.linspace(0, 4 * np.pi, 20)
 9 x = np.sin(2 * t)
10 y = np.cos(t)
11 z = np.cos(2 * t)
12 s = 2 + np.sin(t)
13
14 def make_frame(t):
15     mlab.clf()
16     # # s数组只移动一位,点的颜色也就会变换
17     b = s[19]
18     s[1:20]=s[0:19]
19     s[0] = b
20     f = mlab.gcf()
21     f.scene._lift()
22     mlab.points3d(x, y, z, s, mode="cube",scale_mode="none", colormap="spectral", scale_factor=.5)
23     mlab.view(azimuth= 180*t/duration, distance=9) # camera angle
24     return mlab.screenshot(antialiased=True)
25
26 # duration是gif时长
27 animation = VideoClip(make_frame, duration=duration)
28 # fps帧率
29 animation.write_gif(‘rot.gif‘, fps=3)

本来小球的颜色是由s变量控制的,每一帧将s数组中的数平移一位,这样颜色点的颜色就能变化了。每一秒3帧,mlab.view控制相机变换。

运行结果如下

PS: Matplotlib输出动画

与Mayavi输出动画思路是一模一样的,区别在于返回每一帧图像的函数不同。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 from moviepy.editor import VideoClip
 4 from moviepy.video.io.bindings import mplfig_to_npimage
 5
 6 x = np.linspace(-2, 2, 200)
 7
 8 duration = 2
 9
10 fig,ax = plt.subplots()
11 def make_frame(t):
12     ax.clear()
13     ax.plot(x, np.sin(x**2) + np.sin(x + 2*np.pi/duration * t), lw=3)
14     ax.set_ylim(-1.5, 2.5)
15     return mplfig_to_npimage(fig)
16
17 animation = VideoClip(make_frame, duration=duration)
18 animation.write_gif("matplotlib.gif", fps=4)

运行结果:

原文地址:https://www.cnblogs.com/dalanjing/p/12293627.html

时间: 2024-10-19 04:20:18

Mayavi通过Moviepy输出动画的相关文章

Android6.0 WMS(六) WMS动画管理

Android的应用启动时,或者切换Activity时都会以动画的方式显示前后两屏的切换过程.动画的原理很简单,把一帧一帧的图像按一定时间间隔显示出来就完成了. 动画的绘制需要定时驱动,通常的做法是启动一个定时消息,每隔一定时间发一个消息,收到消息后输出一帧画面.Android支持VSync信号后,动画的驱动就有VSync信号承担了. 窗口动画的基本元素是窗口Surface中保存的图像,通过对窗口的Surface设置不同的变换矩阵和透明度,然后强制Surface刷新,就能在屏幕上显示出窗口的变化

关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪些事情,为了解决这个问题,unity允许每个动画单元来绑定一个脚本代码,这个脚本代码必须继承于StateMachineBehaviour;2: 可以在动画状态的Add Behaviour上添加挂载一个脚本到动画状态;3: StateMachineBehaviour主要接口: (1)OnStateEn

虚幻4 动画系统概述

虚幻引擎提供了一套完整的动画设计系统,从基本的动画导入,到最后的人物动画控制,流程完善成熟,上手简单.下面先从宏观上介绍下UE4的动画系统,然后深入介绍几个功能模块. 一.整体介绍 下面这张图翻译自官方文档,它从整体上介绍了动画功能的来龙去脉,简单明了. 处于核心的是Pawn和Character蓝图,它相当于游戏玩家,包含可视化的人物骨骼.形象,它接收用户的输入,并让角色执行某种行为(如奔跑.跳跃).值得注意的是,角色的动画和行为是分离的,即使没有指定角色的奔跑动画,角色也是可以"奔跑"

Lottie 动画里有图片怎么办?设计师小姐姐也能帮你减少开发量!

一.序 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整解决方案,设计师只需要使用 After Effectes (之后简称 AE)设计出动画之后,使用 Lottic 提供的 Bodymovin 插件将设计好的动画导出成 JSON 格式,就可以直接运用在 iOS.Android 和 React Native之上,无需关心中间的实现细节. 这样,对于不同的工作角色来说,Lottie 带来的都是更简洁的工作流.开发小哥哥不再担心动画实现困难,设计师小姐姐也不需要担

(转载)虚幻引擎3--基础知识

这是虚幻引擎3UDN的技术文档,共有六个章节.以下将分别把中文译本贴出来,方便懒人学习[偷笑]  一.虚幻引擎 3 基础知识 概述 -------------------------------------------------------------------- 有几个游戏性元素实际上是所有使用虚幻引擎3或虚幻开发工具包创建的项目所共有的.自定义这些元素可以创建出完全独特的.外观和行为符合期望的游戏.没有任何两个项目是相同的,尽管虚幻引擎提供了这些元素的默认实现,但是肯定需要对它们进行很大

大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app

大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWxy/twa-tf.js , ) 什么是TWA 简单来讲,TWA(Trusted Web Activity 可信任的网络应用)即: 基于Chrome Custom Tabs,利用谷歌浏览器提供的api,实现强大功能的桌面应用技术. 如果说你对PWA这个概念有所了解,那么TWA的实现就相当于 PWA + 更丰

解决成本的错误和问题

问题描述 错误 数据收集 根本原因 版本   组件:数据修复           在一个实际成本组织中,(平均,先进先出,后进先出) 一个或更 多的以下情况可能发生: 1.导航到物料成本历史表单上的数量信息,与现有量表单的数量不匹配的记录 2. 一些物料前期已计成本的数量与前面的事务处理历史表单的数量不匹配 3. 所有的库存值报表与事务处理值报表不匹配 4. 存货层次成本更新表单的总数量与现有量数量表单不匹配(仅仅在先进先出/后进先出) 5.这些症状的任何一个意味着 MMT-CQL不匹配或MMT

U3D学习心得-----资源管理:模型和角色动画的输出设置(上)

模型主要可以以两种方式进行输出: (1)使用插件进行输出.并输出为指定的文件格式,如FBX或OBJ (2)直接输出为响应的3D应用文件,如.max或者Blen,Unity自身再进行转换. 使用3D软件包自身格式进行输出的优缺点: 优点:(1)快速的输出工程,直接从3D文件到Unity (2)简单的初始化过程 缺点:(1)文件中可能会包括不需要的数据. (2)若输出文件过大,可能会妨碍Unity的更新工程.比较少的数据检验过程,可能会增加出错的几率. 而使用插件进行输出的优缺点: 优点:(1)仅仅

Cocos2d-x 3.x plist+png 做动画

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 前言: 这次的东西,其实是在做完2048后,我有个Flash想用. 就像,天天系列,开头会有 "提米" 的叫声+动画, 是不是感觉很带感. 之前,做第一个游戏的时候,有做一套78帧的Flash, 但是当时不会用,现在正好拿过来用了,嘿嘿~ 正文: 这次例子