【manim】之目录动画

yizhihongxing

概要

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

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

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

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

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

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

    python 2023年4月19日
    00
  • 【manim】之圆规动画

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

    2023年3月31日
    00
  • matplotlib可视化系列之【排版】

    排版虽然只是绘图中的辅助功能,但是好的排版能够提高图形的表现力。让人一眼看出图形要表达的内容和数据,而不用去费力的睁大眼睛去图中查找。 如果说 matplotlib的坐标系统,各种基础元素,包括柱状图,折线图,散点图等它的硬实力,那么,排版就是 matplotlib 的软实力,结合排版,能让分析结果给人一个良好的第一印象,增强别人对分析结果的信任。 排版是个…

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

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

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

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

    python 2023年4月17日
    00
  • 【manim动画教程】–目录(完结)

    manim是一个生成数学教学视频的动画引擎。它用编程的方式创建精美的数学动画,让数学更加易懂。 本教程简单介绍了 manim 的基本使用方式,基于 v0.17.2 版本 manim 安装 manim是基于python语言开发的开源框架,是由 3blue1brown 开发的。 本来是他们自己用来制作数学视频用的,因为其友好的API和漂亮的UI效果,在开源之后,…

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