跳转至

配置

影片代码
import manimgx as m

m.config.pixel_width, m.config.pixel_height = 1080, 1920


class ConfigurationHero(m.Scene):
    def construct(self) -> None:
        frame = m.Rectangle(
            width=m.config.frame_width - 0.2,
            height=m.config.frame_height - 0.2,
            color=m.BLUE,
        )
        square = m.Square(side_length=8, color=m.YELLOW).scale(0.97)
        label = m.Text("1080 × 1920", font_size=56)
        self.play(m.Create(frame), m.Create(square), m.Write(label))
        self.wait()

m.config 持有每个场景制作时所用的内容:视频以像素计的尺寸、它的帧率、它的背景,以及帧以单位计的尺寸。在 import manimgx as m 之后、场景制作之前设置它;命令行的选项也会设置它(-r 1080x1920、--fps 30)。

帧具有视频的形状,它的短边为 8 个单位:宽视频显示约 14.2 × 8 个单位,高视频显示 8 × 14.2,而中间的 8 × 8 正方形在两者中都存在。

m.config

每个场景创建与渲染所用的配置,以 m.config 访问:一个 Config。在创建场景之前设置其字段: m.config.pixel_width, m.config.pixel_height = 1280, 720。

Config

场景创建与渲染所用的配置:视频的尺寸、帧率和背景,以及画面在场景单位中的尺寸。

该配置只有一个实例:config。在创建场景之前设置其字段: 场景的摄像机以及填满画面的 mobject 在创建时从该配置获取各自的尺寸和背景, render 在启动时获取视频的尺寸和帧率。它也可以像 Manim 代码那样以字典方式读取和设置:config["frame_width"]、 config["pixel_height"] = 720。

画面具有视频的宽高比,其短边为 8 个单位:宽屏视频(16:9)显示约 14.2 × 8 个单位, 竖屏视频(9:16)显示 8 × 14.2。因此,能放入中央 8 × 8 正方形的内容, 在两种比例下都能以相同尺寸完整显示。

pixel_width

视频的宽度,以像素为单位(默认 1920)。

pixel_height

视频的高度,以像素为单位(默认 1080)。对于竖屏视频(9:16),应将其设为 较大的值:config.pixel_width, config.pixel_height = 1080, 1920。

frame_rate

影片每秒包含的帧数(默认 60):第 k 帧恰好在 k / frame_rate 秒处显示场景。 视频要求该值为整数。

simulation_rate

模拟时钟每秒滴答的次数(默认 60)。

非流的时间更新器以模拟方式运行:它在此时钟的每次 滴答以及每次 play 和 wait 结束时步进,从不在帧上步进,因此在任何帧率下都执行 相同的步进,帧所显示的是其最后一次步进留下的状态。当更新器处于场景中时, 场景会计算每一次滴答。在每秒 60 帧时,每一帧恰好是一次滴答,因此滴答不产生 额外开销;在能整除 60 的帧率(10、12、15、20、30)下,每一帧也恰好落在 一次滴答上。

background_color

背景的颜色(默认黑色)。

background_opacity

背景的不透明度,取值范围 0 到 1(默认 1)。

frame_height

画面的高度,以场景单位表示。除非另行设置,画面的短边为 8 个单位: 宽屏视频的画面高为 8,竖屏视频的画面在其宽为 8 时由宽高比决定高度 (9:16 时约 14.2)。画面的宽度由视频的宽高比决定。

config.frame_height
源码

manimgx\config.py

def frame_height(self) -> float:
    """画面的高度,以场景单位表示。除非另行设置,画面的短边为 8 个单位:
    宽屏视频的画面高为 8,竖屏视频的画面在其宽为 8 时由宽高比决定高度
    (9:16 时约 14.2)。画面的宽度由视频的宽高比决定。"""
    if self._frame_height is not None:
        return self._frame_height
    return 8.0 * max(1.0, self.pixel_height / self.pixel_width)

frame_width

画面的宽度,以场景单位表示:frame_height 乘以视频的宽高比 (16:9 时约 14.2,9:16 时为 8)。

config.frame_width
源码

manimgx\config.py

def frame_width(self) -> float:
    """画面的宽度,以场景单位表示:`frame_height` 乘以视频的宽高比
    (16:9 时约 14.2,9:16 时为 8)。"""
    return self.frame_height * self.pixel_width / self.pixel_height

frame_x_radius

画面宽度的一半,以场景单位表示:即其右边缘的 x 坐标。

config.frame_x_radius
源码

manimgx\config.py

def frame_x_radius(self) -> float:
    """画面宽度的一半,以场景单位表示:即其右边缘的 x 坐标。"""
    return self.frame_width / 2

frame_y_radius

画面高度的一半,以场景单位表示(宽屏视频为 4):即其上边缘的 y 坐标。

config.frame_y_radius
源码

manimgx\config.py

def frame_y_radius(self) -> float:
    """画面高度的一半,以场景单位表示(宽屏视频为 4):即其上边缘的 y 坐标。"""
    return self.frame_height / 2

top

画面上边缘的中点:从原点向上 frame_y_radius 个单位。

config.top
源码

manimgx\config.py

def top(self) -> "Point3D":
    """画面上边缘的中点:从原点向上 `frame_y_radius` 个单位。"""
    return self.frame_y_radius * np.array([0.0, 1.0, 0.0])

bottom

画面下边缘的中点:从原点向下 frame_y_radius 个单位。

config.bottom
源码

manimgx\config.py

def bottom(self) -> "Point3D":
    """画面下边缘的中点:从原点向下 `frame_y_radius` 个单位。"""
    return -self.top

right_side

画面右边缘的中点:从原点向右 frame_x_radius 个单位。

config.right_side
源码

manimgx\config.py

def right_side(self) -> "Point3D":
    """画面右边缘的中点:从原点向右 `frame_x_radius` 个单位。"""
    return self.frame_x_radius * np.array([1.0, 0.0, 0.0])

left_side

画面左边缘的中点:从原点向左 frame_x_radius 个单位。

config.left_side
源码

manimgx\config.py

def left_side(self) -> "Point3D":
    """画面左边缘的中点:从原点向左 `frame_x_radius` 个单位。"""
    return -self.right_side

aspect_ratio

视频宽度与高度之比:pixel_width / pixel_height(默认 16:9)。

config.aspect_ratio
源码

manimgx\config.py

def aspect_ratio(self) -> float:
    """视频宽度与高度之比:`pixel_width / pixel_height`(默认 16:9)。"""
    return self.pixel_width / self.pixel_height

background

背景的颜色,以 ManimColor 表示。

config.background
源码

manimgx\config.py

def background(self) -> ManimColor:
    """背景的颜色,以 [`ManimColor`][manimgx.ManimColor] 表示。"""
    return ManimColor(self.background_color)