快速入门#

在继续之前,请按照安装中的步骤安装 Manim Voiceover 并确保其正常运行。

基本用法#

要使用 Manim Voiceover,您只需从插件中导入VoiceoverScene

from manim_voiceover import VoiceoverScene

让您的场景继承自VoiceoverScene

class MyAwesomeScene(VoiceoverScene):
    def construct(self):
        ...

您也可以从多个场景类继承

from manim.scene.moving_camera_scene import MovingCameraScene

class MyAwesomeScene(MovingCameraScene, VoiceoverScene):
    def construct(self):
        ...

只要父类的变量或方法不冲突,这应该就能奏效。

Manim Voiceover 可以使用各种文本转语音引擎,有些是专有的,有些是免费的。一个很好的入门选择是 gTTS,它使用谷歌翻译 API。我们发现由于其跨平台兼容性,这是开始使用该库的最佳选择——但它仍然需要互联网连接。

from manim_voiceover import VoiceoverScene
from manim_voiceover.services.gtts import GTTSService

class MyAwesomeScene(VoiceoverScene):
    def construct(self):
        self.set_speech_service(GTTSService())

添加画外音的逻辑非常简单。将动画封装在一个调用self.voiceover()with块中

with self.voiceover(text="This circle is drawn as I speak.") as tracker:
    ... # animate whatever needs to be animated here

Manim 将动画化该 `with` 块内的所有内容。如果画外音在动画结束时仍未完成,Manim 将会等待直到其完成。此外,您可以使用 tracker 对象以编程方式获取画外音的总时长或剩余时长,这使您能够对场景进行更精细的控制

with self.voiceover(text="This circle is drawn as I speak.") as tracker:
    self.play(Create(circle), run_time=tracker.duration)

提示

使用 `with` 块可以让您将句子串联起来,并使代码更易于阅读,因为画外音调用实际上就是注释。

text 参数会自动重用于视频字幕。或者,您可以提供自定义字幕

with self.voiceover(
    text="This circle is drawn as I speak.",
    subcaption="What a cute circle! :)"
) as tracker:
    self.play(Create(circle))

有关更多示例,请参阅示例画廊示例目录。我们建议从gTTS 示例开始。

书签#

Manim Voiceover 最重要的功能之一是书签。书签允许您在画外音的特定单词处触发动画。

借助书签,您可以更精确地安排动画时间。有关更多示例,请参阅书签示例近似 Tau

录制您自己的画外音#

Manim Voiceover 可以直接从命令行录制您的画外音。我们推荐以下工作流程

  1. 使用其中一个文本转语音引擎开发您的动画,例如services.gtts.GTTSService

from manim_voiceover import VoiceoverScene
from manim_voiceover.services.gtts import GTTSService

class MyAwesomeScene(VoiceoverScene):
    def construct(self):
        self.set_speech_service(GTTSService())

        with self.voiceover(text="This circle is drawn as I speak.") as tracker:
            self.play(Create(circle))
  1. 当您对动画满意后,切换服务至services.recorder.RecorderService来录制您自己的画外音

from manim_voiceover import VoiceoverScene
# from manim_voiceover.services.gtts import GTTSService
from manim_voiceover.services.recorder import RecorderService

class MyAwesomeScene(VoiceoverScene):
    def construct(self):
        # self.set_speech_service(GTTSService())
        self.set_speech_service(RecorderService())

        with self.voiceover(text="This circle is drawn as I speak.") as tracker:
            self.play(Create(circle))
  1. 以您通常的方式渲染场景

manim -pql my_awesome_scene.py --disable_caching

这将在终端中逐步指导您如何录制画外音。

生成不同语言的画外音#

每个语音服务都支持不同的选项集,其中一些支持多种语言。您可以在 API 参考的语音服务部分了解这些选项。

例如,services.gtts.GTTSService支持谷歌翻译支持的所有语言,您可以在此处找到。 gTTS 示例演示了如何用英语和越南语实现相同的场景。

如果您找不到适合您语言的优秀文本转语音引擎,您可以直接使用services.recorder.RecorderService录制您自己的画外音。