配置系统¶
配置系统的功能围绕 Config 展开。
常用配置¶
Config 提供了若干可配置项,包括但不限于:
preview_fps: 预览界面的帧率fps: 导出视频的帧率
警告
预览界面的帧率 preview_fps 和导出视频的帧率 fps 是两个不同的值,
这是考虑到部分用户可能会有“在预览时降低帧率提高渲染效率,在导出时提高帧率以获得更流畅的视频”的需求。
顺便一提,为了在预览时提高渲染效率,还有一种策略是打开窗口左上角“功能”菜单中的“跳帧”功能。
background_color: 画面的背景颜色
警告
背景颜色在设置时不能使用类似 background_color='#RRGGBB' 的形式,应使用
background_color=Color('#RRGGBB')background_color=Color(BLUE)
等形式
font:Text类所使用的默认字体既可以使用单个字符串
'Consolas',也可以使用一个列表来提供多个备选字体['Consolas', 'Noto Serif CJK SC']output_dir: 输出路径,有两种格式:不以
:符号开头时,表示相对于工作目录的路径,例如videos使用场景侧重于在有复杂文件结构时,将输出文件统一放到工作目录下的
videos文件夹以
:符号开头时,表示相对于 Timeline 所在代码文件的路径,例如:/videos使用场景侧重于在有复杂文件结构时,将输出文件放到每个代码文件附近单独的位置
对于更多的配置项可以参考 Config 的文档
设定配置 - 三种方法¶
了解了上面这些配置,我们也要了解如何设置它们。
方法一 - 时间轴配置¶
最常用的做法是,将配置信息和你继承的 Timeline 写在一起,例如:
class YourTimeline(Timeline):
CONFIG = Config(
preview_fps=10,
fps=120,
background_color=Color(PURE_GREEN)
)
def construct(self):
...
这样就可以更改 YourTimeline 在运行时的配置,调整了帧率和背景颜色。
并且,和时间轴类写在一起的配置信息,也支持继承和覆盖:
class AwesomeTemplate(Timeline):
CONFIG = Config(
preview_fps=10,
fps=120,
output_dir='awesome_videos',
)
def construct(self):
...
class YourTimeline(AwesomeTemplate):
CONFIG = Config(
output_dir=':/local_videos'
)
def construct(self):
...
在这个例子中,子类 YourTimeline 覆盖了父类的 output_dir,其余配置保留 AwesomeTemplate 中的设置,这在创建模板以及覆盖模板选项时比较实用。
方法二 - 全局配置¶
在使用命令行参数时,使用 -c 配置名 值 可以修改全局配置,设定的全局配置会覆盖其它配置。
例如 janim write your_file.py YourTimeline -c fps 120 可以将本次执行时的渲染帧率设置为 120。
也可以同时修改多个配置项,例如:
janim write your_file.py YourTimeline -c fps 120 -c output_dir custom_dir
这个命令会将动画以 120 的帧率输出到 custom_dir 这个指定的文件夹中。
方法三 - 局部配置¶
局部配置,指的是只在代码块的一部分应用特定的配置,例如只想在某一段代码上设置特别的字体:
class YourTimeline(Timeline):
def construct(self):
txt1 = Text('Using default font')
with Config(font='Noto Serif CJK SC'):
txt2 = Text('Using "Noto Serif CJK SC" font')
txt3 = Text('Using default font again')
group = Group(txt1, txt2, txt3).show()
group.points.arrange(DOWN, aligned_edge=LEFT)
也就是说,使用 with Config(key=value): 可以使其所包含的代码块在指定的配置下执行内容,而不影响到外部代码块的配置。
提示
在上面的这个例子中,其实可以使用
txt2 = Text('Using "Noto Serif CJK SC" font', font='Noto Serif CJK SC')
来设置 txt2 的字体,而不必使用 with Config(font='Noto Serif CJK SC'):,这里只是作为一个示例用于演示局部配置的用法。
获取配置¶
这些配置在更改后一般是用来改变 JAnim 进行渲染时的一些行为,如果你需要手动获取配置项具体的值,你可以使用 Config.get.xxx 的形式,例如:
class YourTimeline(Timeline):
CONFIG = Config(
preview_fps=10,
fps=120,
)
def construct(self):
print(Config.get.preview_fps)
print(Config.get.fps)
print(Config.get.frame_width, Config.get.frame_height)
print(Config.get.left_side, Config.get.right_side)
print(Config.get.bottom, Config.get.top)
其中没有设置的属性则采用默认设置 default_config
提示
在这个例子中,我们输出了配置项 preview_fps fps frame_width frame_height 的值。
但后面两行的涉及的 left_side right_side bottom top 其实并不是可以直接配置的选项,
而是由视框大小 frame_width 和 frame_height 这一组配置所决定的,这里相当于提供了一种“衍生功能”。