老笔记本实现语音识别功能

订阅的老时课程一直是在小程序里听音频,有时候会想看看文字稿,以前也想在自己笔记本上部署个语音识别产品,当时搜了下,可能也就讯飞、百度什么的有些可以免费使用的产品,开源的解决方案好像没有。

今天突然又想到这个念头,就在chatgpt和gemini上问了下,找到他们共同推荐的开源方案:OpenAI’s Whisper,结果竟然很轻松地就在我的老笔记本(LenovoTninkPad X1 Carbon)上跑起来了。

图片描述

感叹一句,科技发展的速度真是快呀!


提问(chatgpt/gemini): “语音识别,中文,逐字稿,有能在mac10.15.7上运行的开源方案吗?16G内存 ”

chatgpt:

可以的,而且在 macOS 10.15.7(Catalina)+ 16GB 内存 这个条件下是完全可行的
我直接给你 “能跑 + 不折腾 + 实际可用” 的开源方案结论。


✅ 结论先行(给你选)

macOS 10.15.7 上,最稳妥、成功率最高的是:

🥇 OpenAI Whisper(CPU 版)
🥈 Whisper.cpp(强烈推荐,最省资源)

不推荐:WhisperX / NeMo(对系统和依赖要求过高)


🥇 方案一:OpenAI Whisper(Python 版,经典方案)

✅ 兼容 Catalina

✅ 16GB 内存完全够

✅ 中文效果好

⚠️ 速度一般(CPU)


一、环境要求(你都满足)

  • macOS 10.15.7

  • Python 3.8 / 3.9(不要 3.11)

  • 无需 GPU

  • 16GB RAM ✅


二、安装步骤(一步一步,不踩雷)

1️⃣ 安装 Python(如果没有)

👉 推荐 3.9

brew install python@3.9

确认:

python3.9 --version

2️⃣ 安装 FFmpeg(必须)

brew install ffmpeg

3️⃣ 安装 Whisper

pip3.9 install -U openai-whisper

三、使用(最简单)

whisper test1.mp3 \
  --model medium \
  --language Chinese \
  --output_format txt

👉 输出:

test1.txt

📌 模型选择建议(16GB 内存)

模型准确率速度
small⭐⭐⭐
medium(推荐)⭐⭐⭐⭐
large⭐⭐⭐⭐⭐

四、优缺点

✅ 中文成熟
✅ 社区大
❌ 比 whisper.cpp 慢
❌ Python 依赖稍多


🥈 方案二:Whisper.cpp(强烈推荐 ⭐⭐⭐⭐⭐)

这是我最推荐你用的方案

为什么?

  • 🚀 极快(比 Python Whisper 快很多)

  • 💾 内存占用低

  • 🧱 完全兼容 macOS 10.15.7

  • 📴 完全离线

  • ⚙️ 一个二进制文件就能跑


一、安装(超简单)

brew install whisper-cpp

二、下载模型

cd /usr/local/share/whisper-cpp
./models/download-ggml-model.sh medium

三、使用

whisper-cpp \
  -m models/ggml-medium.bin \
  -l zh \
  -f test1.mp3 \
  -otxt

👉 输出:

test1.txt

四、为什么 whisper.cpp 特别适合你

项目Whisper.cpp
macOS 10.15
Python❌ 不需要
内存 16GB
中文⭐⭐⭐⭐
稳定性⭐⭐⭐⭐⭐

❌ 为什么不推荐 WhisperX

  • 依赖 PyTorch + CUDA / FFmpeg 高版本

  • Catalina 极易踩坑

  • 安装时间 > 使用时间


🎯 我的最终建议(直接照着做)

如果你想:

一次成功、不折腾、长期可用

👉 直接用:Whisper.cpp + medium 模型


gemini:

在 macOS 10.15.7 (Catalina) 上运行现代 AI 模型会有一些挑战,因为很多最新的软件(如最新版的 Buzz 或 MacWhisper)通常要求 macOS 11.0 或更高版本。

不过,你的 16GB 内存 是一个很大的优势。针对你的系统环境,我推荐以下三个最稳妥、能跑得动且准确率高的开源方案:


方案一:whisper.cpp (最推荐:轻量、高效、无视系统限制)

这是目前在旧款 Mac(尤其是 Intel 芯片)上运行语音识别的最佳方式。它是用 C/C++ 重写的 Whisper,不依赖复杂的 Python 环境,对内存管理极好。

  • 为什么适合你: 它是命令行工具,没有复杂的图形界面要求,完美适配 macOS 10.15。

  • 性能: 16GB 内存足够运行 medium(中型)甚至 large(大型)模型。

  • 安装步骤:

    1. 打开终端,克隆仓库:git clone https://github.com/ggerganov/whisper.cpp

    2. 编译:cd whisper.cpp && make

    3. 下载中文模型(推荐 medium):bash ./models/download-ggml-model.sh medium

    4. 转换音频为 16kHz WAV(Whisper 要求):ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav

    5. 运行识别:./main -m models/ggml-medium.bin -f output.wav -l zh

方案二:Buzz (寻找旧版本 v0.7.x)

Buzz 是一个非常流行的图形化界面工具,内置了 Whisper。虽然最新版可能不支持 Catalina,但你可以尝试安装其 Legacy 历史版本

  • 下载地址: 前往 Buzz GitHub Releases 页面。

  • 版本建议: 尝试 v0.7.1 或更早的版本,这些版本对旧版 macOS 的兼容性较好。

  • 优点: 界面简单,直接拖入 MP3 即可,支持导出 SRT 和文本。

  • 注意: 如果打开报错“程序损坏”,请在终端输入:sudo xattr -r -d com.apple.quarantine /Applications/Buzz.app

方案三:使用 Python + faster-whisper (手动搭建)

如果方案一的命令行让你觉得复杂,可以通过 Python 搭建一个稳定的环境。

  • 准备: 安装 Homebrew,然后安装 Python 3.9 或 3.10。

  • 安装命令: pip install faster-whisper

  • 优势: faster-whisper 使用了 CTranslate2 引擎,即使在 Intel CPU 上,识别速度也比 OpenAI 原版快很多。

  • 模型选择: 你的 16GB 内存建议使用 medium 模型。它在中文准确率上已经非常出色,且运行起来不会导致系统卡死。


核心建议与避坑指南

  1. Intel vs Apple Silicon: 10.15 系统的机器大概率是 Intel 芯片。由于没有 M1/M2 的神经网络引擎加速,识别速度会比新 Mac 慢,请务必使用 whisper.cppfaster-whisper,原版 OpenAI Whisper 在你这台机器上会非常慢。

  2. 音频预处理: 所有 Whisper 系列工具对 16kHz 的单声道 WAV 文件支持最好。建议先用 ffmpeg 转换一下,可以极大地减少识别出错率。

  3. 模型权衡:

    • small 模型: 速度极快,但中文错别字较多。

    • medium 模型: 最佳平衡点(16GB 内存首选)。

    • large-v3 模型: 准确率最高,但在 10.15 系统上可能会感到明显发热和卡顿。

你需要我为你提供 whisper.cpp 更详细的编译命令,还是需要我帮你找一个特定版本的 GUI 安装包下载链接?

编译错误:

cmake build error:/Users/juan/git/whisper.cpp/ggml/src/ggml-metal/ggml-metal-device.m:635:83: error: use of undeclared       identifier ‘MTLGPUFamilyApple7’             dev->props.has_simdgroup_reduction  = [dev->mtl_device supportsFamily:MTLGPUFami…                                                                                   ^ /Users/juan/git/whisper.cpp/ggml/src/ggml-metal/ggml-metal-device.m:638:75: error: use of undeclared       identifier ‘MTLGPUFamilyApple7’             dev->props.has_simdgroup_mm = [dev->mtl_device supportsFamily:MTLGPUFamilyApple7];                                                                           ^ /Users/juan/git/whisper.cpp/ggml/src/ggml-metal/ggml-metal-device.m:642:70: error: use of undeclared       identifier ‘MTLGPUFamilyApple6’             dev->props.has_bfloat |= [dev->mtl_device supportsFamily:MTLGPUFamilyApple6];                                                                      ^ /Users/juan/git/whisper.cpp/ggml/src/ggml-metal/ggml-metal-device.m:776:85: error: use of undeclared       identifier ‘MTLGPUFamilyApple7’             dev->props.supports_gpu_family_apple7 = [dev->mtl_device supportsFamily:MTLGPUFa…                                                                                     ^ 4 errors generated. make[2]: *** [ggml/src/ggml-metal/CMakeFiles/ggml-metal.dir/ggml-metal-device.m.o] Error 1 make[2]: *** Waiting for unfinished jobs…. make[1]: *** [ggml/src/ggml-metal/CMakeFiles/ggml-metal.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs…. [ 56%] Linking CXX shared library libggml-blas.dylib [ 56%] Built target ggml-blas [ 58%] Linking CXX shared library libggml-cpu.dylib [ 58%] Built target ggml-cpu make: *** [all] Error 2

解释原因:

chatgpt:

这个报错非常典型,而且你判断方向是对的
我直接给你明确原因 + 3 个可行解决方案(从最稳到次优),照着做即可。


✅ 一句话结论(非常确定)

你的错误 不是 whisper.cpp 的问题,而是:

macOS 10.15.7(Catalina)+ 当前 Xcode / SDK 太老
不支持 MTLGPUFamilyApple6 / Apple7 这些 Metal 枚举

最新版 whisper.cpp 默认启用了 Metal GPU 加速
于是编译 ggml-metal 时 直接炸掉


❗ 错误本质

这些常量:

MTLGPUFamilyApple6
MTLGPUFamilyApple7

👉 只在 macOS 11+ / 新版 Xcode SDK 中存在

你的环境:

  • macOS 10.15.7 ❌

  • 对应的 Metal SDK ❌

所以编译期直接报:

use of undeclared identifier 'MTLGPUFamilyApple7'

✅ 解决方案一(强烈推荐 ⭐⭐⭐⭐⭐)

关闭 Metal,用 CPU 编译(最稳、最省事)

对你来说 CPU 已经完全够用(16GB 内存 + medium 模型)


✅ 正确编译方式(一定成功)

1️⃣ 清理旧构建

cd ~/git/whisper.cpp
rm -rf build

2️⃣ 关闭 Metal(关键一步)

cmake -B build \
  -DGGML_METAL=OFF

3️⃣ 编译

cmake --build build -j

👉 这一步在 Catalina 上 100% 能过


4️⃣ 使用

./build/bin/whisper-cpp \
  -m models/ggml-medium.bin \
  -l zh \
  -f test1.mp3 \
  -otxt

📌 性能说明:

  • medium 模型

  • 1 小时音频 ≈ 1.2–1.5 小时 CPU

  • 完全可接受、稳定


🥈 解决方案二(如果你一定想用 Metal)

⚠️ 不推荐,但给你完整说明

你需要同时满足:

  • macOS ≥ 11

  • Xcode ≥ 14

  • Command Line Tools 更新

👉 Catalina 无解,不是参数问题。


🥉 解决方案三(锁定旧版 whisper.cpp)

如果你 非要在 Catalina + Metal 编译

git checkout v1.5.4

(那时还没引入 Apple6 / Apple7)

❌ 但缺点是:

  • 模型支持较旧

  • 中文效果略差

  • 不如 CPU 新版稳定


🎯 我的最终、专业建议(结合你前面的需求)

你要的是:

中文逐字稿、批量、长期稳定

而不是:

跑 GPU benchmark

👉 直接用:CPU + GGML_METAL=OFF

这是:

  • whisper.cpp 官方支持路径

  • Catalina 用户的事实标准解

  • 不折腾、不踩坑


gemini:

这个错误是因为 macOS 10.15.7 (Catalina) 的系统版本太老了。

MTLGPUFamilyApple7 是 Apple 在较新版本的 Xcode 和 macOS SDK 中引入的定义(主要针对 Apple Silicon 芯片)。你的系统编译器不认识这些新定义,导致在编译 ggml-metal(苹果显卡加速模块)时报错。

对于 10.15 系统的 Intel Mac,最直接的解决办法是禁用 Metal (GPU) 加速,改用 CPU 编译。在 Intel Mac 上,whisper.cpp 的 CPU 优化(利用 AVX/AVX2 指令集)已经非常出色,16GB 内存跑 medium 模型完全没问题。

请按照以下步骤重新编译:

第一步:清理之前的失败记录

whisper.cpp 目录下执行:

Bash

make clean
rm -rf build

第二步:禁用 Metal 进行编译

使用以下命令强制关闭 Metal 加速:

如果你是直接用 make 编译:

Bash

# 使用 WHISPER_NO_METAL=1 参数
WHISPER_NO_METAL=1 make -j

如果你是使用 cmake 编译(推荐):

Bash

mkdir build
cd build
cmake -DGGML_METAL=OFF ..
cmake --build . --config Release

为什么这样做可以?

  1. 兼容性: 禁用 Metal 后,程序将不再尝试调用那些你系统中不存在的 GPU 接口。

  2. 性能: 在 2019 年及更早的 Intel Mac 上,集成显卡(Intel UHD/Iris)跑 AI 模型的效率并不比 CPU 高多少。whisper.cpp 会自动调用苹果系统的 Accelerate 框架,这在 Intel CPU 上运行得非常快。

编译成功后如何运行?

编译完成后,你会得到一个名为 main 的可执行文件。

  1. 下载模型(如果你还没下载):

    Bash

    bash ./models/download-ggml-model.sh medium
    
  2. 转换音频(确保是 16kHz 的 WAV):

    Bash

    ffmpeg -i your_file.mp3 -ar 16000 -ac 1 -c:a pcm_s16le input.wav
    
  3. 开始识别

    Bash

    ./main -m models/ggml-medium.bin -f input.wav -l zh
    

whisper.cpp的github源码 https://github.com/ggml-org/whisper.cpp

我用的命令供参考:

./build/bin/whisper-cli -m /Users/XXXX/whisper.cpp/models/ggml-medium.bin -f XXXX/XXX.mp3 -otxt -l zh –prompt “这是一段中文音频,请包含逗号、句号。例如:你好,这是时寒冰微课堂。”


使用 whisper.cpp 生成 .srt 字幕文件,最关键的参数是 --output-srt(简写为 -osrt)。

如果你在 iPhone 拍摄后将视频传到电脑上使用命令行操作,以下是标准且推荐的参数组合。

1. 核心命令示例

Bash

./main -m models/ggml-base.bin -f input_video.wav --language es --output-srt

2. 常用参数详解

参数说明建议设置
-osrt / --output-srt最核心: 指定输出为 SRT 字幕格式。必须添加,否则默认只在终端打印文字。
-l / --language指定识别语种。西语设为 es(手动指定比 auto 更准确)。
-m / --model指定使用的模型文件路径。推荐 basesmall(平衡速度与准确度)。
-t / --threads使用的 CPU 线程数。设为你的 CPU 核心数(如 -t 8)可大幅加速。
-f / --file输入的音频文件路径。注意:whisper.cpp 只接受 16kHz 的 WAV 格式。

3. 提高字幕质量的进阶参数

为了让生成的 SRT 字幕在视频中阅读感更好,建议加入以下控制:

  • --max-len [n]:设置每行字幕的最大长度(字符数)。建议设为 40,防止单行字幕过长遮挡画面。

  • --split-on-word:防止在单词中间断行,确保西语单词的完整性。

  • --ovtt:如果你需要 VTT 格式(网页播放常用),可以替换 osrt


⚠️ 重要提醒:音频预处理

whisper.cpp 不能直接读取 iPhone 拍摄的 .mov.mp4 视频,你需要先用 ffmpeg 提取并转换音频:

Bash

# 将 iPhone 视频转换为符合 whisper.cpp 要求的音频格式
ffmpeg -i input.mov -ar 16000 -ac 1 -c:a pcm_s16le output.wav

💡 隐私保护的小总结

使用 whisper.cpp + ffmpeg 是目前最高级别的隐私方案:

  1. FFmpeg 提取音频(本地)。

  2. Whisper.cpp 识别(本地,完全离线)。

  3. 得到 SRT 文件(本地)。