ikuzakの備忘録

数学関連のツールTeX,Tikz,Manim,Geogebraなどの備忘録です。

【Manim】manim-voiceoverを使いたい

実際に動画を作り始める前に、ある程度クラスやメソッドを知っておこうと思って、Manim Communityのリファレンスに目を通していたら ナレーション(Voiceover)の追加ってのが。

こ、これは…!?

しかも、自動生成されたAI音声を使用できるですって? これはなかなかに挑戦したくなるもの…。

というわけでインストール

インストールはどの音声サービスでも使えるように一応すべてのものが使えるようにallで。(特に、単一の音声生成サービスだけでいいならazure , coqui , gtts , pyttsx3があるらしい。)

pip install "manim-voiceover[all]"

(これ、Manim VoiceoverのリファレンスのInstallation読むとオプションで--upgradeがあるのは、なんで?)

PortAudio(PyAudio)のインストールはレンダリング中に生の声をナレーションを録音することはするつもりがなくなっていたので、飛ばした(笑) 同様にgettextも翻訳はいらんかなー?とこれも割愛した。

SoXのインストール

これがあると、読み上げの速度を変更できるっぽいのでこれは入れておこう。 MacDebianのインストールはbrewやapt-getでできるらしい。 とりあえず、Windows版をインストールをした。

Microsoft Azureの準備

最も自然な音声サービスがAzureだということなので、Azureのアカウントを準備。

からリソースの作成。 作成後にKeys Pointを確認して、 manimのソースファイルと同じフォルダーに.envという名前でファイルを作成して、

AZURE_SUBSCRIPTION_KEY = "キー1を記入"
AZURE_SERVICE_REGION = "Location/Regionを記入"

でコードを書く前の準備は完了らしい。 ただ一応、AzureのSpeech Serviceの「Text to Speech」は1 か月あたり 0.5 million 文字まで無料と制限はあるみたい。 さすがに、一ヶ月に50万文字はいかないかなぁ…。

実際の利用で遭遇したManimのバグ

一応テストとして、manim-voiceoverのExample Galleryにあったapproximating-tau.pyをダウンロードしてレンダリングしてみる。(ファイル内のシーン(class)がApproximatingTau単一なので、Pythonファイル名のあとにシーン名を省略しても通るっぽい?)

manim approximating-tau.py

ただ、初めてのレンダリングだとうまくいくが、2度目以降のレンダリングだと入れたい音声が最初以外を除いてうまく挿入されなかった。

おかしいやろがい!!

そもそもmanim-voiceoverにバグがあるらしい

むっちゃ検索してなんでこうなるのか調べてみたら、そもそもmanim-voiceoverにバグがあって、そんなことが起こるらしい。 cacheが存在しているときにどうもうまく音声が入らないんだとか。たどり着いたHelpForumでは「cache消したらいいよ」的なことが書いてあった。 そして、改めてこの備忘録のために公式のDocsを見てみると

書いてあるやん…おかしいのはワイやったんや…。

(2023/9/9追記) --disable_cachingのオプション追加で既に作られたキャッシュであっても無効にするらしい。 これって、「Azureを通して音声は再生成される。」ってことなのかな?とすると、このオプション付きで動画作る過程でレンダリングの度に月毎の無料の範囲内の文字数は消費されるんかな?

/* -----codeの行番号----- */