是否可以通过编程方式(而不是从命令行)运行 manim?
Is it possible to run manim programmatically (and not from the command line)?
原始问题发布在 Reddit (https://www.reddit.com/r/manim/comments/lw3xs7/is_it_possible_to_run_manim_programmatically_and/) 上。冒昧的在这里问一下。
假设我想编写一个简单的 GUI 应用程序,用户可以在其中输入 LaTeX 代码,单击“动画”按钮,然后 manim 在后台呈现 mp4,最后将动画呈现给用户.
是否可以使用 manim 作为模块来实现这一点?例如,通过将用户输入插入到先前准备好的 manim 场景中,然后调用类似 my_scene.run(output=tempfile.mp4)
?或者我必须接受用户输入,将其写入新的 scene.py 文件和 运行 os.subprocess("manim", "scene.py", "MyScene", "-p")
?
其实很简单。只需使用要渲染的 Scene 对象的 .render(self)
方法即可。
from manim import *
# To open the movie after render.
from manim.utils.file_ops import open_file as open_media_file
class DemoScene(Scene):
def construct(self, alg):
image1 = ImageMobject(np.uint8([[63, 0, 0, 0],
[0, 127, 0, 0],
[0, 0, 191, 0],
[0, 0, 0, 255]
]))
image1.height = 7
self.add(image1)
self.wait(1)
if __name__ == '__main__':
scene = DemoScene()
scene.render() # That's it!
# Here is the extra step if you want to also open
# the movie file in the default video player
# (there is a little different syntax to open an image)
open_media_file(scene.renderer.file_writer.movie_file_path)
原始问题发布在 Reddit (https://www.reddit.com/r/manim/comments/lw3xs7/is_it_possible_to_run_manim_programmatically_and/) 上。冒昧的在这里问一下。
假设我想编写一个简单的 GUI 应用程序,用户可以在其中输入 LaTeX 代码,单击“动画”按钮,然后 manim 在后台呈现 mp4,最后将动画呈现给用户.
是否可以使用 manim 作为模块来实现这一点?例如,通过将用户输入插入到先前准备好的 manim 场景中,然后调用类似 my_scene.run(output=tempfile.mp4)
?或者我必须接受用户输入,将其写入新的 scene.py 文件和 运行 os.subprocess("manim", "scene.py", "MyScene", "-p")
?
其实很简单。只需使用要渲染的 Scene 对象的 .render(self)
方法即可。
from manim import *
# To open the movie after render.
from manim.utils.file_ops import open_file as open_media_file
class DemoScene(Scene):
def construct(self, alg):
image1 = ImageMobject(np.uint8([[63, 0, 0, 0],
[0, 127, 0, 0],
[0, 0, 191, 0],
[0, 0, 0, 255]
]))
image1.height = 7
self.add(image1)
self.wait(1)
if __name__ == '__main__':
scene = DemoScene()
scene.render() # That's it!
# Here is the extra step if you want to also open
# the movie file in the default video player
# (there is a little different syntax to open an image)
open_media_file(scene.renderer.file_writer.movie_file_path)