快速入门#
在继续之前,请按照安装中的步骤安装 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))
书签#
Manim Voiceover 最重要的功能之一是书签。书签允许您在画外音的特定单词处触发动画。
录制您自己的画外音#
Manim Voiceover 可以直接从命令行录制您的画外音。我们推荐以下工作流程
使用其中一个文本转语音引擎开发您的动画,例如
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))
当您对动画满意后,切换服务至
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))
以您通常的方式渲染场景
manim -pql my_awesome_scene.py --disable_caching
这将在终端中逐步指导您如何录制画外音。
生成不同语言的画外音#
每个语音服务都支持不同的选项集,其中一些支持多种语言。您可以在 API 参考的语音服务部分了解这些选项。
例如,services.gtts.GTTSService
支持谷歌翻译支持的所有语言,您可以在此处找到。 gTTS 示例演示了如何用英语和越南语实现相同的场景。
如果您找不到适合您语言的优秀文本转语音引擎,您可以直接使用services.recorder.RecorderService
录制您自己的画外音。