2.3 输出设置
2.3.1 输出文件夹
在2.2节中,当你运行manim -pql example.py Example
之后,就会在同目录中生成media文件夹,里面根据不同的数据类型设置了不同文件夹,如文本、视频、图片等等。你可以在videos文件夹下找到对应的文件名,从中可以找到最终的成片。而在partial_movie_files文件夹中则存放着一小段一小段的视频,可以发现最终的视频就是由这些不同的小视频组合在一起的。
2.3.2 片段
借助self.next_section()
,你可以手动设置切片位置,使得除了生成完整视频外,还能生成不同视频片段,这些视频片段存储在与成片同目录的sections文件夹中。需要注意的是,每个视频片段不能仅有一帧内容,也就是说需要包含动画变换或者self.wait()
。一旦引入了self.next_section()
,事实上,你可以不用在def construct(self):
的下一行紧跟self.next_section()
,因为他会自动生成。这就好比剪一张纸条,self.next_section()
的位置就是要剪开的位置,你是不需要在最开始那剪一刀的。
next_section()
有三个参数:name
、type
、skip_animations
。
name
字符串,该片段的名称,视频片段的文件名结构为“类名_编号_name”。
type
字符串,官方文档并没有介绍其用处,目前我只知道他的默认值为
DefaultSectionType
类的NORMAL
属性。skip_animations
布尔值,是否跳过该片段内的所有动画内容(包括
self.wait()
),默认为False。若为True,则在成片中并没有该段切片,但sections文件夹中依然会保留该段切片。
注意当你使用self.next_section()
时,需要使用manim -pql --save_sections example.py Example
才能将片段保存在sections文件夹中。
from manim import *
class Example(Scene):
def construct(self):
t1 = Text('你好!Manim')
self.add(t1)
self.wait(1)
self.play(t1.animate.shift(UP * 3))
self.next_section('part_1')
circle = Circle().set_color(BLUE)
self.play(FadeIn(circle))
self.play(circle.animate.set_fill(BLUE, opacity=0.5), run_time=1)
self.wait(1)
self.next_section('part_2', skip_animations=True)
square = Square().set_color(RED).set_fill(RED, opacity=0.5)
self.play(ReplacementTransform(circle, square, run_time=1))
self.play(square.animate.set_fill(RED, opacity=0))
self.wait(1)
2.3.3 命令行标志
对于manim -pql example.py Example
,其结构为manim [OPTIONS] FILE [SCENES]
。
OPTIONS
就是一些参数标志,例如-p
表示在渲染后预览视频,-ql
代表分辨率854x480及15 FPS。更多的参数设置请参见第2.4.1节
SCENES
为你创建的类名。如果一个文件中仅有一个类,则可以省略该类名。如果有多个类,则指定输出特定类,类与类之间用空格隔开,如manim -pql example.py ExampleOne ExampleTwo
。如果要输出所有的类,可以不用一一指名,直接在OPTIONS
中使用-a
标志即可。注意,一个类就相当于一个成片,一次性输出多个类意味着输出多个独立的成片。