mainim

基础安装

略过…

简介

这里我是使用一位大神的代码进行学习,稍微很多代码会有类似的地方地址放在这里:

(https://github.com/zimmermant/manim_tutorial/blob/master/manim_tutorial_P37.py) github。

这位大神将动画聚集在一个文件下,但我的学习不会使用它的形式,毕竟视频我是觉得分开先弄弄,减少问题的出现,等熟悉了,在把所有代码放到一起。

若你想使用大神代码学习,形成视频的时候执行python -m manim file_name.py Class_name -pl

file_name.py是代码存放的文件名

Class_name是类函数名

使用方式:

首先,打开 Anaconda Prompt (Anaconda3)右键管理员运行,cd到 manim 根目录:

cd C:\Kuai8Games\manim\manim-master\manim-master

测试命令解析

python -m manim manim_example.py Class_name -pl

参数一 python 调用python编译器进行编译;

参数二 -m 处理模块,所有依赖都会在延缓队列中执行

参数三 manim 执行manim.py的文件,不用.py ,-m就可以执行他

参数四 manim_example.py 是用来编写图形动画的脚本文件,该参数是需要.py 后缀的;

参数五 Class_name 定义的一个类的类名;

参数六 -pl 更多参数下面命令可查看大全,这里为快速预览p(play播放) 低画质l(low)

参数查看

​ 参数的设置查看:

python -m manim --help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
python -m manim --help
##输出:
usage: manim.py [-h] [-p] [-w] [-s] [-l] [-m] [--high_quality] [-g] [-i] [-f]
[-t] [-q] [-a] [-o FILE_NAME] [-n START_AT_ANIMATION_NUMBER]
[-r RESOLUTION] [-c COLOR] [--sound] [--leave_progress_bars]
[--media_dir MEDIA_DIR]
[--video_dir VIDEO_DIR | --video_output_dir VIDEO_OUTPUT_DIR]
[--tex_dir TEX_DIR]
file [scene_names [scene_names ...]]

positional arguments:
file path to file holding the python code for the scene
scene_names Name of the Scene class you want to see

optional arguments:
-h, --help show this help message and exit
-p, --preview Automatically open the saved file once its done
-w, --write_to_movie Render the scene as a movie file
-s, --save_last_frame
Save the last frame
-l, --low_quality Render at a low quality (for faster rendering)
-m, --medium_quality Render at a medium quality
--high_quality Render at a high quality
-g, --save_pngs Save each frame as a png
-i, --save_as_gif Save the video as gif
-f, --show_file_in_finder
Show the output file in finder
-t, --transparent Render to a movie file with an alpha channel
-q, --quiet
-a, --write_all Write all the scenes from a file
-o FILE_NAME, --file_name FILE_NAME
Specify the name of the output file, ifit should be
different from the scene class name
-n START_AT_ANIMATION_NUMBER, --start_at_animation_number START_AT_ANIMATION_NUMBER
Start rendering not from the first animation, butfrom
another, specified by its index. If you passin two
comma separated values, e.g. "3,6", it will endthe
rendering at the second value
-r RESOLUTION, --resolution RESOLUTION
Resolution, passed as "height,width"
-c COLOR, --color COLOR
Background color
--sound Play a success/failure sound
--leave_progress_bars
Leave progress bars displayed in terminal
--media_dir MEDIA_DIR
directory to write media
--video_dir VIDEO_DIR
directory to write file tree for video
--video_output_dir VIDEO_OUTPUT_DIR
directory to write video
--tex_dir TEX_DIR directory to write tex


##翻译:
用途:manim.py [-h] [-p] [-w] [-s] [-l] [-m] [-高质量] [-g] [-i] [-f)
[-t] [-q] [-a] [-o 文件名] [-n 开始于动画编号]
[-r分辨率] [-c颜色] [-声音] [--留下进度条]
[--media dir MEDIA DIR]
[--video dir VIDEO DIR |--video output dir VIDEO OUTPUT DIR]
[--tex dir TEX DIR]
文件 [scene_names [场景名称...]]

位置参数。
file存放场景的python代码的文件路径
scene_names 您要查看的场景类的名称。

可选参数。
-h, --help 显示帮助信息并退出。
-p, --preview 保存的文件完成后自动打开。
-w, --write_to_movie 将场景渲染成电影文件。
-s,-save_last_frame,-save_last_frame。
保存最后一帧
-l, --low_quality 以较低的质量进行渲染(为了更快的渲染)。
-m, --medium_quality 以中等质量进行渲染。
--high_quality 高质量渲染。
-g, --save_pngs 将每一帧画面保存为png格式。
-i, -save_as_gif 将视频保存为gif格式。
-f, --show_file_in_finder。
在finder中显示输出文件
-t, --透明 渲染成带有alpha通道的电影文件。
-q, --安静
-a, --write_all 从文件中写入所有场景。
-o FILE_NAME, --file_name FILE_NAME。
指定输出文件的名称,如果应该是
与场景类名称不同
-n START_AT_ANIMATION_NUMBER, --start_at_animation_number START_AT_ANIMATION_NUMBER。
不是从第一段动画开始渲染,而是从第二段动画开始渲染。
另一个,由其索引指定。如果你传入两个
逗号分隔的值,例如 "3,6",它将结束于 "3"。
在第二个值上呈现
-r RESOLUTION, --resolution RESOLUTION(决议)
决议,以 "高度、宽度 "通过
-c COLOR, --color COLOR。
背景色
--播放成功/失败的声音。
--leave_progress_bars
让进度条在终端显示
--media_dir MEDIA_DIR
介质目录
--video_dir VIDEO_DIR
编写视频文件树的目录
--video_output_dir VIDEO_OUTPUT_DIR
写视频的目录
--tex_dir TEX_DIR目录下写入tex的内容。

代码思路结构与制作

代码实践一

文件命名为:first.py,保存到 manim-master 根目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#使用from 导入模块  
from manimlib.imports import * #最重要的文件,manim的最核心的库文件
import os #系统导入文件
import pyclbr #可用于确定有关模块中定义的类,方法和顶级函数的一些有限信息。

#类函数,主要是用于 封装、继承、多态
#封装:隐藏对象的属性和实现细节,只对外提供必要的方法。
#继承:(代码复用),减少重复代码。
#多态:同一个方法调用,由于对象不同可能会产生不同的行为。

class Chang(Scene): ##Scene->场景,使用继承的方法,继承作者写好的空场景代码。

##定义一个方法,输入本身为参数,python建议学一点点类。
def construct(self): #构建函数
circle = Circle() #定义一个圆
square = Square() #定义一个方
line=Line(np.array([1,2,3]),np.array([5,9,1]))#定义线
triangle=Polygon(np.array([0,0,0]),np.array([1,1,0]),np.array([1,-1,0]))
#定义一个三角

#实例化对象的方法
self.add(line) #添加线段到场景中
self.play(ShowCreation(square)) #绘图出圆 {这里很像PPT的制作}
self.play(FadeOut(square)) #淡出圆
self.play(GrowFromCenter(circle)) #中心扩张生成正方形
self.play(Transform(square,triangle)) #正方形到三角形

#注:我这里为了排版好看,缩进放为两个空格,若你要试试,那便将缩进改为4个空格,或按“Tab”。

使用Anaconda Prompt 将代码变为视频

打开 Anaconda Prompt (Anaconda3)右键管理员运行,cd到 manim 根目录:

cd C:\Kuai8Games\manim\manim-master\manim-master

然后python -m manim first.py Chang -pl

思路

代码编写有点像PPT的制作。

首先python少不了的库引用,几乎不会改变。

其次,使用类继承空场景的方法,创建一个场景。

然后,定义一个方法,“初始化素材”。先准备好要用的图像

接着,ppt就是准备好素材,组装,然后素材的出现,然后消失。

最后,通过命令将文件输出

代码的结构基本如此,大同小异。不过要更加精彩的话,我们慢慢学。

实践代码与讲解

代码实践二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class MoreShapes(Scene):
#解锁更多的形状 ————依旧先先使用继承,获取
def construct(self):
circle = Circle(color=PURPLE_A)
square = Square(fill_color=GOLD_B, fill_opacity=1, color=GOLD_A)
square.move_to(UP+LEFT)
circle.surround(square)
rectangle = Rectangle(height=2, width=3)
ellipse=Ellipse(width=3, height=1, color=RED)
ellipse.shift(2*DOWN+2*RIGHT)
pointer = CurvedArrow(2*RIGHT,5*RIGHT,color=MAROON_C)
arrow = Arrow(LEFT,UP)
arrow.next_to(circle,DOWN+LEFT)
rectangle.next_to(arrow,DOWN+LEFT)
ring=Annulus(inner_radius=.5, outer_radius=1, color=BLUE)
ring.next_to(ellipse, RIGHT)

self.add(pointer)
self.play(FadeIn(square))
self.play(Rotating(square),FadeIn(circle))
self.play(GrowArrow(arrow))
self.play(GrowFromCenter(rectangle), GrowFromCenter(ellipse), GrowFromCenter(ring))