使用 F5-TTS 生成 AI 角色語音

F5-TTS 是一種能夠將文字快速轉換為自然語音的 AI 模型,是以 FastSpeech 2 為基礎、進一步改良的 TTS 架構。

最近看到很多迷因影片用一些角色人物去配音,所以這次想試試透過 F5-TTS 來測試一下使用指定角色的語音檔去生成角色的配音,具體也可以應用在有聲書、客服語音機器人…等等,本次使用 SWivid/F5-TTS 這個開源專案來實作。

一、環境設置

  • Windows 11
  • NVIDIA GeForce RTX 3060 Ti
  • Python 3.11.4

1. 安裝 ffmpeg 工具

需要有 ffmpeg 工具,才能正常處理音訊檔案,所以我們必須要安裝 ffmpeg 並加入環境變數,Windows 的具體安裝方法請參考 如何在 Windows 系統上安裝 FFmpeg

安裝完成後,執行指令確認可正常使用

1
ffmpeg -version

2. 將 F5-TTS 專案從 github clone 下來

1
2
git clone https://github.com/SWivid/F5-TTS.git
cd F5-TTS

3. 建立虛擬環境

1
2
3
4
python -m venv venv

# Windows PowerShell 啟用環境
.\venv\Scripts\activate.ps1

4. 安裝依賴套件

我的 GPU 是 NVIDIA GeForce RTX 3060 Ti,驅動版本為 560.94,根據我目前適合的 CUDA 版本去安裝 PyTorch

1
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118
1
pip install -e .

5. 啟動服務

1
f5-tts_infer-gradio

成功後,可進到 http://127.0.0.1:7860/ ,會看到 Gardio 的 E2/F5 TTS 功能畫面

F5-TTS

P.S. 一開始因為我安裝的 PyTorch 版本不對,結果出現下面這個錯誤

1
OSError: [WinError 126] 找不到指定的模組。 Error loading "C:\Dev\www\F5-TTS\venv\Lib\site-packages\torch\lib\fbgemm.dll" or one of its dependencies.

原因是 PyTorch 版本與我目前顯卡的 CUDA 版本不符,所以要卸載後再重新安裝

1
2
3
4
pip uninstall torch torchvision torchaudio

# 請確認你電腦目前適合的版本去安裝
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118

重新安裝後,再嘗試檢查一下 torch,確認沒問題後,再啟動 f5-tts_infer-gradio 一次

1
2
# 成功後會 print 出 2.1.2 True
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

二、生成角色語音

進到 http://127.0.0.1:7860/ ,會成功看到 Gardio 的 E2/F5 TTS 功能畫面,接著就可以開始製作角色的語音了

1. 上傳角色語音檔

你可以上傳一段大概 12 秒左右的角色語音檔,那我這邊是直接上傳一個「來自真新鎮的小智.mp3」 語音檔,它有提供截取、直接錄音等功能

F5-TTS

2. 輸入文本

接著輸入你想要生成的語音文本,中英文都可以,我這邊輸入一個「南港展覽館的館長掌管的官方觀光網站綻放萬丈光芒」繞口令給它

下面還有一些進階的設定,可以自由調整。

F5-TTS

3. 開始生成

按下 Synthesize,回到 cmd line 會看到程式正在解析與生成,首次使用因為需要下載安裝一些依賴會比較久,完成後回到 Gardio 網頁,就會看到已經生成好的語音了!

F5-TTS

三、總結

中間過程也有遇到不少環境版本的問題,以及缺少的依賴工具,不過多問問 AI 還是可以排查解決。

總體來說,效果還可以,只要上傳短短 12 秒的語音,就有不錯的效果,只是還是有些小缺點,包含像中文語句的斷句,有時沒有這麼流暢,這次就先簡單實驗到這裡。