生活分享

用 Whisper 指令列在本機轉逐字稿:pip、ffmpeg 安裝與 SRT 字幕輸出

用指令列或 Python 在自己電腦跑 Whisper,音檔不必上傳:OpenAI 的模型權重下載後就能離線轉逐字稿。這篇照官方 README、模型卡與 LICENSE,說明六種模型大小的參數、顯示記憶體需求與相對速度,用 pip 與 ffmpeg 完成安裝,示範指令列與 Python 兩種轉錄方式、srt 與 vtt 字幕的輸出參數、中文與繁體輸出的設定,以及幻覺與重複這些官方寫明的限制。

更新日期: 閱讀時間約 7 分鐘

插圖:一台筆電的螢幕裡,左邊圓形中的聲波沿著橘色箭頭指向右邊一張帶時間戳的逐字稿卡片
圖片:Mokaair (© Mokaair)

一小時的會議錄音要變成逐字稿,最省事的做法是丟給線上服務,但錄音裡的人名與客戶資料也跟著上傳。OpenAI 的 Whisper 提供另一條路:程式碼與模型權重可以下載回自己的電腦執行,轉錄不必連網路,音檔與逐字稿都留在本機。搜「逐字稿 」又不想把錄音上傳的人,這是最常見的解法。

這篇照 GitHub 上 openai/whisper 的 README、模型卡與 LICENSE,加上 Hugging Face 的 openai/whisper-large-v3 模型頁,帶你把一支錄音變成逐字稿:六種模型大小要多少顯示記憶體、怎麼用 pip 與 ffmpeg 裝起來、指令列與 Python 兩種用法、中文與繁體的設定,以及官方寫明的限制。

Whisper 是什麼:可以下載回來執行的語音辨識模型

官方 README 給 Whisper 的定位是「通用的語音辨識模型」,而且是一個多任務模型,一次做三件事:多語言語音辨識、語音翻譯(把外語講的內容翻成英語文字)與語言辨識。模型卡補上訓練資料的規模:從網路收集的 680,000 小時音檔與對應逐字稿,其中 65% 是英語音檔配英語逐字稿,非英語的部分涵蓋 98 種語言。

授權寫在 repo 的 LICENSE 檔裡:Whisper 的程式碼與模型權重以 MIT 授權釋出,允許使用、修改、散布與販售,條件是保留版權聲明與授權條文,軟體按現狀提供、不附任何擔保。要注意 Hugging Face 上 openai/whisper-large-v3 那一頁的授權標籤寫的是 apache-2.0,跟 GitHub 的 MIT 不是同一個名字;兩邊都是官方頁面,要商用時以你實際下載的那一頁為準。

授權原文:README 的 License 一節與 LICENSE 檔開頭 · text
# README.md
Whisper's code and model weights are released under the MIT License.

# LICENSE
MIT License

Copyright (c) 2022 OpenAI

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

六種模型大小:參數、顯示記憶體與相對速度

README 的模型表列出六種大小,其中 tiny、base、small、medium 四種另有英語專用版本,名稱後面加 .en;官方觀察是英語專用版本在 tiny 與 base 上比較有感,到 small 與 medium 差距就不明顯。turbo 是 large-v3 的最佳化版本,速度更快、準確度只有極小的退步,但 README 標明 turbo 沒有為翻譯任務訓練過:要把非英語翻成英語得用多語言模型,就算加上 --task translate,turbo 也只會回傳原本的語言。

數字照 GitHub openai/whisper 的 README 模型表,2026 年 9 月 14 日查證;相對速度是官方在 A100 上轉錄英語、以 large 為 1 倍量到的比值。
模型參數需要的顯示記憶體相對速度
tiny39 M約 1 GB約 10 倍
base74 M約 1 GB約 7 倍
small244 M約 2 GB約 4 倍
medium769 M約 5 GB約 2 倍
large1550 M約 10 GB1 倍(基準)
turbo809 M約 6 GB約 8 倍

三個欄位要一起看。顯示記憶體是 README 寫的需求,沒有獨立顯示卡時也能用 CPU 跑,只是慢得多;相對速度是官方在 A100 上轉錄英語量到的,README 自己註明實際速度會因語言、語速與硬體差很多,當成大小之間的比例看就好,不要當成你機器上的秒數。另外,同一個 repo 的模型卡把 turbo 的寫成 798 M,跟 README 表上的 809 M 不同。

安裝:pip 套件、ffmpeg 與第一次下載模型

安裝分兩件事。Python 套件用 README 給的 pip install -U openai-whisper;系統上另外要有命令列工具 ffmpeg,README 列出 Ubuntu 或 Debian、Arch、macOS 的 Homebrew、Windows 的 Chocolatey 與 Scoop 五種寫法。ffmpeg 官網把自己定位成處理多媒體的框架,Whisper 用它把 m4a、mp3 或影片音軌解碼成模型吃得下的音訊;官網只提供原始碼,下載頁另外整理了各平台編譯好的版本。

安裝 Whisper 與 ffmpeg(指令照官方 README) · bash
# Python 套件
pip install -U openai-whisper

# ffmpeg:macOS(Homebrew)
brew install ffmpeg

# ffmpeg:Ubuntu 或 Debian
sudo apt update && sudo apt install ffmpeg

# ffmpeg:Windows(Chocolatey)
choco install ffmpeg

README 說這套程式碼預期相容 Python 3.8 到 3.11 與近期版本的 PyTorch;PyPI 上 openai-whisper 套件頁標的授權同樣是 MIT,查證當天的最新版本是 20250625。安裝時若出現 tiktoken 相關錯誤,README 說要先裝 Rust 開發環境。模型權重會在第一次指定模型時自動下載,預設放在 ~/.cache/whisper,想換位置用 --model_dir。

轉第一支檔案:指令列與 Python

命令列工具就叫 whisper,把檔名接在後面即可,一次給多個檔案也行。--model 預設是 turbo;--language 指定音檔的語言,不給就讓模型自己偵測;--task 有 transcribe 與 translate 兩個值。輸出格式用 --output_format 選,可選 txt、vtt、srt、tsv、json 與 jsonl,預設值是 all,也就是每種各寫一份。

命令列:基本用法、指定語言與輸出字幕 · bash
# README 的基本用法,一次轉多個檔案
whisper audio.flac audio.mp3 audio.wav --model turbo

# 指定語言、只輸出 srt 字幕,結果放進 out 資料夾
whisper meeting.m4a --model turbo --language Chinese --output_format srt --output_dir out

# 把日語錄音翻成英語文字(turbo 不做翻譯,改用多語言模型)
whisper japanese.wav --model medium --language Japanese --task translate

Python 這邊三行就有結果:載入模型、呼叫 transcribe()、印出文字。README 說明 transcribe() 會把整個檔案讀進來,用一個 30 秒的滑動視窗逐段處理,所以一小時的會議不必自己先切檔;回傳的字典除了整篇文字,還帶著分段與時間資訊。

Python:README 的基本轉錄範例 · python
import whisper

model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
流程圖:音檔經 ffmpeg 解碼、切成 30 秒視窗送進 Whisper 模型,輸出逐字稿與字幕檔,全程在本機
由左往右看:音檔先交給 ffmpeg 解碼,再切成 30 秒的視窗送進模型,最後一次寫出逐字稿與字幕檔,整段流程都在自己的電腦上完成。 · 圖片:Mokaair (© Mokaair)
閱讀完整文字說明

由左往右的五格流程:第一格是音檔或影片音軌,格式可以是 m4a、mp3、wav 或 mov 的音軌;第二格是 ffmpeg 解碼,把各種格式解成模型吃得下的音訊;第三格是切成 30 秒視窗,模型一次只看 30 秒的音訊;第四格是 Whisper 模型,六種大小可選,從 tiny 到 large 還有 turbo;第五格是輸出逐字稿與字幕檔,格式有 txt、srt、vtt、tsv、json 與 jsonl。下面一排是常用參數:--language Chinese 指定音檔語言、不給就自動偵測;--initial_prompt 放一段繁體中文提示,讓用字往繁體靠;--output_format srt 選輸出格式,預設是 all、每種各寫一份。最下面兩個提醒:逐字稿一定要人工核對,模型卡寫明預測可能包含音檔裡沒有講過的內容,人名、數字與結論要對著時間戳再聽一次;以及全程在自己的電腦上執行,音檔、逐字稿與字幕檔都不離開這台機器,不需要帳號,也不必連網路。

中文與繁體輸出:語言參數與初始提示詞

--language 接受語言代碼與英文名稱兩種寫法,中文可以寫 zh 或 Chinese,粵語是 yue。Hugging Face 上 openai/whisper-large-v3 模型頁的語言標籤列出 99 種語言,套件裡 tokenizer.py 的語言表有 100 筆,多的是 large-v3 新增的粵語。不過模型卡也說,只有大約 10 種語言有很強的結果,不同語言與口音之間的表現並不平均。

輸出繁體還是簡體,官方文件沒有給開關。能用的是 --initial_prompt,官方對它的說明只有一句:提供給第一個視窗的一段提示文字。把一段繁體中文的句子放進去,可以讓模型的用字往繁體靠;--carry_initial_prompt 設成 True 會把這段提示接在每次內部解碼前面,官方同時註明這樣會削弱 --condition_on_previous_text 的效果。這是引導不是保證:官方沒有承諾輸出的字體,成品仍要自己抽查。

用初始提示詞把用字往繁體中文帶 · bash
whisper interview.m4a --model turbo --language Chinese \
  --initial_prompt "以下是繁體中文的訪談逐字稿,用詞請照台灣的習慣。" \
  --output_format srt --output_dir out

限制與核對:幻覺、重複與長檔

模型卡把限制寫得很直白:因為訓練用的是弱監督與大量帶雜訊的資料,模型的預測可能包含音檔裡根本沒講過的內容,也就是幻覺;官方的推測是模型一邊轉錄,一邊在用語言知識預測下一個字。序列到序列的架構還讓它容易產生重複的文字,官方說束搜尋與溫度排程能緩解一部分、但無法完全解決,而且這兩種毛病在資料較少的語言上可能更嚴重。

官方的選項清單裡有幾個對應的旋鈕:--condition_on_previous_text 預設是開的,關掉之後段落之間的一致性會變差,但模型比較不會卡在重複的迴圈裡;--word_timestamps 打開逐字時間戳(官方標為實驗性),開了才能用 --hallucination_silence_threshold,在偵測到可能的幻覺時跳過超過設定秒數的靜音。

音檔不出門:適合的場合與後續

本機轉錄真正的差別在資料流向:模型下載回來之後,音檔、逐字稿與字幕檔都只在自己的電腦上處理,不需要帳號、也不必連網路;代價是硬體與時間要自己出,雲端服務則是用費用換掉這些麻煩。會議、訪談或客戶錄音這類內容敏感的場合,通常值得先在本機跑一次。

另外兩件事對成品的影響比換模型還大。一是錄音本身:麥克風擺位、背景雜訊與人聲重疊都會直接變成辨識錯誤,該重錄就重錄、該降噪就先降噪。二是逐字稿之後的整理:Whisper 交給你的是文字與時間戳,決定與下一步還是得有人寫成筆記。不想碰指令列的話,桌面工具也有現成的選擇。

  • 生活分享

    Claude Code、Codex 搭本機模型:兩種接法怎麼選

    Claude Code 與 Codex 搭配本機模型有兩種接法:代理照常連雲端、把大量雜務交給腳本或 MCP 工具去問本機模型,或是把代理的模型整個換成本機模型。這篇用資料能不能出門、上下文開得夠不夠長、工作的類型三個問題幫你選,並對照 Ollama、LM Studio、Anthropic 與 OpenAI 的官方文件,分清楚本機權重、Ollama 的 cloud 標籤與供應商端點是三種不同的東西。

  • 生活分享

    把本機模型包成 MCP 工具,Claude Code 與 Codex 共用一支伺服器

    用官方 Python SDK 寫一支 stdio 的 MCP 伺服器,把本機的 Ollama 模型包成工具,Claude Code 與 Codex 就能共用:工具只收 inbox 底下的路徑,只回分類結果與結果檔路徑,不回信件原文。文中列出兩邊的登記指令、逾時與輸出上限的官方預設值,以及換成別家本機模型只改環境變數 LOCAL_MODEL 的做法,步驟都來自官方文件。

  • 生活分享

    把 Claude Code、Codex 整個換成本機模型:Ollama 與 LM Studio 設定與還原

    Ollama、LM Studio 與 Codex 的文件寫了把 Claude Code、Codex 整個換成本機模型的接法:Ollama 用 ollama launch 一行指令或手動設定,LM Studio 先開本機伺服器再設環境變數或加 --oss。這篇把四種組合的指令、兩家文件建議的上下文長度、Claude Code 用 /status 確認連到誰的方法,以及用完怎麼還原整理在一起;需要先裝好 Ollama 或 LM Studio,並且已有 Claude Code 或 Codex。

  • 生活分享

    Claude Code、Codex 搭本機模型的注意事項:開工前的檢查清單

    Claude Code 或 Codex 搭本機模型之前,先照一張表逐項核對:代理讀不讀得到原始檔、現在連的是誰、標籤是不是 :cloud、上下文實際開多長、逾時與輸出量、怎麼驗收。每一項寫怎麼檢查,並指出詳見同組哪一篇,另外收進供應商端點、條款與授權、繁體中文用字檢查;檢查方法取自 Anthropic、OpenAI、Ollama 與 DeepSeek 的官方文件。

最新旅遊情報攻略

資料來源

生活分享