manimce社区版安装与基本的使用方法,manim版本介绍,manim、FFmpeg、texlive怎么安装

manimce社区版安装与基本的使用方法,manim版本介绍,manim、FFmpeg、texlive怎么安装

Manim教程admin2022-08-18 10:28:2366A+A-

manim社区版manimce笔记(一)安装与基本的使用方法

自从3blue1brown的视频在油管和B站上被越来越多的人知晓后,grant本人也开源了他用来制作视频的python第三方库——manim,随之一批精准科学动画制作爱好者开始了对manim的研究和改进,在这两年中,manim 的 Github 项目发生了很大的变化,并衍生出了三个主要版本,分别是 manimCairomanimGLmanimCE

1、manim版本介绍

  • manimCairo:manim 的早期版本,该版本自 2020 年 11 月起已经停止了更新维护。
  • manimGL:该版本由 3B1B 作者 Grant Sanderson 主要负责维护。该版本由早期版本更新迭代而来,之所以这样命名,是因为该版本支持 OpenGL 的渲染。按照墨西哥知名 manim 教学 up 主 Theorem of Beethoven 的说法,该版本已近趋于稳定,但还尚未完成[1]
  • manimCE:为本篇主要介绍的版本,该版本是由 2020 年中旬的一个 manim 分支演化而来,该分支后来社区化,被称为是 manim Community Edition ,缩写为 manimCE。现在该版本被一群开发者共同更新维护,原作者 Grant Sanderson 也在其中。这是 manim 当前的一个最为稳定的版本,相对于早期版本,其在语法结构上做了大量优化,并简化了安装步骤。由于参与者更多,所以其更新维护最为频繁,一些常见的 BUG 能在较短的时间内被解决,所以更加适合新手上手(注意:以往的教程并不适用于该版本) 。

怎么判断你的代码哪个版本的:

from manim import *       # manimCE 版

from manimlib import *    # manimCairo 版

from manimgl import *     # manimGL 版

2、manim社区版地址:

ManimCommunity

3、manimCE 结构 site-packages\manim

│   communitycolors.py    # manim社区的彩色地图
│   constants.py          # 常量定义文件
│   __init__.py
│   __main__.py
│
├───animation
│   │   animation.py     # 动画的基类
│   │   changing.py      # 移动对象边界动画和点跟踪
│   │   composition.py   # 用于同时显示多个动画的工具
│   │   creation.py      # 为场景中移动对象的显示或移除设置动画
│   │   fading.py        # 淡入淡出视线
│   │   growing.py       # 通过从点开始增长将移动对象引入场景的动画
│   │   indication.py    # 一些用于强调的动画
│   │   movement.py      # 和移动有关的动画
│   │   numbers.py       # 实现对 DecimalNumber 数字的变化
│   │   rotation.py      # 和旋转有关的动画
│   │   specialized.py   # 一些针对特殊项目的不常用动画
│   │   transform.py     # 一些 Transform 变换
│   │   transform_matching_parts.py # 自动匹配部分的 Transform
│   │   __init__.py
│   │
│   └───updaters # 与更新功能相关的动画和实用程序对象
│           mobject_update_utils.py   # 用于移动对象连续动画的实用函数
│           update.py      # 更新移动对象的动画
│           __init__.py
│
├───camera # 相机
│       camera.py          # 摄像机将场景中包含的移动对象转换为像素阵列
│       mapping_camera.py  # 允许对象之间映射的相机
│       moving_camera.py   # 能够在场景中移动的摄像机
│       multi_camera.py    # 支持多视角的相机
│       three_d_camera.py  # 可以在三维空间中定位和定向的摄像机
│       __init__.py
│
├───cli
│   │   __init__.py
│   │
│   │   default_group.py  # DefaultGroup允许子命令充当主命令
│   │ 
│   ├───cfg
│   │       group.py      # Manim的cfg子命令
│   │       __init__.py
│   │
│   ├───init
│   │       commands.py   # Manim的init子命令
│   │       __init__.py
│   │
│   ├───new
│   │       group.py
│   │       __init__.py
│   │
│   ├───plugins
│   │       commands.py   # Manim的插件子命令
│   │       __init__.py
│   │
│   └───render
│           commands.py
│           ease_of_access_options.py
│           global_options.py
│           output_options.py
│           render_options.py
│           __init__.py
│
├───grpc
│   │   __init__.py
│   │
│   ├───gen
│   │       frameserver_pb2.py
│   │       frameserver_pb2_grpc.py
│   │       renderserver_pb2.py
│   │       renderserver_pb2_grpc.py
│   │       __init__.py
│   │
│   ├───impl
│   │       frame_server_impl.py
│   │       __init__.py
│   │
│   └───proto
│           frameserver.proto
│           renderserver.proto
│
├───gui
│       gui.py
│       __init__.py
│
├───mobject
│   │   frame.py                # 和 frame 有关的 mobject
│   │   graph.py                # 用于表示数学图的对象(图论,而不是绘图)
│   │   logo.py                 # Manim logo
│   │   matrix.py               # 矩阵
│   │   mobject.py              # 所有mobject的父类
│   │   table.py                # 表的mobject
│   │   value_tracker.py        # ValueTracker(存储数的 mobject)
│   │   vector_field.py         # 向量场
│   │   __init__.py
│   │
│   ├───geometry             # 几何图形的 mobject
│   │       arc.py              # 弯曲的对象
│   │       boolean_ops.py      # 二维mobject的布尔运算
│   │       line.py             # 线条或其变体的移动对象
│   │       polygram.py         # 是简单几何形状的对象
│   │       shape_matchers.py   # 用于标记和注释其他移动对象的移动对象
│   │       tips.py             # 提示对象
│   │       __init__.py
│   │
│   ├───graphing
│   │       coordinate_systems.py   # 表示坐标系的移动对象
│   │       functions.py            # 表示函数图的mobject
│   │       number_line.py          # 数轴
│   │       probability.py          # 和概率有关的 mobject
│   │       scale.py
│   │       __init__.py
│   │
│   ├───opengl
│   │       dot_cloud.py            # Dot cloud (PMobject 的一个子类)
│   │       opengl_compatibility.py
│   │       opengl_geometry.py
│   │       opengl_mobject.py
│   │       opengl_point_cloud_mobject.py
│   │       opengl_surface.py
│   │       opengl_three_dimensions.py
│   │       opengl_vectorized_mobject.py
│   │       __init__.py
│   │
│   ├───svg
│   │       brace.py
│   │       style_utils.py
│   │       svg_mobject.py
│   │       svg_path.py
│   │       __init__.py
│   │
│   ├───text
│   │       code_mobject.py         # 代码的 mobject
│   │       numbers.py              # 数字的 mobject
│   │       text_mobject.py         # 文本的 mobject
│   │       tex_mobject.py          # LaTeX的 mobject
│   │       __init__.py
│   │
│   ├───three_d
│   │       polyhedra.py            # 一般多面体类与柏拉图体
│   │       three_dimensions.py     # 三维物体
│   │       three_d_utils.py        # 三维物体的一般多面体类和柏拉图固结函数
│   │       __init__.py
│   │
│   └───types
│           image_mobject.py
│           point_cloud_mobject.py  # PMobject (点集构成的 mobject)
│           vectorized_mobject.py
│           __init__.py
│
├───opengl
│       __init__.py
│
├───plugins
│       import_plugins.py
│       plugins_flags.py
│       __init__.py
│
├───renderer
│   │   cairo_renderer.py
│   │   opengl_renderer.py
│   │   opengl_renderer_window.py
│   │   shader.py
│   │   shader_wrapper.py
│   │   vectorized_mobject_rendering.py
│   │   webgl_renderer.py
│   │   __init__.py
│   │
│   └───shaders # 渲染中使用的GLSL脚本
│       │   design.frag
│       │   design_2.frag
│       │   design_3.frag
│       │   simple_vert.glsl    # 一个简单的对位置的 glsl 脚本
│       │
│       ├───default
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───image  # 针对图像的 glsl
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───include
│       │       add_light.glsl
│       │       camera_uniform_declarations.glsl
│       │       finalize_color.glsl
│       │       get_gl_Position.glsl
│       │       get_rotated_surface_unit_normal_vector.glsl
│       │       get_unit_normal.glsl
│       │       NOTE.md
│       │       position_point_into_frame.glsl
│       │       quadratic_bezier_distance.glsl
│       │       quadratic_bezier_geometry_functions.glsl
│       │
│       ├───manim_coords
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───quadratic_bezier_fill # 针对二阶贝塞尔填充的 glsl
│       │       frag.glsl
│       │       geom.glsl
│       │       vert.glsl
│       │
│       ├───quadratic_bezier_stroke # 针对二阶贝塞尔线条的g lsl
│       │       frag.glsl
│       │       geom.glsl
│       │       vert.glsl
│       │
│       ├───surface # 针对三维面的 glsl
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───test
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───textured_surface# 针对纹理面的 glsl
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───true_dot # 对于一个点的 glsl
│       │       frag.glsl
│       │       geom.glsl
│       │       vert.glsl
│       │
│       ├───vectorized_mobject_fill
│       │       frag.glsl
│       │       vert.glsl
│       │
│       ├───vectorized_mobject_stroke
│       │       frag.glsl
│       │       vert.glsl
│       │
│       └───vertex_colors
│               frag.glsl
│               vert.glsl
│
├───scene # 场景
│       moving_camera_scene.py
│       scene.py                 # 最普通的场景
│       scene_file_writer.py     # 用于将 scene 写入视频文件
│       section.py               # 分段视频API的构建块
│       three_d_scene.py         # 三维场景
│       vector_space_scene.py    # 向量场场景
│       zoomed_scene.py          # 支持在指定区域放大的场景
│       __init__.py
│
├───templates
│       Axes.mtp
│       Default.mtp
│       MovingCamera.mtp
│       template.cfg
│
└───utils    # 一些实用的工具函数
    │   bezier.py             # 贝塞尔曲线
    │   caching.py
    │   color.py              # 颜色
    │   commands.py
    │   config_ops.py         # 处理 CONFIG
    │   debug.py              # 在程序中 debug 的函数
    │   deprecation.py        # 用于弃用类、函数和函数参数的修饰符
    │   exceptions.py
    │   family.py
    │   family_ops.py         # 处理 family 成员
    │   file_ops.py           # 处理文件目录
    │   hashing.py
    │   images.py             # 读取图片
    │   ipython_magic.py
    │   iterables.py
    │   module_ops.py
    │   opengl.py
    │   paths.py              # 路径
    │   rate_functions.py     # 一些定义的 rate_function
    │   simple_functions.py   # 一些常用函数
    │   sounds.py             # 处理声音
    │   space_ops.py          # 空间坐标计算
    │   tex.py
    │   tex_file_writing.py   # 将字符串利用 LaTeX 写成 svg
    │   tex_templates.py
    │   unit.py
    │   __init__.py
    │
    ├───docbuild
    │       manim_directive.py
    │
    └───testing
            config_graphical_tests_monoframe.cfg
            config_graphical_tests_multiframes.cfg
            frames_comparison.py
            _frames_testers.py
            _show_diff.py
            _test_class_makers.py
            __init__.py

4、manimce的安装

与原版的manim相比,社区版的manimce好安装很多,只需要一行命令:

pip install manim

manim内部的视频渲染还是视频渲染界的通用工具ffmpeg,这也是作为博主的我超喜欢的一个命令行工具,下载地址:

FFmpeg

下载完后请将bin文件夹路径(也就是ffmpeg.exe可执行文件所在的文件夹路径)加入环境变量中,然后如果打开你美丽的命令行,输入“ffmpeg -version”,看看是不是正常输出了版本信息:

只要没出现红色的无法识别信息,就说明你的ffmpeg安装完了。
我们看到很多Manim的视频中有排版好看的数学公式,为了渲染数学工具,我们需要下载21世纪大学生都要会玩的小工具——latex通用排版语言,你可以安装小巧的Miktex,但是了为了后续的TexText排版中的各种问题,此处强烈推荐安装完整版的texlive

TeX Live 2022,下载地址

texlive

TeX Live 2022 安装指南【安装 LaTeX,建议安装到非系统盘

TeX Live 2022 安装指南【安装 LaTeX】

5、一个简单的实例

打开你喜欢的代码编辑器,创建一个start.py文件,内容如下:

from manim import *


class SquareToCircle(Scene):    # 渲染的基本对象都是Scene类的子类
    def construct(self):   # construct中则会定义渲染出来的视频有什么基本对象,这些对象的动作行为又是什么
        circle = Circle()  # 创建一个圆形
        circle.set_fill(BLUE, opacity=0.5)  # 填充为蓝色,透明度0.5
        circle.set_stroke(BLUE_E, width=4)  # 设置轮廓线条颜色BLUE_E,宽度为4

        square = Square()  # 创建一个方形
        square.set_stroke(WHITE, width=4)   # 设置轮廓线条颜色WHITE,宽度为4
        self.play(Create(square))  # 执行创建方形的动画
        self.wait()  # 默认等待1秒
        self.play(ReplacementTransform(square, circle))  # 将方形转换为圆形
        self.wait(2)  # 等待2秒


if __name__ == '__main__':
    from os import system

    # p代表执行完播放,ql画面质量低,qh画面质量中等,qk画面质量高清
    manim_cli = "manim -pql {} SquareToCircle".format(__file__)
    system(manim_cli)

右键选择运行,代码执行完后就能看到播放的动画效果

相信这篇文章能够给你带来一些有关manim的感性认识,如果你对计算机底层技术不感兴趣,没事,你就当我之前讲了一般废话。

接下来,我会出一套关于manim较为系统的文章,也会穿插写写关于源代码的内容,另外也会使用Manim自动生成一套Manim的视频教程,感兴趣的同学可以看下我知乎专栏里面:Manin视频介绍,视频里面的画面、语音、字幕都是自动生成的,画面、语音、字幕也实现了自动对齐播放,希望文章和视频教程能帮助到你,记得收藏本站,谢谢支持!

参考

  1. ^manim 的版本比较 https://www.youtube.com/watch?v=Upztg_Bs-zs

点击这里复制本文地址 以上内容来源于互联网,由爱搜问收集整理,如有侵权请联系站长,核实后立即删除,转载分享时注明本文地址!

支持Ctrl+Enter提交
qrcode

爱搜问 ©2021-2022 吉ICP备2022002266号 Aisouwen.COM.
站点地图1 站点地图2 站点地图3