分享程式代碼相關筆記
目前文章總數:242 篇
最後更新:2026年 07月 25日
GPT-SoVITS 是一套少樣本語音合成工具,主要用途是從一小段目標人物的錄音中學習音色
再把輸入文字轉換成接近該人物聲線的語音。
※此工具有 MIT License,因此是開源免費工具
依照官方說明,只有約 5 秒參考音訊時,就能使用零樣本 TTS 快速體驗;
若準備約 1 分鐘以上且品質良好的資料進行微調,通常能進一步提升音色相似度與自然度。
GPT-SoVITS v2 特點如下:
| 項目 | 說明 |
|---|---|
| 1. 少樣本訓練 | 不需要錄製數小時的專業語料,也能建立個人化聲音模型 |
| 2. 跨語言支援 | 支援多國語言(中文、英文、日文、韓文、粵語等等) |
| 3. 文字前端 | v2 改善文字處理能力,對混合語言與中文讀音更友善 |
| 4. 低品質參考音訊 | 對網路來源、聲音較悶或高頻缺失的參考音訊有較好的容錯空間 |
| 5. 整合式 WebUI | 從 UVR5 人聲分離、音訊切割、ASR、訓練到推理,都能在同一套介面完成 |
GPT-SoVITS 並非 ChatGPT 接上語音模型
GPT 與 SoVITS 分別處理語音生成流程中的不同任務
| 模型 | 主要工作 | 簡易理解 |
|---|---|---|
| GPT | 根據文字與語音語意,預測接下來的語音語意 Token | 決定「這句話應該怎麼說」 |
| SoVITS | 將語意、音色等資訊還原成可播放的聲音波形 | 決定「用誰的聲音說出來」 |
因此,完整微調後會產生以下兩組權重:
SoVITS 模型:*.pth
GPT 模型:*.ckpt
推理時需要 同時選擇 [正確] 的 SoVITS 與 GPT 權重。
若兩者來自不同人物聲音,將容易出現音色不穩、咬字異常,甚至無法正常生成的狀況(聲音混亂)。
語音複製不只可以拿來「模仿某個人的聲音」,更適合用在本人授權、可追蹤來源的內容製作流程。
| 應用情境 | 說明 |
|---|---|
| 個人 Blog / 教學影片 | 使用自己的聲音快速補旁白,不必因修改一小句而重新錄製整段 |
| 遊戲與獨立動畫 | 在聲優授權範圍內製作角色原型、台詞試聽與多版本腳本 |
| 有聲書與 Podcast | 建立一致的旁白音色,再進行人工審聽與後製 |
| 無障礙輔助 | 為因疾病失去說話能力的人保留本人聲音,但必須授權取得同意 |
| 多語言內容 | 使用同一音色產生不同語言內容,再由母語者檢查發音 |
這類工具最危險的地方,也正是它最方便的地方:只需要少量語音,就可能生成具有相似音色的內容。
因此 : 本篇只用自己的錄音當素材為說明如何使用 GPT-SoVITS v2
本篇目標: 是將一段含有背景聲的長音訊,整理成 GPT-SoVITS v2 可使用的聲音資料集,說明如何複製人聲
然後進行 SoVITS + GPT 微調,最後輸入一段從未錄製過的文字進行語音生成。
使用環境需求(這邊列出 Windows),可參考官方的配置建議:
訓練:
Windows
● 支持 CUDA 的 nVIDIA 显卡,每张拥有至少 8G 以上显存
● 常见的不能使用的显卡:2060以前所有显卡
● Windows 10/11 系统
● ###如果没显卡的话会自动识别使用CPU训练,但慢的离谱
推理:
Windows
● 支持 CUDA 的 nVIDIA 显卡,每张拥有至少 4G 以上显存(未实测,3G刚好无法合成一句,所以推测4G应该可以)
● Windows 10/11 系统
● ###如果没显卡的话会自动识别使用CPU推理
本文採用 GPT-SoVITS WebUI 操作。由於專案仍會更新,若畫面名稱與本文略有差異,請以自己下載版本的介面與官方 README 為準。
安裝可參考官方教學,官方提供了很豐富的手冊說明,基本上可以依照所需進行本地化安裝 / 容器化部署
聲音模型會把聲音檔案中的特徵一起學進去。若原始錄音包含音樂、殘響、風聲、鍵盤聲,模型可能不只學到人聲,也把這些內容當成目標聲音的一部分。
準備聲音檔案時,可以先依照此下原則準備:
| 建議 | 原因 |
|---|---|
| 只保留單一說話者 | 混入第二個人的聲音,容易造成音色漂移 |
| 音量保持穩定 | 忽大忽小會增加模型學習難度 |
| 情緒不要過度分散 | 資料量不多時,平穩語氣通常最容易得到穩定結果 |
| 避免嚴重破音 | 削波失真很難靠降噪修復 |
| 台詞內容要多樣 | 聲母、韻母、語速與停頓越完整,模型越容易學會新句子 |
| 寧可少而乾淨 | 一分鐘乾淨語音,往往比十分鐘充滿背景聲的素材更實用 |
如果是自己錄音,使用安靜空間、固定麥克風距離錄製,會比事後進行重度降噪更可靠。
安裝 GPT-SoVITS 完成後,啟動 Web-UI 會出現以下畫面:
啟動位置:http://localhost:9874/
選擇 開啟人聲分離WebUI
這時 CMD 會出現提示 WEBUI 位置
http://localhost:9873/
然後在瀏覽器開啟後,有以下畫面:
如下圖,依序操作,預期會分離出 人聲 與 背景聲 :
| 1. 上傳檔案 | 將自己準備的聲音檔案上傳 |
| 2. 輸出人聲、背景 | 選擇自己想的輸出位置,也可以預設如圖 |
| 3. 輸出聲檔格式 | 如果要清楚可以選擇 wav 但是檔案會非常大,依照所需選擇 |
| 4. 轉換 | 上述 3 項準備完成後,點擊執行 |
分離完成後會出現 2 個檔案 (聲音檔案越大執行越久)
instrument_您的聲音檔案名稱.wav : 這是背景聲
vocal_您的聲音檔案名稱.wav : 這是人聲
後續我們都用這個人聲進行 SoVITS + GPT 訓練,目標取得此聲音的訓練模型
將第二部分 Step 5. 獲得的 人聲 檔案,放在自己本機的目錄下,例如我將檔案放在此目錄下:
G:\GPT-SoVITS\Test_Vocal_Remove_BackGround\vocal_test_vocal.mp3_10.wav
接著要進行聲音檔案切割,依序執行:
| 1. 回到初始啟動的 WebUI | http://localhost:9874/ |
| 2. 分割的聲音檔案路徑配置 | 將 Step 1. 的聲音檔案目錄準備好,建議只保留要分割的檔案 |
| 預設路徑 output/slicer_opt | |
| 3. 開啟語音切分 | 開始進行切分 |
※裡面的參數可以保留預設,具體用途上面都有說明,就跳過解釋。
執行完成後,會在 CMD 出現 執行完畢,請檢察輸出文件 訊息
檢查輸出結果,會觀察到原始的音檔,已經被切割小音檔,這是為了便於後續訓練使用,預設路徑:
output/slicer_opt
接著要進行聲音識別,依序填入設定,然後執行:
| 1. 輸入文件路徑 | 對應上一部的 output/slicer_opt |
| 2. 輸出文件路徑 | 預設 : output/asr_opt |
| 3. ASR 模型 | 自動語音辨識選擇中文 (依照音檔性質,非中文選另一個) |
| 4. ASR 語言 | 依照聲音的內容來選擇對應 |
ASR (Automatic Speech Recognition) 補充:
ASR 的工作只是產生「初稿」,不能直接把結果送進訓練。以下內容特別容易辨識錯誤:
人名、地名、品牌名稱
英文縮寫與中英夾雜
數字、日期、單位
同音字與口語省略
語助詞、重複字與結巴
背景聲仍然明顯的片段

辨識完成後,會產生副檔名 .list 標注檔案,並如下提示: ASR任務完成
檔案位置:
output/asr_opt/slicer_opt.list
接著要進行聲音校準,依序填入設定,然後啟動:
| 1. 標注文件路徑 | 上一部驟 .list 檔案生成位置: output/asr_opt/slicer_opt.list |
| 2. 開啟音頻標注 WebUI | 點即啟動 |
以下是 .list 標注檔補充說明:官方資料集格式如下:
音訊路徑|說話者名稱|語言|文字
範例:
您的切割的聲音檔案輸出路徑/output/slicer_opt/xxxx.wav|speaker01|zh|大家好,今天要測試語音生成。
您的切割的聲音檔案輸出路徑/output/slicer_opt/xxxx.wav|speaker01|zh|這一句是第二段訓練資料。
...
...
...
...以下略
這時 CMD 會出現提示 WEBUI 位置(本篇範例提供的位置,每次可能不同):
開啟瀏覽器訪問
http://localhost:9871/
文本對準是整個流程中最花時間、也最不能省略的步驟。
模型會把「聽到的聲音」與「你提供的文字」當成正確答案;錯一個字,就等於主動提供錯誤教材。
| 1. Text | 是 AI 辨識出的理解,會有 Text0 ~ TextXXX 請全部校正 |
| 2. 聲音撥放 | 對應 Text |
| 3. Save File | 確認所有的 Text0 ~ TextXXX 後,進行保存 |
當校準完畢後可以將啟動的 WebUI 關閉,如下點擊
然後 CMD 就會提示: 音頻標注WebUI進程已終止
回到 WebUI 最上方,這次選擇 1-GPT-SoVITS-TTS 分頁頁籤
然後在 實驗/模型名 輸入自己定義的名稱,以後如果要重複利用這個名稱便於辨識用
Test_Vocal
往 WebUI 下方移動,接著要訓練格式化,將音訊與文字轉換成模型需要的特徵
如果前面步驟都有正確執行,那麼會是對應以下路徑:
| 文本標注文件 | output/asr_opt/slicer_opt.list |
| 訓練集音頻文件目錄 | 您的切割的聲音檔案輸出路徑/output/slicer_opt/ |
接著往下點擊 開啟訓練集格式化一鍵三連
※就是把上面的 文本分詞與特徵提取 , 語音自監督特徵提取 , 語意Token提取 依序執行的整合按鈕
這個階段會需要一點時間,直到出現提示: 訓練集格式化一鍵三連已完成
SoVITS 訓練主要影響 音色與聲音 還原,以下是參數說明:
| 參數 | 說明 |
|---|---|
| Batch Size | 顯存不足時先降低 |
| Epoch | 並非越高越好,需透過不同檢查點試聽 |
| 儲存頻率 | 保留中間權重,方便比較 |
| GPU | 依照自己的顯示卡編號設定 |
| FP16 | 依硬體支援與穩定性決定 |
初次使用時,可以使用預設值,後續生成不滿意,可以再依照上面的參數說明進行調整
如圖,依序選擇,最終進行: SoVITS訓練
此階段是考驗 GPU 算力的過程,會執行一段時間來訓練模型,如果出現 CUDA Out of Memory
可先降低 Batch Size、關閉其他占用顯存的程式,再重新執行。
訓練完成後 CMD 會提示 training done
再往下移動些,進行 GPT 訓練
GPT訓練主要影響 文字到語音語意的預測 ,資料量太少、文字錯誤或句型過度單一,都可能影響生成時的節奏與咬字。
| 參數 | 說明 |
|---|---|
| Batch Size | 依顯存狀況自行調整 |
| 總訓練輪數 Epoch | 建議選擇預設值 |
| 儲存頻率 | 避免只留下最後一版 |
訓練完成後,將輸出的 .pth 與 .ckpt 依照相同實驗名稱保存。
點擊執行: 開啟GPT訓練
執行時間相對比較快,主要用到 CPU 與記憶體,不容易出現 VRAM 不足的問題
訓練完成後 CMD 會提示 training done
這時要將剛剛訓練好的 GPT 與 SoVITS 的模型做參數設定,如下圖,進入 1C推理 分頁籤
然後將模型進行下拉是選單的選擇:
GPT 模型列表:GPT_weights_v2Pro/Test_Vocal-e15.ckpt
SoVITS模型列表:SovITS_weights_v2Pro/Test_Vocal_e8_s120.pth
然後點擊執行: 開啟TTS推理WebUI
開啟後, CMD 會提示開啟的 WebUI ,開啟瀏覽器訪問:
http://localhost:9872/
然後選擇 1 個剛剛分割的音檔 (3~10秒間)
※補充:如果照前面的範例操作應可在 /output/slicer_opt 中,有切割檔案
然後依照上傳的分割聲音檔,手動填入對應的文本
最後到下方依序進行填入:
| 1. 需要合成的文本 | 填上想要聲音合成後說出的內容 |
| 2. 合成的語種 | 依照 GPT 與 SoVITS 的語系填上 |
| 3. 合成語音 | 點擊後依照文本,生成語音 |
文本來源,聯合新聞網(2026-07-25 17:09 聯合報):https://udn.com/news/story/7266/9650741
中東戰事擴大,紅海危機升溫,國際油價飆漲,中油25日宣布27日凌晨零時起調漲國內油價,汽油、柴油價格每公升各調漲0.7元及0.5元。
這是中油自4月凍漲以來首次調漲國內汽柴油售價。
生成後,可以進行撥放合成的音檔,並且可以點擊 ↓ 下載這份合成後的音檔
因為聲音有授權的問題,因此後續有用 公有領域數據集 的可安全商用、免版權費的公開音檔來源,進行合成聲音
中東戰事擴大,紅海危機升溫,國際油價飆漲,中油25日宣布27日凌晨零時起調漲國內油價,汽油、柴油價格每公升各調漲0.7元及0.5元。
這是中油自4月凍漲以來首次調漲國內汽柴油售價。
若無法從網頁撥放可以點擊下載
可能訓練生成語音的結果相似度低,這時不一定代表模型架構或訓練參數有問題。
建議依照「資料 → 標註 → 參考音訊 → 模型 → 推理參數」的順序排查。
| 問題 | 可能原因 | 優先處理方式 |
|---|---|---|
| 音色不像 | 資料太少、多人混音、參考音訊不佳 | 補充乾淨且單一說話者的素材 |
| 咬字錯誤 | ASR 標註錯、罕見字或中英混合 | 修正 .list,推理文字加入合理標點 |
| 聲音忽高忽低 | 訓練資料音量差異過大 | 重新整理資料並溫和正規化 |
| 金屬感明顯 | 原始音訊有壓縮失真或過度降噪 | 換用較乾淨的原始素材 |
| 長句音色漂移 | 單次輸入過長或切句方式不合適 | 將內容拆成較短、語意完整的句子 |
| 語氣太平 | 訓練與參考音訊情緒單一 | 準備有授權且品質一致的情緒資料 |
| 訓練後反而變差 | 過度訓練或資料品質不一 | 比較較早 Epoch,重新清理資料 |
以上方向是優化的考量方案
官方主打 5 秒零樣本與約 1 分鐘少樣本微調,但「一分鐘」不是保證品質的魔法數字。
關鍵:資料品質、發音涵蓋、錄音一致性與使用情境,通常比單純累積分鐘數更重要。
可以用下列方式逐步實驗:
| 階段 | 資料策略 | 目標 |
|---|---|---|
| 快速驗證 | 5~10 秒乾淨參考音訊 | 確認零樣本效果與環境是否正常 |
| 第一版微調 | 約 1~3 分鐘高品質語音 | 確認音色是否明顯提升 |
| 品質強化 | 增加發音多樣、情緒一致的素材 | 改善罕見讀音與長句穩定性 |
| 情緒版本 | 將平穩、開心、嚴肅等資料分組 | 比較單模型與分開訓練的差異 |
不要將大量低品質資料直接混入既有資料集。每增加一批素材,都應保留版本並使用相同測試句進行 A/B 比較。
v2 支援中文、英文、日文、韓文與粵語,也能嘗試跨語言生成,但支援不等於每個人物、每句內容都會自然。
當目標人物的訓練資料完全沒有某種語言時,生成結果可能保留音色,卻帶有不自然的口音或節奏。
中文還會遇到多音字、數字與符號正規化問題,例如:
「銀行」與「行走」的「行」
「重新」與「重量」的「重」
2026、8/22、3.14、RTX 5070 等數字與符號
GPT-SoVITS、CUDA、AI 等英文縮寫
使用時不能 100% 保證生成自然
語音資料屬於高度個人化的生物特徵。即使某段影片可以公開觀看,也不代表可以任意下載、訓練並用該人物的聲音生成新內容。
| 發布前檢查 | 說明 |
|---|---|
| 是否取得授權 | 明確確認資料、訓練、生成與發布的允許範圍 |
| 是否清楚揭露 | 對外發布時標示為 AI 合成或模擬語音 |
| 是否可能造成誤認 | 不讓觀眾誤以為是真人發言、代言或承諾 |
| 是否含敏感內容 | 不生成詐騙、政治誤導、冒充、騷擾與未授權成人內容 |
| 是否可要求刪除 | 保存資料來源與模型版本,建立撤回授權後的刪除流程 |
| 是否需要保護模型 | 不隨意公開可直接冒用他人的權重與高品質參考音訊 |
最安全的實作方式,是只訓練自己的聲音,或使用 公有領域數據集 開放授權使用的聲音資料。
尋求安全並開放授權的聲音檔案,是 後續我們要分享的文章。