翼度科技»论坛 编程开发 python 查看内容

【manim】之目录动画

14

主题

14

帖子

42

积分

新手上路

Rank: 1

积分
42
概要

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

基于manim封装一个目录显示的 class。
主要属性就是 titles,也就是目录中的各个标题。
  1. class CatalogDisplayer:
  2.     def __init__(self, sc: Scene, titles: list):
  3.         self.sc = sc
  4.         self.titles = titles
  5.     def _title(self):
  6.         title = Text("目录", font_size=20, weight=BOLD).shift(UP * 3.5)
  7.         line = Line(LEFT * 3, RIGHT * 3, color=WHITE, stroke_width=3).next_to(
  8.             title, DOWN * 0.5
  9.         )
  10.         self.sc.add(title, line)
  11.     def _get_paragraph(self, index: int):
  12.         catalog = Paragraph(
  13.             *self.titles,
  14.             line_spacing=1,
  15.             alignment="left",
  16.             font_size=30,
  17.             font="STLiti",
  18.             weight=BOLD,
  19.         )
  20.         catalog[index].set_color_by_gradient(RED, BLUE, GREEN)
  21.         for i in range(len(self.titles)):
  22.             if i != index:
  23.                 catalog[i].set_color(GREY)
  24.         return catalog
  25.     def _start(self):
  26.         catalog = self._get_paragraph(0)
  27.         self.sc.add(catalog)
  28.         self.sc.play(Indicate(catalog[0], scale_factor=1.5, color=GREEN))
  29.     def display(self, index: int) -> bool:
  30.         if index >= len(self.titles):
  31.             return False
  32.         self.sc.clear()
  33.         self._title()
  34.         if index == 0:
  35.             self._start()
  36.             return True
  37.         pre_catalog = self._get_paragraph(index - 1)
  38.         self.sc.add(pre_catalog)
  39.         catalog = self._get_paragraph(index)
  40.         self.sc.play(ReplacementTransform(pre_catalog, catalog))
  41.         self.sc.play(Indicate(catalog[index], scale_factor=1.5, color=GREEN))
  42.         return True
复制代码
调用的示例如下:
  1. # -*- coding: utf-8 -*-
  2. from manim import *
  3. TITLES = [
  4.     "· manim是什么",
  5.     "· 多平台支持",
  6.     "· 基于python",
  7.     "· 重要依赖",
  8. ]
  9. class Example(Scene):
  10.     def construct(self):
  11.         catalog = CatalogDisplayer(self, TITLES)
  12.         for i in range(len(TITLES)):
  13.             catalog.display(i)
  14.             self.wait()
  15.             self.clear()
复制代码
如果不是第一个标题,会有一个简单的过渡效果。
测试效果
  1. manim -p ./sample.py
复制代码


来源:https://www.cnblogs.com/wang_yb/p/17163051.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具