Community程式設計與開發github.com

TAS — 文字與語音雙向處理 (Speakee API)

將文字轉換為語音(TTS)並將音頻/影片轉錄回文字與字幕(STT)。一個技能實現雙向語音處理。

TAS — 文字與語音雙向處理 (Speakee API) 是什麼?

TAS 是一個通用的 AI 助手技能,用於雙向語音處理:文字轉語音(TTS)和語音轉文字(STT)。它利用 Speakee API,透過一個捆綁的 Python 腳本提供高效能、多語言的語音合成和轉錄功能。此技能支援 40 多種語言、100 多種語音,並可透過 `uid` 模式使用自訂語音。TTS 模式包含多講者對話合成、長文本自動分段和 ffmpeg 拼接功能。STT 模式可自動將長錄音分段(預設 120 秒),並生成 SRT 和 WebVTT 字幕。關鍵規範包括:禁止安裝任何本地模型(無 Whisper、無 PyTorch)、自動執行語音品質檢查(QA),並在傳遞結果前要求驗證。此技能設計與 OpenCode、Claude Code 和 `skills` CLI 相容,使用快取以加快重複執行速度。

相容平台✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/nayem-48ai/TAS/tree/HEAD/skills/tas

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

TAS — 文字與語音雙向處理 (Speakee API) 是做什麼的?

一個腳本搞定雙向處理:

  • 文字 → 語音 (TTS): 40+ 種語言、100+ 種語音、自訂語音 UID、 長文字自動分段、多講者對話模式、ffmpeg 拼接、音訊品質檢查。
  • 音訊 → 文字 (STT): 將任何音訊/影片檔案轉錄為文字、逐字 時間戳記,以及 SRT/WebVTT 字幕,自動對長錄音進行分段。

所有功能均由捆綁腳本完成 — 請勿重複實作且請勿安裝任何套件(無 Whisper、無 torch、無 faster-whisper、無 pip):

<skill base dir>/scripts/tas.py

常見安裝位置: ~/.config/opencode/skills/tas/scripts/tas.py (opencode)、 ~/.claude/skills/tas/scripts/tas.py (Claude Code),以及 ~/.agents/skills/tas/scripts/tas.py (使用 skills CLI,npx skills add)。 此技能名稱為 tas — 使用名稱 tas 載入它,切勿使用 tts。

不可協商的規則(適用於每個請求)

  1. 使用捆綁腳本。 不要自行編寫 curl/python 程式碼片段來做 TTS 或 STT。
  2. 絕對不要安裝任何套件。 不要執行 pip install faster-whisper、pip install whisper、pip install torch,或下載任何模型。此腳本完全透過 Speakee API 搭配 Python 標準函式庫進行 STT — 無需本地模型、無需本地下載、無需 pip。
  3. 傳遞前務必驗證。 tts 和 conversation 會自動執行音訊 QA;QA: FAIL 必須修正,不可直接交付。
  4. 回報結果:最終路徑、時長、大小和 QA 狀態(TTS);最終 SRT/VTT/文字路徑和字幕數量(STT)。
  5. 始終進行預檢查。 語言、模型和語音在發送任何請求前都會驗證;切勿使用猜測的語音。
  6. 保持快取開啟,除非使用者要求關閉。這可以讓重複執行變快,並能恢復失敗的對話。
  7. 切勿猜測語音名稱。 使用 voices / suggest 解析,或直接傳遞 UUID。
  8. 尊重免費 API:預設 --workers 4;遇到 HTTP 429 時降低並行數。
  9. 讓腳本自行正規化文字。 預設會移除 Markdown、網址、HTML 和表情符號;僅在使用者想要字面文字時使用 --raw。
  10. 切勿預先分割長文字。 腳本會以句子邊界自動分段和合併。
  11. STT 時只要有已知語言就務必傳入 -l <code>。自動偵測不可靠(Whisper 會混淆孟加拉語/古吉拉特語);正確的孟加拉語需要 -l bn。
  12. 當其他工具或腳本需要解析結果時,請使用 --json。

命令

命令用途
tts合成一段文字 (TTS)
uid使用自訂語音 UID 進行合成 (language=uid)
conversation多講者對話 → 一個拼接並驗證過的 MP3
stt轉錄音訊/影片檔案 → 文字(可選 SRT/VTT)
transcribestt 的別名
subtitle轉錄並生成 SRT 字幕
verify對任何檔案執行音訊 QA
voices -l <code>列出某語言的可用語音
suggest -l <code>列出語音並標示推薦
presets列出內建語音預設集
languages列出支援的語言
models列出模型(預設 sonic-3.5)
cache-clear清除合成快取

工作流程 A — 文字轉語音 (TTS)

步驟 1 — 範圍界定

確定:語言(或讓自動偵測工作)、語氣(新聞 / 故事 / 助理 / 有聲書)、單一講者或對話、期望的輸出路徑,以及是否需要字幕(--srt)或中繼資料(--title/--artist)。

步驟 2 — 選擇語言和語音

python3 "$S" languages                 # 43 種語言代碼
python3 "$S" suggest -l bn             # 優先顯示推薦語音
python3 "$S" presets                   # 精選語音集

如果使用者有自訂語音 UID,請使用 uid 模式。否則優先選擇預設集或推薦語音。

步驟 3 — 合成

單一講者:

python3 "$S" tts "您的文字" -l bn -o out.mp3
python3 "$S" tts --text-file article.md -l en --preset news -o article.mp3

對話:

python3 "$S" conversation dialog.txt -l bn \
  --map "人=Nayem,AI=Pooja - Everyday Assistant" \
  --loudnorm --srt dialog.srt -o dialog.mp3

對於耗時或昂貴的執行,請先使用 --dry-run。

步驟 4 — 驗證

QA 會自動執行。要重新檢查任何檔案:

python3 "$S" verify out.mp3

檢查項目:解碼、時長、整合音量 (ebur128)、真實峰值/削波、以及開頭/結尾/內部靜音。退出碼 5 表示失敗。

步驟 5 — 交付

回報範例:

out.mp3 — 2.8s, 0.04 MB, QA PASS (-18.9 LUFS, peak -4.2 dBFS)

除非被要求,否則不要貼出原始 JSON。

步驟 6 — 重複使用

重複執行會命中快取 (~/.cache/speakee-tas)。使用 --force 重新生成,使用 cache-clear 清除。


工作流程 B — 語音轉文字 (STT)

當使用者有音訊或影片檔案並想要逐字稿、字幕或 SRT 時使用。請勿安裝 Whisper — 捆綁腳本會直接呼叫 Speakee /api/stt 端點。

步驟 1 — 確認檔案

python3 "$S" verify /path/to/audio.mp3   # 可選:確認其可解碼
ls -la /path/to/audio.mp3

步驟 2 — 選擇語言

# 自動偵測(不可靠 — Whisper 會混淆孟加拉語/古吉拉特語):
python3 "$S" stt audio.mp3

# 已知語言時,請務必優先使用明確指定:
python3 "$S" stt audio.mp3 -l bn

重要: 傳入 -l <code> 以指定正確的書寫系統。孟加拉語請使用 -l bn;對孟加拉語音訊,自動偵測會回傳古吉拉特語。低置信度 (< 0.5) 的警告表示偵測到的語言可能錯誤。

步驟 3 — 轉錄 + 生成字幕

# 在輸入檔案旁生成 SRT + VTT,並儲存逐字稿:
python3 "$S" stt audio.mp3 -l bn \
  --srt --srt-path audio.srt --vtt --vtt-path audio.vtt \
  -o audio.txt

# 簡寫:僅生成 SRT(subtitle 命令):
python3 "$S" subtitle audio.mp3 -l bn -o audio.srt

# 機器可讀 JSON(供其他工具使用):
python3 "$S" stt audio.mp3 -l bn --json -o result.json

# 長錄音:自動分段約 120 秒;強制較小分段或一次上傳:
python3 "$S" stt audio.mp3 -l bn --chunk-seconds 60
python3 "$S" stt audio.mp3 -l bn --no-chunk     # 僅適用於小於 ~3.5 MB 的檔案

步驟 4 — 交付

回報範例:

audio.srt — 111 個字幕 (8.05 分鐘, 孟加拉語)
audio.txt — 逐字稿已儲存

STT 標記:--srt, --srt-path, --vtt, --vtt-path, --no-word-timestamps (更快,時間戳為估計值), --chunk-seconds, --no-chunk, --workers, --max-chars, --max-line-seconds。


對話模式 (TTS)

腳本格式,每行一個回合:

表演開始。                <- 無 "講者:" 前綴 -> 旁白語音
人:兄弟,2+2 等於多少?
AI:已收到您的提問。
  • 講者標籤是 : 前的簡短符記(≤16 個字元,無空格)。
  • 沒有 講者: 前綴的行由旁白/評論者使用。旁白透過特殊鍵 narrator 對映,因此第三個獨立語音是 --map "narrator=VoiceC,人=VoiceA,AI=VoiceB"。
  • --map "speaker=voice" 接受語音名稱(模糊)或 UUID。
  • 如果沒有 --map,會自動分配不同的語音。
  • 語音必須不同。 如果兩個講者解析到同一個語音,腳本會印出 WARNING;請將每個講者對映到不同的語音。始終為 AI 和人類分配不同的語音(如果存在評論者/旁白行,則為旁白分配第三個語音)。
  • --silence 0.35 回合之間的間隔;--loudnorm 將音量正規化至 −16 LUFS。
  • --manifest FILE 記錄每個片段;--srt FILE 寫入字幕。
  • --no-stitch 保留獨立片段檔案而不是一個 MP3。
  • --workers 控制並行請求(預設 4)。

常用選項

標記預設值說明
-l, --language自動偵測ISO 代碼或 uid
-m, --modelsonic-3.5sonic-3.5 / sonic-3 / sonic-turbo / sonic-2
-v, --voice_id預設語音名稱或 UUID
-o, --out自動輸出檔案/目錄 (--no-stitch)
-s, --speed1.20.5–2.0
--preset—news, story, assistant, audiobook
--chunk-limit1200每次請求的字元數
--retries4指數退避重試次數
--workers4並行請求數
--no-cache / --force關閉繞過快取 / 重新生成
--no-verify關閉跳過自動 QA(不建議)
--dry-run關閉印出計劃,不發送請求
--json關閉機器可讀輸出

STT 選項

標記預設值說明
-l, --languageautoISO 代碼(孟加拉語使用 bn)
--chunk-seconds120每次上傳的音訊秒數
--no-chunk關閉一次請求(最大 ~3.5 MB)
--workers2並行上傳數
--srt / --srt-path關閉寫入 SRT
--vtt / --vtt-path關閉寫入 WebVTT
--no-word-timestamps關閉更快;字幕時間為估計值
--max-chars42每則字幕的最大字元數
--max-line-seconds6.0每則字幕的最大秒數
--timeout / --retries300 / 3每請求超時 / 重試次數

快取與安全性

  • 片段會根據內容雜湊值快取在 ~/.cache/speakee-tas;重複執行和重試會自動繼續。
  • 暫存拼接檔案始終會被移除;--no-cache 的暫存目錄在退出時清理。
  • 回應會經過驗證(Content-Type: audio/* + MP3 標頭),因此錯誤 JSON 永遠不會被儲存為音訊。
  • HTTP 429 會遵循 Retry-After;5xx/逾時會以指數退避重試;永久性 4xx 會立即失敗並顯示伺服器訊息。
  • STT 完全在 Python 標準函式庫中進行處理 — 無需網路安裝、無需模型下載、無需 pip。
  • 退出碼:0 成功,1 錯誤,2 使用方式,3 驗證,4 網路/API,5 音訊 QA 失敗。

參考檔案

  • references/api.md — 端點、負載、驗證、重試、快取。
  • references/voices.md — 語言/語音目錄、UID 模式、預設集。
  • references/troubleshooting.md — 症狀、修正、常見失敗模式。
  • assets/presets.json — 精選語音預設集(可編輯以加入自己的設定)。

相關技能