跳到主要內容

【2026 最新】AuK 語音編輯怎麼做?本機 TTS、改字與聲線保留 6 步教學

最後更新: ·
AuK 語音編輯教學首圖,呈現改字不必重錄與 Base Flash A/B 主題

AuK 語音編輯最吸引人的地方,不是把整段話重新念一次,而是你能否只把「下午三點」換成「下午四點」,同時讓前後語氣、聲線與環境保持自然。真正的驗收句只有一條:局部編輯可信度=該改的改對+不該改的沒飄

這篇會帶你用一段本人錄製或已取得明確授權的短語音,完成 zero-shot TTS、內容改字與情緒編輯,再以相同素材做 AuK Base/AuK-Flash 成對 A/B 對照。你會得到可交付 WAV、18 個輸出檔的命名規則,以及一張把轉錄、局部保留、聲線與盲聽分開判分的工作表。

本文依 AuK 官方程式庫原始論文AuK-Flash 模型卡核對到 2026 年 9 月 11 日。它不替你的硬體宣布 Base 或 Flash 勝負,也不提供 AlphaLab 自跑分數;重點是讓你在自己的設備、聲音與用途上,產出可以重跑的答案。

先說結論:先用 Flash 迭代,再讓驗收表決定成品

  • AuK-Flash 是速度選項,不是自動的品質冠軍:官方固定用 4 次 function evaluation(NFE,直覺上就是生成器修正答案的步數)且關閉 CFG;Base 預設 32 NFE、CFG 2.0。
  • 4.5× 是條件式結果:論文只在相同硬體、輸出長度與 batch size 下比較 wall-clock;它不是每張顯卡的承諾,更不是 8× 或必然即時。
  • 三種任務要分開驗收:TTS 念對不等於改字局部,改字成功也不等於情緒自然。每一格都要獨立通過。
  • 聲音與依賴授權都是 hard gate:沒有可追溯的本人同意就不生成;AuK 自身採 MIT,但目前必要的 Qwen2.5-Omni-3B 另採 Research License,只授權非商業研究/評估用途,商業使用要另向 Alibaba Cloud 申請。

AuK 語音編輯是什麼?先分清「1.5B」和整套環境

AuK 是上海交通大學、騰訊混元與上海創新研究院團隊釋出的語音生成、編輯基礎模型。它把自然語言指令與選用的參考音訊送進同一個介面,再輸出 24 kHz 單聲道 WAV;同一套命令可切換 TTS、內容、韻律、情緒、音色、增強與分離任務。對新手來說,可以把它想成「同一間錄音室,共用一張指令單」,而不是每個功能各裝一套工具。

但「1.5B」只指 AuK 的 Transformer 主幹,不是整個本機堆疊。執行時還會載入 AuK-VAE(把波形壓成模型能處理的表示)與 Qwen2.5-Omni-3B encoder。按 2026 年 9 月 11 日上述 pinned Hugging Face 檔案計,單一 AuK 版本(含其 VAE)加 Qwen repo 約 18.75 GB;Base、Flash 與共用 Qwen 三個 repo 全下載約 25.51 GB(十進位),尚未計入 Python 套件、快取與輸出。換句話說,參數名稱很小巧,不代表磁碟與記憶體需求只看 1.5B。

AuK 本機語音 A/B 流程:授權音源、成對生成、轉錄與局部檢查、盲聽、輸出 WAV
先鎖定同一份輸入與驗收條件,再比較 Base/Flash;速度只能在內容、局部與聲線 hard gates 通過後當決勝項。

AuK 語音編輯安裝:先做硬體與磁碟 preflight

痛點:下載完才發現環境不合,是最昂貴的第一個錯誤。解法是先記錄環境卡:至少留下作業系統、GPU、顯存、驅動、Python、PyTorch、可用磁碟與 AuK commit。官方目前的套件設定要求 Python 3.10 以上、PyTorch 2.7.x,範例主要使用 CUDA;不要從別人的單次成功反推你的最低顯存。

python3 --version
nvidia-smi
df -h .

git clone https://github.com/Tencent-Hunyuan/AuK
cd AuK
git checkout bc84b758c7566dfce9bef0c49fba443456093b40

uv venv --python 3.10
source .venv/bin/activate
uv pip install -e .
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"

這裡固定 commit,是為了讓下方命令與你看到的程式一致,不代表該版本永遠最新。若只想先驗證流程,下載 Flash 與共用 encoder;確定能完成一個 WAV 後,再補 Base。要做完整 A/B 才需要兩個版本:

uv pip install -U "huggingface_hub[cli]"

hf download tencent/AuK-Flash \
  --revision 575b92f0895f75180bf2cbd35f2e176c5732b8ed \
  --local-dir ./ckpts/AuK-Flash
hf download Qwen/Qwen2.5-Omni-3B \
  --revision f75b40e3da2003cdd6e1829b1f420ca70797c34e \
  --local-dir ./ckpts/Qwen2.5-Omni-3B

# 完成第一個輸出後,再下載 Base 做成對比較
hf download tencent/AuK \
  --revision 790742b71a4430120daf2b2099192abae449eb9f \
  --local-dir ./ckpts/AuK
du -sh ckpts/*

若命令找不到 auk-infer,先確認終端機仍在 .venv,再跑 which auk-infer;若 PyTorch 或 CUDA 報錯,回到官方要求的 2.7.x 相容組合,不要直接沿用另一個專案的舊環境。想把語音模型包成固定本機 API,可延伸閱讀 NeMo Speech C++ 本機語音 API 教學,但先讓單一 CLI 輸出成功。

步驟 1:建立有授權、能看出局部飄移的固定測例

痛點:一句太短的「你好」看不出改字前後是否飄掉。解法是三段式腳本:錄一段約 8 秒、安靜、單一說話人的 WAV,例如「今天的展覽在下午三點開始,請在大廳左側等我。結束後一起喝杯咖啡。」把「下午三點」設為編輯區,前後句就是未編輯護欄。另錄一段不同文字、同一說話人的參考音,供 TTS 使用。

  • 同意紀錄:說話人、同意日期、允許用途、可分享對象、到期/撤回方式、原始檔刪除日。
  • 固定輸入:test/source.wavtest/reference.wav、逐字稿與 SHA-256;A、B 不得使用不同錄音。
  • 先寫成功條件:目標必須變成「下午四點」、其他文字不變、聲線可辨認、接縫無突跳;先寫再聽,才不會為喜歡的版本改規則。
mkdir -p test outputs
shasum -a 256 test/source.wav test/reference.wav > test/input-sha256.txt
ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 test/source.wav

步驟 2:用同一素材跑 TTS、改字與情緒編輯

2.1 Zero-shot TTS:先看文字與聲線能否同時過關

解法:Base 與 Flash 使用相同參考音、目標文字、長度與 seed,只改 checkpoint。下例的 8.0 要換成你事先固定的目標秒數;太短會截斷,太長可能留下不自然尾音。

auk-infer \
  --ckpt ckpts/AuK/auk_base.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/reference.wav \
  --instruction "Say the following with the same voice: '今天的展覽在下午四點開始,請在大廳左側等我。'" \
  --gen_seconds 8.0 --seed 20260911 \
  --output outputs/base-tts-s1.wav

auk-infer \
  --ckpt ckpts/AuK-Flash/auk_flash.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/reference.wav \
  --instruction "Say the following with the same voice: '今天的展覽在下午四點開始,請在大廳左側等我。'" \
  --gen_seconds 8.0 --seed 20260911 \
  --output outputs/flash-tts-s1.wav

2.2 內容改字:把一句話當成兩側有護欄的補丁

解法:要求精確替換,不要只寫「修正時間」。AuK 會生成完整輸出 WAV;它不是在原檔上做位元組級剪貼,所以「指令只改一處」不等於其他取樣點完全相同。這也正是後面要切未編輯區檢查的原因。

# Base:預設 32 NFE、CFG 2.0
auk-infer --ckpt ckpts/AuK/auk_base.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/source.wav \
  --instruction "把『下午三點』改成『下午四點』。" \
  --gen_seconds 8.0 --seed 20260911 \
  --output outputs/base-content-s1.wav

# Flash:模型設定鎖定 4 NFE、CFG 0
auk-infer --ckpt ckpts/AuK-Flash/auk_flash.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/source.wav \
  --instruction "把『下午三點』改成『下午四點』。" \
  --gen_seconds 8.0 --seed 20260911 \
  --output outputs/flash-content-s1.wav

2.3 情緒編輯:能執行不等於已可靠

解法:內容與長度保持不變,只下單一情緒指令。官方 cookbook 把這類任務定義為等長輸出,因此不必指定 gen_seconds。但 官方論文的 SpeechEditBench 情緒子集 joint-success 率只有 Base 9.94%、Flash 6.29%;這是開發團隊在該 benchmark 報告的特定自動化評估,不是人類自然度分數,卻足以提醒你:情緒一定要盲聽,不能因檔案成功輸出就勾選通過。

auk-infer --ckpt ckpts/AuK/auk_base.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/source.wav \
  --instruction "Change the emotion to happy." \
  --seed 20260911 --output outputs/base-emotion-s1.wav

auk-infer --ckpt ckpts/AuK-Flash/auk_flash.safetensors \
  --qwen_path ckpts/Qwen2.5-Omni-3B \
  --audio test/source.wav \
  --instruction "Change the emotion to happy." \
  --seed 20260911 --output outputs/flash-emotion-s1.wav
AuK Base 與 AuK-Flash 比較卡,列出固定推理設定、官方速度條件與適合使用階段
Flash 把推理步數從 32 固定到 4,但官方報告的是相同條件下 4.5× wall-clock;實際選擇仍要回到你的成對輸出。

步驟 3:把一次示範擴成 18 個可比較 WAV

痛點:生成模型有隨機性,只聽一個檔很容易把運氣當版本差異。解法是 paired seeds:三種任務 × 兩個版本 × 三個 seed,共 18 個輸出;每一對使用相同 seed,例如 202609112026091220260913。檔名固定為 {variant}-{task}-{seed}.wav,每次同時記錄命令、commit、GPU、耗時與錯誤。

CLI 每次都重新載入模型,因此 /usr/bin/time -p 得到的是「載入+生成」的冷啟動時間,適合回答使用者等多久;若要對照論文的純生成速度,改用 Python API 或長駐服務只載入一次,並把 warm-up 與正式輪次分開。兩種時間都能報,但不能混成同一欄。若你的終點是影片配音,可把通過驗收的 WAV 接到 VoiceStudio 本機影片配音流程,不要在測試階段就混入影像壓縮與對嘴誤差。

步驟 4:四層驗收 AuK 語音編輯,不用「聽起來不錯」收工

  1. 內容正確:用同一個本機 ASR 版本轉錄全部輸出,中文字統一全半形、標點與空白後算 CER(字元錯誤率)。目標片語錯一字就是 hard fail;不能用全句平均把錯誤藏掉。
  2. 未編輯區正確:把編輯區前後逐字稿分開算 CER。這能回答「其他字有沒有被改」,但不能證明波形、呼吸或背景完全相同。
  3. 局部聲學保留:先以共同語音錨點做時間對齊,再切出前後未編輯片段,比較 loudness、log-mel 差異與接縫波形。原始波形對微小位移很敏感,所以不設跨裝置通用門檻;用同一音源、同一切點比較 Base/Flash,並保存圖與數值。
  4. 聲線與盲聽:把檔名隨機改成 A/B,請至少一位沒有看到版本名稱的人分別回答「像同一人嗎、改字自然嗎、情緒有辨識度嗎、接縫突兀嗎」。speaker embedding cosine 只能當輔助,門檻應先用同一說話人的多段真人錄音與其他說話人錄音校準,不能把單一公開 cutoff 當身分證。

可把結果寫成 CSV:variant,task,seed,cold_seconds,target_cer,untouched_cer,locality_delta,speaker_score,blind_preference,hard_gate,notes。先判 hard gate,再看速度和偏好;任何一個版本只要改錯文字、洩漏未授權聲音或讓未編輯內容變掉,就算比較快也不能交付。若想建立更完整的語音 Agent 評估框架,可參考 Voice Agent 四層 Eval 教學

AuK Base 與 Flash A/B 驗收表,分為內容正確、局部保留、聲線一致、盲聽與交付 hard gate
先判內容、授權與局部保留 hard gates,再比較速度;一個總分無法補救錯字或未授權聲音。

步驟 5:Base 還是 Flash?用決策樹,不用品牌直覺

  • 先選 Flash:你正在找 prompt、長度或素材問題,需要快速淘汰明顯失敗,而且 Flash 在三個 seed 都通過內容與局部 hard gates。
  • 把 Base 當成品基準:工作是精確改字、情緒或接縫品質,願意用較長時間換取候選;官方論文多個編輯指標中 Base 較強,但不代表它對你的聲音必勝。
  • 兩者都失敗:不要挑「比較沒那麼糟」的檔案。先縮短指令、用官方 canonical template、校正 gen_seconds、換成更乾淨的單人音源,再重跑成對 seed。
  • 兩者都通過:才讓 wall-clock、檔案自然度與多數盲聽偏好決定。這時 Flash 的速度才是可用優勢。

第三方 SGLang-Omni AuK cookbook已提供伺服器整合與 TTS 路徑,但其 合併紀錄明確說當時只評估 TTS、未評估編輯。因此那些 TTS 吞吐或 WER 數字不能替本文的 edit locality 與 speaker fidelity 作答。不同 runtime、commit、GPU 與任務的 benchmark 也不能直接混比。

步驟 6:匯出可交付 WAV,附上同意與合成標示

痛點:音檔本身看不出由誰同意、用哪個版本生成。解法是交付包:保留最終 WAV、輸入 hash、AuK/模型 revision、完整命令、A/B 工作表、說話人同意紀錄與「此音訊含 AI 生成/編輯」標示。公開發布只帶必要成品與標示;原始人聲依事先約定的期限刪除,撤回時也同步移除可識別的衍生檔。

授權要沿整條依賴鏈檢查。AuK 的 MIT 條款涵蓋騰訊釋出的程式、參數與權重,但目前執行必需的 Qwen2.5-Omni-3B Research License只授權非商業研究/評估,並要求商業使用者另行申請;兩者也都不是某位說話人的授權書。因此這套流程可先用於有同意的非商業評估,商業交件要先補齊 Qwen 授權與聲音權利。若要繼續做人物對嘴,先閱讀 AI 數位人與 Talking Head 流程;若素材含音樂與人聲混軌,先用 StemDeck 本機拆軌教學取得乾淨人聲,再進入 AuK,避免把伴奏變化誤判成聲線飄移。

2026 年 9 月版本提醒:三個最容易踩的坑

  • Flash 不是更小的 checkpoint:目前 Base 與 Flash 的主權重檔都約 6.12 GB;Flash 的差別是蒸餾後固定四步推理,不是把下載縮成四分之一。
  • 自由描述不一定由核心模型穩定理解:論文明確把 unrestricted edit request 的 native generalization 列為限制,官方 Prompt Enhancer 會另接 OpenAI-compatible LLM 與 ASR 來整理指令。本文刻意使用官方模板,不啟用 PE;若你啟用它,指令與 ASR 逐字稿會送到設定的 LLM endpoint,選用騰訊雲 ASR 時音訊也會送往該服務。
  • 來源仍在快速變動:git rev-parse HEAD、Hugging Face revision 與日期寫進 manifest。未來更新套件前先另開環境,舊成品不要覆寫,才能知道差異來自模型還是環境。

FAQ:AuK 本機 TTS 與語音編輯 8 個直球答案

1. 一般筆電一定跑得動 AuK 嗎?

不一定。1.5B 只描述主幹,完整執行還有 VAE 與 Qwen encoder;先看可用磁碟、PyTorch/CUDA 相容性和自己的顯存,不引用別人的單次配置當最低規格。

2. 使用 AuK 一定要外部 API 嗎?

核心 canonical CLI 不一定。本文的固定模板直接送給本機模型;但官方 Prompt Enhancer 需要 OpenAI-compatible LLM endpoint,ASR 也有雲端或本機路徑。啟用 PE 前要重新確認資料流,不能把整條鏈一概稱為離線。

3. 參考音一放進去,就能完全保留聲線嗎?

不能保證。論文的 speaker similarity 是模型 embedding 指標,不等於真人盲聽或法律上的身分判定。至少要比較同一說話人的多段參考音、未編輯片段與盲聽結果。

4. AuK-Flash 是不是比 Base 快 8 倍?

不是官方結論。步數從 32 到 4 不等於 wall-clock 必然除以八;官方論文在相同硬體、輸出長度與 batch size 下報告 4.5×,你的載入、encoder、VAE 與 I/O 仍會佔時間。

5. 只改一個詞,其他波形會原封不動嗎?

不要這樣假設。AuK 輸出的是重新生成的完整 WAV,不是把新詞位元組貼回原檔。要先時間對齊,再分別檢查未編輯文字、聲學片段與接縫。

6. 情緒編輯可以直接拿來交件嗎?

不應跳過盲聽。官方提供情緒命令,但其論文同時顯示這項任務的 joint-success 分數偏低。先讓不知道版本的人判斷情緒與聲線,再決定是否交付。

7. AuK 採 MIT,就能直接商用或複製任何人的聲音嗎?

不能直接這樣推論。AuK 本身是 MIT,但目前必要的 Qwen2.5-Omni-3B 是限非商業研究/評估的 Research License;商業使用要另行申請。模型授權、錄音著作權與說話人同意仍是不同欄位,只使用本人聲音或有明確授權的素材。

8. 最終 WAV 要附什麼才算可交付?

至少附三類資料。成品與「AI 生成/編輯」標示、可重跑的版本/命令 manifest,以及同意與保存紀錄。內部再留 A/B 驗收表;公開端只暴露必要資訊。

給新手的 5 個重點

  1. 把「局部編輯可信度=該改的改對+不該改的沒飄」寫在工作表最上方。
  2. 先下載 Flash 打通一個輸出,再為 A/B 補 Base,避免一次下載兩套才除錯。
  3. 三個任務、兩個版本、三個 seed 分開比較;不要拿一次好運當結論。
  4. 內容、未編輯區、聲線與盲聽是四張成績單,速度只能在 hard gates 後決勝。
  5. 同意、合成標示與原始樣本刪除流程和 WAV 一起交付。

接著閱讀

左右滑動查看更多推薦

下一步:先做一對,不要先做十八個

現在先拿一段有授權的 8 秒音檔,以同一 seed 跑 Base/Flash 內容替換各一次。若「下午四點」正確、前後句沒飄、聲線與接縫都過關,再擴成 18 檔矩陣;第一對就失敗時,修素材、秒數或官方模板,比堆更多輸出有價值。

成品要接影片,可回到 AI 創作與設計找完整工作流;想從基礎工具一路練習,也可查看 AlphaLab 線上課程。最終不要只交一個「聽起來像」的 WAV,而要交一個知道改了哪裡、保留了什麼、由誰同意的 WAV。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週最多三封:一封 Weekly 週報與最多兩封關鍵 Alpha Signal。

我們不會 spam,隨時可退訂。