ASR 已經夠用






今天試了一個很直接的場景:把一場 1 小時 19 分鐘的實體演講錄音,丟給代管的 qwen3-asr-flash 做逐字稿。
結果比我預期好。整場偶爾夾英文單字、現場沒有麥克風、前面還有人聲重疊,原始轉錄已經有九成五以上可以直接看。再過一次 LLM,把「嗯、呃、啊」、口吃、破碎句清掉,就變成一份很能用的講座逐字稿。
這篇分享的是:這次怎麼跑、它跟本機 whisper-large-v3-mlx 比起來差在哪裡,以及我現在會怎麼選。
所以我現在會這樣分:
| 需求 | 我會選 |
|---|---|
| 快速拿到可讀的逐字稿 | qwen3-asr-flash |
| 音檔不能上傳 | 本機 ASR + diarization |
| 需要語者分離 | 本機 ASR + diarization;或官方檔案轉寫模型(如 qwen-audio-3.0-asr-flash-filetrans) |
| 要大量處理公開素材 | 代管 ASR + LLM 後處理 |
先講結果
這次的音檔是:
- 長度:1:19:22
- 場景:實體活動錄音
- 內容:中文為主,穿插少量英文單字
- 收音:現場沒有麥克風,前段有人聲重疊
- 目標:產出可以後續整理、摘要、引用的逐字稿
我跑了兩條路:
| 路線 | 模型 | 跑在哪裡 | 輸出特色 |
|---|---|---|---|
| 代管 ASR | qwen3-asr-flash |
OpenAI-compatible gateway | 原始輸出可讀性高,沒有語者分離 |
| 本機 ASR + diarization | whisper-large-v3-mlx + senko |
M1 Pro Mac | 有語者分離,可標出不同說話者 |
如果只看「逐字稿內容準不準」,兩邊沒有顯著差異。至少以這場來說,qwen3-asr-flash 已經準到可以進入下一步,不需要我再為了那一點點差距自己架整套本機流程。
但如果你需要知道「這句是誰講的」,Whisper 那條本機流程比較有優勢。這次 Whisper 輸出有 senko 做 diarization(語者分離,也就是把不同人聲分成不同標籤),雖然標籤還是要人工驗證,但至少有 who-said-what 的起點。
代管那條路怎麼跑
代管 gateway 用的是 OpenAI-compatible 介面,所以我用 Node 寫了一支小腳本。
流程大概是這樣:
- 先把整份音檔轉成 16 kHz mono WAV
- 用
ffmpeg silencedetect找出錄音裡的停頓 - 把 79 分鐘音檔切成 30 段
- 每段送
qwen3-asr-flash - 結果快取起來,中斷後可以續跑
- 最後用 OpenCC 轉台灣正體,再跑幾個固定的修正規則
實際跑的指令很短:
cd "逐字稿"
yarn probe
yarn transcribe
probe 是先切 8 秒試打 API,確認金鑰有效,也確認這個 gateway 吃哪一種 audio content block。這次實測它吃的是 input_audio 加 data URI。只傳 base64 會回 400,所以要先確認這個 gateway 吃哪一種 audio content block。
比較麻煩的是切段。qwen3-asr-flash 單次請求上限是 5 分鐘、10 MB,所以長音檔不能整支丟進去。這次 79 分鐘最後切成 30 段,29 個切點有 27 個落在停頓上,只有真的沒停頓的地方才硬切。
這件事滿重要的。ASR 不是只要把檔案切小就好,如果剛好從一句話中間切開,前後文會斷掉,辨識品質會掉。用靜音切段至少能避開大部分這種問題。
價格低到不用太猶豫
如果按阿里雲官方定價,qwen3-asr-flash 北京區換算約每秒新台幣 0.001 元,新加坡區換算約每秒新台幣 0.0011 元。
先用北京區換算一下:
- 1 分鐘:約新台幣 0.06 元
- 1 小時:約新台幣 3.5 元
- 這場 1:19:22:約新台幣 4.6 元
如果用新加坡區,這場 1:19:22 約新台幣 5.5 元。
也就是說,這種一小時左右的演講錄音,轉一次大概台幣幾塊錢。就算你重跑幾次、測不同參數,成本也不太會是主要問題。
所以真正要比的不是「省不省錢」,而是這幾件事:
- 你想不想把音檔送到代管服務
- 你需不需要語者分離
- 你願不願意維護本機環境
- 你後面整理逐字稿的流程是不是已經接好
如果這是公司機密會議,或不能上傳到外部服務的素材,那就不用討論,走本機。可是如果是公開活動、自己的講座、podcast、社群分享,這個價格跟品質已經很夠用了。
真正有差的是後處理
這次我比較在意的不是 ASR 本身,而是 ASR 後面那一步。
原始逐字稿其實已經能讀,但它會保留很多現場語音的特徵:
- 嗯、呃、啊
- 重複的「對對對」
- 講到一半改口
- 破碎句
- 人聲重疊造成的怪句子
- 專有名詞偶爾聽錯
這些不是 ASR 做錯,而是它忠實把現場講話轉成文字。可是人講話本來就不是文章,人要讀 1 小時演講逐字稿,真正痛苦的是這些口語碎片。
所以我後面又讓 LLM 整理了一次:
- 修正聽錯的詞和專有名詞
- 補上標點
- 清理口吃與贅詞
- 合併破碎句
- 不摘要、不改寫語意
這一步做完,差異非常明顯。它不是把演講改成文章,而是把「機器聽到的現場聲音」整理成「人可以連續閱讀的逐字稿」。
我覺得現在比較合理的流程不是只問哪個 ASR 最準,而是把它拆成兩段:
- ASR:先把聲音穩定轉成文字
- LLM:再把口語雜訊整理掉,但保留原意
前者追求辨識率,後者追求可讀性。兩件事分開看,才不會把問題都丟給 ASR。
跟 Whisper MLX 比起來
我同步也跑了 whisper-large-v3-mlx,後來又補跑一次 whisper-large-v3-turbo。
同一份 1:19:22 音檔,實測時間差很多:
| 模型 | 耗時 | 備註 |
|---|---|---|
qwen3-asr-flash |
約 54 秒 | 代管,30 段、4 個並行請求 |
whisper-large-v3-turbo |
12 分 26 秒 | 本機 MLX |
whisper-large-v3-mlx |
27 分 12 秒 | 本機 MLX |
這裡的 Whisper 時間包含腳本啟動、模型載入、轉錄、輸出檔案。不是嚴格 benchmark,但很接近「我真的丟一支錄音進去,多久後拿到檔案」這件事。
這條路的好處很清楚:它跑在本機,音檔不用上傳,而且可以接語者分離。這次輸出裡有 9 個 speaker 標籤,還能把比較明確的人標成主辦人、講師、幾位與會者。
但代價也很清楚:你要維護本機環境,要等本機跑完,也要處理 diarization 的標籤準不準。語者分離不是魔法,同一個標籤可能混到多個聽眾,最後還是需要人工看過。
另外,這次使用的 qwen3-asr-flash 沒有語者分離。如果要長音檔或語者分離,官方另有 qwen-audio-3.0-asr-flash-filetrans 這類檔案轉寫模型。
這次讓我改觀的是:代管 ASR 已經不是「方便但品質普通」的選項。至少在中文演講逐字稿這個場景,它已經是可以認真放進工作流程的工具。
我會怎麼接進工作流程
如果只是偶爾轉一支音檔,手動跑指令就好。
但如果要真的變成固定流程,我會把它做成這樣:
- 錄音檔丟進資料夾
- 腳本自動切段、轉錄、快取
- LLM 產出整理過的逐字稿
- 再產出摘要、重點、可引用片段
- 最後人工檢查專有名詞跟人名
重點不是省掉人工,而是把人工留在最值得花時間的地方。
以前整理一場 1 小時演講,最累的是從頭聽、暫停、倒帶、打字。現在那段可以交給 ASR。人要做的是看這份逐字稿有沒有聽錯講者的意思、哪些段落值得拿出來、哪些內容可以變成文章或社群素材。
這個差異很大。
ASR 把聲音變文字,LLM 把文字變得可讀,最後人才決定哪些東西值得留下。
最近開始做免費的一對一諮詢,幫你把 AI 接進自己的工作流程——有需要的話可以約:https://www.dawsonwang.com/