【manim】之目录动画

manim,目录,动画 · 浏览次数 : 64

小编点评

**代码封装类:CatalogDisplayer** ```python class CatalogDisplayer: def __init__(self, sc: Scene, titles: list): self.sc = sc self.titles = titles def _title(self): title = Text("目录", font_size=20, weight=BOLD).shift(UP * 3.5) line = Line(LEFT * 3, RIGHT * 3, color=WHITE, stroke_width=3).next_to(title, DOWN * 0.5) self.sc.add(title, line) def _get_paragraph(self, index: int): catalog = Paragraph( *self.titles, line_spacing=1, alignment="left", font_size=30, font="STLiti", weight=BOLD, ) catalog[index].set_color_by_gradient(RED, BLUE, GREEN) for i in range(len(self.titles)): if i != index: catalog[i].set_color(GREY) return catalog def _start(self): catalog = self._get_paragraph(0) self.sc.add(catalog) self.sc.play(Indicate(catalog[0], scale_factor=1.5, color=GREEN)) def display(self, index: int) -> bool: if index >= len(self.titles): return False self.sc.clear() self._title() if index == 0: self._start() return True pre_catalog = self._get_paragraph(index - 1) self.sc.add(pre_catalog) catalog = self._get_paragraph(index) self.sc.play(ReplacementTransform(pre_catalog, catalog)) self.sc.play(Indicate(catalog[index], scale_factor=1.5, color=GREEN)) return True ``` **示例代码:** ```python # -*- coding: utf-8 -*- from manim import *TITLES = [ "· manim是什么", "· 多平台支持", "· 基于python", "· 重要依赖", ] class Example(Scene): def construct(self): catalog = CatalogDisplayer(self, TITLES) for i in range(len(TITLES)): catalog.display(i) self.wait() self.clear() ```

正文

概要

最近,结合视频剪辑工具剪映制作短视频时,
如果不是数学相关的内容,使用视频剪辑工具配置字幕,添加图片等等比 manim更加方便。

所以,用 manim封装一个目录的动画,用来配合剪辑工具中的其他资源。

代码封装

基于manim封装一个目录显示的 class
主要属性就是 titles,也就是目录中的各个标题。

class CatalogDisplayer:
    def __init__(self, sc: Scene, titles: list):
        self.sc = sc
        self.titles = titles

    def _title(self):
        title = Text("目录", font_size=20, weight=BOLD).shift(UP * 3.5)
        line = Line(LEFT * 3, RIGHT * 3, color=WHITE, stroke_width=3).next_to(
            title, DOWN * 0.5
        )
        self.sc.add(title, line)

    def _get_paragraph(self, index: int):
        catalog = Paragraph(
            *self.titles,
            line_spacing=1,
            alignment="left",
            font_size=30,
            font="STLiti",
            weight=BOLD,
        )

        catalog[index].set_color_by_gradient(RED, BLUE, GREEN)
        for i in range(len(self.titles)):
            if i != index:
                catalog[i].set_color(GREY)

        return catalog

    def _start(self):
        catalog = self._get_paragraph(0)
        self.sc.add(catalog)
        self.sc.play(Indicate(catalog[0], scale_factor=1.5, color=GREEN))

    def display(self, index: int) -> bool:
        if index >= len(self.titles):
            return False

        self.sc.clear()
        self._title()

        if index == 0:
            self._start()
            return True

        pre_catalog = self._get_paragraph(index - 1)
        self.sc.add(pre_catalog)

        catalog = self._get_paragraph(index)
        self.sc.play(ReplacementTransform(pre_catalog, catalog))
        self.sc.play(Indicate(catalog[index], scale_factor=1.5, color=GREEN))

        return True

调用的示例如下:

# -*- coding: utf-8 -*-
from manim import *

TITLES = [
    "· manim是什么",
    "· 多平台支持",
    "· 基于python",
    "· 重要依赖",
]


class Example(Scene):
    def construct(self):

        catalog = CatalogDisplayer(self, TITLES)
        for i in range(len(TITLES)):
            catalog.display(i)
            self.wait()
            self.clear()

如果不是第一个标题,会有一个简单的过渡效果。

测试效果

manim -p ./sample.py

out.gif

与【manim】之目录动画相似的内容:

【manim】之目录动画

概要 最近,结合视频剪辑工具剪映制作短视频时, 如果不是数学相关的内容,使用视频剪辑工具配置字幕,添加图片等等比 manim更加方便。 所以,用 manim封装一个目录的动画,用来配合剪辑工具中的其他资源。 代码封装 基于manim封装一个目录显示的 class。 主要属性就是 titles,也就是

【manim】之滚动字幕

概要 manim 是一个做数学视频的 python 库,这个库功能非常强大。具体可以参考官方介绍:https://github.com/ManimCommunity/manim/ 它本身只是封装数学相关的几何体和一些基础动画,所以,制作视频时,需要进一步封装更复杂的动画来满足视频的要求。最近做的一个

【manim】之圆规动画

概要 前端时间做尺规作图相关的动画的时候,封装了一个圆规的动画,顺便研究了下 manim 库的动画函数。 manim 本身就是做动画的库,所以,基于它封装自定义的动画非常方便。 动画原理 对于单个的元素,manim本身就提供了非常多的动画函数。 比如:创建/消除的动画,移动元素的动画,旋转元素的动画

manim边学边做--MathTex

上一篇介绍的SingleStringMathTex主要用来显示只有一行的数学公式,对于复杂的数学公式,可以使用MathTex类。 MathTex类继承自SingleStringMathTex,在其基础之上增加了更多的功能。其实,MathTex是制作数学动画时常用的类,反而SingleStringMa

【manim动画教程】-- 安装

manim是基于python语言开发的开源框架,是由 3blue1brown 开发的。 本来是他们自己用来制作数学视频用的,因为其友好的API和漂亮的UI效果,在开源之后,立刻流行起来。 原先开源的地址是: 后来托管给了社区,现在安装最新的版本请从这里下载: 改版之后,命令行更加清晰,简单。 支持的

【manim动画教程】-- 基本图形

制作数学视频时,各类几何图形是使用最频繁的。 一般来说,常用的几何图形包括:点,线,圆以及多边形。 1. 点 点是最简单图形,也是其他所有图形的基础。 绘制其他任何图形时,都是用点来定位的。 manim中生成一个点很方便,只要给定一个坐标即可。 这里的坐标包含 [x, y, z]3个维度,如果绘制二

【manim动画教程】-- 图形样式

manim绘制图形时,除了上一节提到的那些必须的参数,还有一些可选的参数, 这些参数可以控制图形显示的样式。 绘制各类基本图形(点,线,圆,多边形等)时,每个图形都有自己的默认的样式,比如上一节的图形, 有的默认是白色,有的默认是红色。 控制图形样式的参数最常用的有以下四个: stroke_widt

【manim动画教程】-- 文字和公式

manim中提供了两种方式来表示文字信息,一种是 Text系列,一种是 Tex系列。 从目前我自己的使用的体验来看, Text系列在显示文字信息方面,提供了更多的的属性来调整显示效果。如果有大段的文字要排版,或者对文字的显示效果要求高的话,建议使用 Text。 而 Tex系列最大的优势是支持 Lat

【manim动画教程】-- 文本样式

文本的样式主要指颜色和字体相关的属性设置。 对于manim的两个文本对象 Text和 Tex来说, Text对象有更多的属性可以调整样式,相对来说,由于 Tex主要用来显示数学公式,所以关于样式的属性要少一些。 下面介绍一些我在视频制作时最常用的一些颜色和字体相关的属性。 1. 颜色相关 颜色设置主

【manim动画教程】-- 坐标系

没有引入坐标系之前,在绘制图形时,也有一个隐含的坐标系,它和屏幕的像素相关。 比如,我们之前示例中的各个图形,屏幕的中心就是坐标原点([0, 0]), 横轴坐标的范围大概是 [-3.5, 3.5],纵轴的坐标范围大概是 [-4, 4],这个范围与设置的视频分辨率有关,分辨率设置的越高的话,坐标范围越