【manim】之目录动画

概要

最近,结合视频剪辑工具剪映制作短视频时,
如果不是数学相关的内容,使用视频剪辑工具配置字幕,添加图片等等比 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】之目录动画 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • 【manim动画教程】– 坐标系

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

    python 2023年4月18日
    00
  • matplotlib可视化系列之【缩放和投影】

    有时候,我们将数据变换之后再绘图,一方面,可以突出某些区域的数据;另一方面,变换之后可以更好的看出数据之间的关系。 matplotlib 提供了两种变换数据的方式,一种是 Scale(缩放),一种是Projection(投影)。 Scale是对数据的一个维度进行变换,Projection则是对2个或者2个以上的维度进行变换。 Scale – 缩放 线性缩放 …

    2023年4月2日
    00
  • 【manim动画教程】–相机

    相机(Camera)在二维的场景下使用不多,一般在3D场景中提及的比较多。相机相当于我们看动画的视角,简单来理解的话,相当于我们的眼睛(实际情况会复杂一些,相机还有其他一些辅助功能)。 默认的相机焦点在屏幕的中心位置,相机默认是以俯视的视角查看所有的元素。之前的介绍的常用动画效果和高级动画效果,都没有对相机进行调整过,所以,是通过移动和变换各个元素来实现动画…

    python 2023年4月19日
    00
  • 【manim动画教程】–常用动画效果

    manim的主要功能就是制作动画,因此它提供了各类丰富的动画效果,本篇主要介绍其中最常用的几种动画效果。 至于特殊的动画效果,以及自定义动画效果的方法以后再另外介绍。 1. 创建效果 展示某个元素或者文字时,一下子就全显示出来会显得比较突兀,通过创建效果的动画,让各个元素的出现更加的自然。常用的创建效果动画主要有:Create,Write和FadeIn三个方…

    python 2023年4月17日
    00
  • matplotlib可视化系列之【颜色】

    颜色和排版一样,看似简单,其实非常复杂,往大了说,涉及到艺术和品味,不像数学公式,物理定理那样,是非分明。 但是,对 matplotlib 中的颜色有些基本的了解,可以让绘出的图形颜色不至于太突兀。虽不能说选出完美的颜色搭配,至少是看着舒服,醒目的颜色搭配。 颜色的种类 颜色一般用 RGB 来表示,颜色空间主要有3种: RGB sRGB Lab 3种颜色空间…

    2023年4月2日
    00
  • 【pandas基础】–核心数据结构

    pandas中用来承载数据的两个最重要的结构分别是: Series:相当于增强版的一维数组 DataFrame:相当于增强版的二维数组 pandas最大的优势在于处理表格类数据,如果数据维度超过二维,一般我们会使用另一个 python的库 numpy。 本篇主要介绍这两种核心数据结构的创建方式。 1. Series pandas的Series是一种带有标签索…

    python 2023年5月8日
    00
  • 【manim】之滚动字幕

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

    2023年4月2日
    00
  • 【manim动画教程】– 文本样式

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

    python 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部