数学视频动画引擎Python库 -- Manim Voiceover 快速入门 Quickstart

发布于:2025-07-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Mathematical Animation Engine

Manim Voiceover 是一个为 Manim 打造的专注于语音旁白的插件:

  • 直接在 Python 中添加语音旁白: 无需使用视频编辑器,即可为 Manim 视频添加语音旁白。
  • 在渲染期间录制旁白: 通过简单的命令行界面(参见 RecorderService),可使用麦克风在渲染过程中录制语音旁白。
  • 使用 AI 生成旁白: 利用多种免费及付费服务,开发时可直接使用 AI 自动生成的配音。
  • 动画逐词时间标记: 实现动画与语音旁白的逐词时间标记同步,即根据语音旁白中特定词语触发相应的动画效果。即使是录制的音频,此功能也能实现。这得益于 OpenAI Whisper 技术的支持。

快速入门

在继续之前,请按照安装部分的步骤安装 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,它使用 Google Translate 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="我讲话的时候会画出这个圆。") as tracker:
    ... # 在这里动画化需要动画化的内容

Manim 将动画化 with 块中的所有内容。如果旁白在动画结束时还没有完成,Manim 将等待它完成。此外,你可以使用 tracker 对象来获取旁白的总时长或剩余时长,从而更精细地控制场景:

with self.voiceover(text="我讲话的时候会画出这个圆。") as tracker:
    self.play(Create(circle), run_time=tracker.duration)

提示:使用 with 块可以让你将句子依次连接起来,从而得到更易读的代码,因为旁白调用实际上就像是注释。

text 参数会自动重复用于视频字幕。或者,你可以提供一个自定义字幕:

with self.voiceover(
    text="我讲话的时候会画出这个圆。",
    subcaption="好可爱的圆!:)"
) as tracker:
    self.play(Create(circle))

查看示例画廊示例目录以获取更多示例。我们建议从 gTTS 示例开始。

书签

Manim Voiceover 的一个重要功能是书签。书签允许你在旁白中的特定单词处触发动画。

视频:https://user-images.githubusercontent.com/2453968/201714175-ea5e7e46-9b33-40de-a4c1-ecc7bf55e42b.mp4

借助书签,你可以更精确地计时动画。查看书签示例近似计算 τ 示例以获取更多示例。

录制自己的旁白

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="我讲话的时候会画出这个圆。") 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="我讲话的时候会画出这个圆。") as tracker:
            self.play(Create(circle))
  1. 按照正常方式渲染场景:
manim -pql my_awesome_scene.py --disable_caching

这将在终端中逐步指导你如何录制旁白。

用不同语言生成旁白

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

例如,services.gtts.GTTSService 支持 Google Translate 支持的所有语言,你可以在此处找到这些语言。gTTS 示例以英语和越南语实现了相同的场景作为演示。

如果你找不到适合自己语言的文本到语音引擎,你可以直接使用 services.recorder.RecorderService 录制自己的旁白。

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。