语音识别技术之whisper.cpp 入门篇和本地环境搭建

项目介绍

Whisper:OpenAI 出品的“万能”语音识别器

  1. 它究竟是什么?
    Whisper 是 OpenAI 在 2022 年发布的一个大规模自动语音识别(ASR)+ 语音翻译模型。简单说,它能自动听懂并把语音“听写”成文字,还能把多种语言的语音翻译成英文。

  2. 为何它厉害?

    • 训练数据极大:用了 68 万小时的多语言、多任务标注音频,覆盖 98 种语言。

    • 零样本能力:不需要针对特定口音或场景调优,就能直接用,非常“通用”。

    • 多功能:可做识别、翻译、语言检测,还能输出每句话的时序戳。

    • 开源可用:模型权重和推理代码都公开,支持 Python、PyTorch,只要有显卡就能跑。

  3. 它如何工作?

    • 预处理:把音频切成最长 30 秒一段,转成“声音图”(Log-Mel 频谱)。

    • 编码器(Encoder):读入声音图,提取出“声音特征”序列。

    • 解码器(Decoder):根据特征和特殊任务指令(“这是英语”“请翻译为英文” 等),一步步生成文字输出。

    • 全程都是一个端到端的 Transformer 模型,不像传统 ASR 要拆好多模块。

  4. 对普通人意味着什么?

    • 无论短视频、会议录音,还是多语言采访,Whisper 都能一键“听写+翻译”

    • 要求高显存:原始模型跑“大模型”至少需 10 GB 显卡,否则要量化或分段处理

    • 适合做研究和原型,日常小规模转录也可按需剪裁模型


whisper.cpp:让 Whisper 在你电脑上“随手可用”

  1. 它是什么?
    whisper.cpp 是社区开发者(Georgi Gerganov)用 纯 C/C++ 重写的 Whisper 推理引擎,依赖轻量级的 ggml 库,能在无需 CUDA 或 PyTorch 的情况下,只靠 CPU 运行 Whisper。

  2. 为什么要它?

    • 门槛低:无须高端显卡,也不需要安装 Python、PyTorch。

    • 速度优:通过低精度量化(8/4/2-bit)和高效内存布局,CPU 单线程就能跑出可用速度。

    • 跨平台:Windows/Mac/Linux/Raspberry Pi/Android/iOS 等几乎全支持,只需编译一次就能跑。

  3. 它如何运行?

    • 下载源码后,用 make 编译生成一个可执行文件(如 main 或 whisper)。

    • 一行命令就能把音频转文字

    • 量化模型(从 32-bit float 缩小到 8-bit 或更低),可把原先上 GB 级的模型文件压到几十 MB,从而大幅节省内存。

  4. 对普通人意味着什么?

    • 更易用:在普通笔记本、嵌入式设备上也能做离线语音识别,无需网络,也不必折腾深度学习环境。

    • 轻量便携:走到哪儿拷贝一个程序和量化模型,就能随时识别翻译。

    • 社区友好:大量脚本和教程,入门零门槛;支持自定义参数(比如只识别中文、只输出时间戳等)。


小结

  • Whisper:科研级、功能最全的“巨兽”,适合大规模、高精度、跨语言的场景,但对硬件有较高要求。

  • whisper.cpp:草根玩家的“得力助手”,不挑硬件、易集成,适合把 Whisper 在日常设备上落地,满足轻量离线需求。

项目链接和运行环境搭建

https://github.com/ggerganov/whisper.cpp.git

快速概览 在 Ubuntu 上,本地化部署 whisper.cpp 只需安装系统依赖、克隆项目、编译并下载模型,即可离线运行高效的语音识别服务。


安装系统依赖

在终端执行以下命令以安装必要工具:

bashsudo apt update
sudo apt install -y build-essential cmake git wget ffmpeg libsndfile1
  • build-essential:提供 GCC/G++ 编译器和常用开发工具

  • cmake:用于项目构建

  • ffmpeg:音频格式转换

  • libsndfile1:WAV 文件支持


克隆并编译 whisper.cpp

  1. 克隆仓库

    bashgit clone https://github.com/ggerganov/whisper.cpp.git
    cd whisper.cpp
  2. 编译项目

    • 使用 CMake(可定制化,支持多线程)

      bash mkdir build && cd build
      cmake ..
      make -j$(nproc)

下载模型

whisper.cpp 提供多种模型,可根据准确度与资源消耗平衡选择:

截至 2025年8月26日,在 whisper.cpp 框架中,最强的中文语音识别模型主要有两个候选:

特性ggml-large-v3ggml-large-v3-turbo
精度(WER/CER)最低(业界顶级)与 large-v3 相当
模型大小~2.9 GiB~2.9 GiB(量化后显存占用更低)
运行内存~3.9 GiB约6 GiB VRAM 即可
推理速度~0.83× 实时接近 real-time(第二快)
多语言支持98+ 语言,包括中文同左
量化与优化支持 4-bit/5-bit 量化已预集成 Turbo 量化
典型应用场景对延迟不敏感、追求最高准确度的批量转写对 GPU 资源敏感、需要接近最高精度与更快推理的场景
# 官方 large-v3
./models/download-ggml-model.sh large-v3
​
# 社区 Turbo 版本
./models/download-ggml-model.sh large-v3-turbo
​
使用 wget 下载模型
# 进入 whisper.cpp 的 models 目录
cd /home/jbj/openai/whisper.cpp/models
# 下载 large-v3 模型(2.9 GiB)
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin
# 或下载量化版本 large-v3-q5_0(1.1 GiB,节省空间)
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-q5_0.bin
# 或下载 large-v3-turbo(1.5 GiB,推理更快)
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin
​
​
使用 curl 下载(备选方案)或者手动下载然后再上传
# 下载 large-v3 完整版本
curl -L -o ggml-large-v3.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin
# 下载 large-v3-turbo 版本
curl -L -o ggml-large-v3-turbo.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin
​
​
使用 Hugging Face Hub 工具
pip install huggingface_hub
# Python 脚本方式下载
python3 -c "
from huggingface_hub import hf_hub_download
hf_hub_download(repo_id='ggerganov/whisper.cpp', 
                filename='ggml-large-v3.bin',
                local_dir='./models')
"
实在不行百度云下载,提供了大部分模型
​通过网盘分享的文件:whisper
链接: https://pan.baidu.com/s/1WyGs-Yp26T_GnGOYGQSziQ 提取码: 88dk 
--来自百度网盘超级会员v6的分享

音频格式转换

whisper.cpp 原生支持 16 kHz 单声道 PCM WAV。如果输入其它格式,先用 FFmpeg 转码:

ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le input.wav

尝试运行语音识别

在项目根目录执行如下命令:

./bin/whisper-cli -m ../../whisper_modle/ggml-large-v3.bin -f ../../test/out3.wav -l zh -t 8 

说明

  • -m:模型路径

  • -f:音频文件

  • -l:语言代码(如 zhen

  • -t:并行线程数


高级使用 whisper.cpp命令文档

用法:./bin/whisper-cli [选项] file0 file1 ...

  • 支持的音频格式:flac、mp3、ogg、wav

常用选项

  • -h, --help [默认] 显示帮助并退出

  • -t N, --threads N 计算使用的线程数

  • -p N, --processors N 使用的处理器数量

  • -ot N, --offset-t N 从音频的毫秒偏移开始处理

  • -on N, --offset-n N 从第几个分段索引开始

  • -d N, --duration N 仅处理指定毫秒时长(0 表示全长)

  • -mc N, --max-context N [-1] 最大文本上下文 token 数

  • -ml N, --max-len N 单个分段的最大字符长度

  • -sow, --split-on-word [false] 以“词”为单位分段(而非 token)

  • -bo N, --best-of N 采样时保留的最优候选数

  • -bs N, --beam-size N 集束搜索的 beam 大小

  • -ac N, --audio-ctx N 音频上下文大小(0 表示全部)

  • -wt N, --word-thold N [0.01] 词时间戳概率阈值

  • -et N, --entropy-thold N [2.40] 解码失败的熵阈值

  • -lpt N, --logprob-thold N [-1.00] 解码失败的对数概率阈值

  • -nth N, --no-speech-thold N [0.60] 无语音阈值

  • -tp, --temperature N [0.00] 采样温度(0 到 1)

  • -tpi, --temperature-inc N [0.20] 退避时温度增量(0 到 1)

  • -debug, --debug-mode [false] 调试模式(例如导出对数梅尔谱)

  • -tr, --translate [false] 从源语言翻译为英文

  • -di, --diarize [false] 立体声说话人分离

  • -tdrz, --tinydiarize [false] 启用 tinydiarize(需 tdrz 模型)

  • -nf, --no-fallback [false] 禁用解码温度退避策略

  • -otxt, --output-txt [false] 结果输出为 .txt 文件

  • -ovtt, --output-vtt [false] 输出 .vtt 字幕文件

  • -osrt, --output-srt [false] 输出 .srt 字幕文件

  • -olrc, --output-lrc [false] 输出 .lrc 歌词文件

  • -owts, --output-words [false] 输出用于卡拉 OK 的逐词脚本

  • -fp, --font-path [/System/Library/Fonts/Supplemental/Courier New Bold.ttf] 卡拉 OK 字体路径(等宽字体)

  • -ocsv, --output-csv [false] 输出 .csv

  • -oj, --output-json [false] 输出精简 JSON

  • -ojf, --output-json-full [false] 输出包含更多信息的完整 JSON

  • -of FNAME, --output-file FNAME [] 指定输出文件前缀(不含扩展名)

  • -np, --no-prints [false] 除结果外不打印其他日志

  • -ps, --print-special [false] 打印特殊标记

  • -pc, --print-colors [false] 彩色打印

  • --print-confidence [false] 打印置信度

  • -pp, --print-progress [false] 打印进度

  • -nt, --no-timestamps [false] 不打印时间戳

  • -l LANG, --language LANG [en] 口语语言(auto 为自动检测)

  • -dl, --detect-language [false] 自动检测语言后即退出

  • --prompt PROMPT [] 初始提示(最长为 n_text_ctx/2 tokens)

  • -m FNAME, --model FNAME [models/ggml-base.en.bin] 模型文件路径

  • -f FNAME, --file FNAME [] 输入音频文件路径

  • -oved D, --ov-e-device DNAME [CPU] OpenVINO 编码推理使用的设备

  • -dtw MODEL --dtw MODEL [] 计算 token 级时间戳

  • -ls, --log-score [false] 记录 token 最佳解码分数

  • -ng, --no-gpu [false] 禁用 GPU

  • -fa, --flash-attn [false] 启用 Flash Attention

  • -sns, --suppress-nst [false] 抑制非语音 token

  • --suppress-regex REGEX [] 用正则匹配要抑制的 token

  • --grammar GRAMMAR [] 使用 GBNF 语法约束解码

  • --grammar-rule RULE [] 指定语法的顶层规则名

  • --grammar-penalty N [100.0] 降低非语法 token 的对数几率

语音活动检测(VAD)选项

  • --vad [false] 启用 VAD

  • -vm FNAME, --vad-model FNAME [] VAD 模型路径

  • -vt N, --vad-threshold N [0.50] 语音识别阈值

  • -vspd N, --vad-min-speech-duration-ms N 最小语音时长(毫秒)

  • -vsd N, --vad-min-silence-duration-ms N 最小静音时长(用于切分)

  • -vmsd N, --vad-max-speech-duration-s N [FLT_MAX] 最大语音时长(超出将自动切段)

  • -vp N, --vad-speech-pad-ms N 语音边界两侧的填充(毫秒)

  • -vo N, --vad-samples-overlap N [0.10] 片段重叠时长(秒)

快速上手示例

  • 转录一个 WAV/MP3 文件 ./bin/whisper-cli -m models/ggml-base.en.bin -f input.wav

  • 自动语言检测并输出 SRT 字幕 ./bin/whisper-cli -m models/ggml-large-v3.bin -l auto -osrt -of out input.mp3

  • 仅做语言检测后退出 ./bin/whisper-cli -m models/ggml-base.bin -dl -f input.ogg

  • 中英文自动检测、生成 JSON 与 TXT ./bin/whisper-cli -m models/ggml-large-v3.bin -l auto -oj -otxt -of result input.flac

  • 只转录某一时间段(从30秒开始,转60秒) ./bin/whisper-cli -m models/ggml-base.bin -ot 30000 -d 60000 -f input.wav

  • 启用 VAD 更稳健地分段 ./bin/whisper-cli -m models/ggml-base.bin --vad -f input.wav

  • 翻译成英文(从任意源语言到英文) ./bin/whisper-cli -m models/ggml-large-v3.bin -tr -f input.wav

ffmpeg8.0加入whisper参数

whisper AVOptions:
   model             <string>     ..F.A...... Path to the whisper.cpp model file
   language          <string>     ..F.A...... Language for transcription ('auto' for auto-detect) (default "auto")
   queue             <duration>   ..F.A...... Audio queue size (default 3)
   use_gpu           <boolean>    ..F.A...... Use GPU for processing (default true)
   gpu_device        <int>        ..F.A...... GPU device to use (from 0 to INT_MAX) (default 0)
   destination       <string>     ..F.A...... Output destination (default "")
   format            <string>     ..F.A...... Output format (text|srt|json) (default "text")
   vad_model         <string>     ..F.A...... Path to the VAD model file
   vad_threshold     <float>      ..F.A...... VAD threshold (from 0 to 1) (default 0.5)
   vad_min_speech_duration <duration>   ..F.A...... Minimum speech duration for VAD (default 0.1)
   vad_min_silence_duration <duration>   ..F.A...... Minimum silence duration for VAD (default 0.5)
​
语音转文字选项:
模型             <字符串>     ..F.A...... 声音转文字的模型文件路径
语言             <字符串>     ..F.A...... 转录语言(自动检测时为“auto”)(默认值“auto”)
队列             <持续时间>   ..F.A...... 音频队列大小(默认值 3)
使用 GPU         <布尔值>      ..F.A...... 使用 GPU 进行处理(默认值 true)
GPU 设备         <整数>        ..F.A...... 要使用的 GPU 设备(范围从 0 到 INT_MAX)(默认值 0)
输出目的地     <字符串>     ..F.A...... 输出目的地(默认值“”)
格式             <字符串>     ..F.A...... 输出格式(文本|srt|json)(默认值“文本”)
VAD 模型         <字符串>     ..F.A...... VAD 模型文件路径
VAD 阈值         <浮点数>      ..F.A...... VAD 阈值(范围 0 到 1)(默认值 0.5)
VAD 最短语音时长 <持续时间>   ..F.A...... VAD 的最短语音时长(默认值 0.1)
VAD 最短静音时长 <持续时间>   ..F.A...... VAD 的最短静音时长(默认值 0.5)

由此可见,ffmpeg在8.0引入了whisper但是不支持调优参数。

优化参数案例

高性能优化版本

./bin/whisper-cli \
  -m ../../whisper_modle/ggml-large-v3.bin \
  -f ../../test/out3.wav \
  -l zh \
  -t $(nproc) \
  --processors $(nproc) \
  --best-of 1 \
  --beam-size 1 \
  --word-thold 0.01 \
  --entropy-thold 2.40 \
  --logprob-thold -1.00 \
  --temperature 0.0 \
  --output-txt \
  --output-srt \
  --print-progress

参数详细说明

线程和处理器优化

  • -t $(nproc): 使用系统所有可用CPU核心

  • --processors $(nproc): 并行处理器数量

  • 建议值:物理核心数的75%-100%

  • 速度优先配置(牺牲少量精度换取速度)

    • --best-of 1 # 减少候选数量,默认值:5 --beam-size 1 # 束搜索大小,默认值:5 --temperature 0.0 # 降低随机性,提高一致性

  • 质量阈值调整

    • --word-thold 0.01 # 词级置信度阈值 --entropy-thold 2.40 # 熵阈值过滤 --logprob-thold -1.00 # 对数概率阈值

  • 内存和缓存优化

    • --max-len 0 # 不限制最大长度

    • --split-on-word # 在词边界分割,避免截断

    • --no-fallback # 禁用回退,加快处理

会议纪要优化(质量优先)

./bin/whisper-cli \
  -m /home/jbj/openai/whisper/whisper_modle/ggml-tiny.bin \
  -f /home/jbj/openai/whisper/test/out3.wav \
  --prompt "以下是普通话的句子,使用简体中文输出。" \
  -l zh \
  -t $(nproc) \
  --processors 1 \
  -l zh -et 1.8 -lpt -0.8 -bs 3 -bo 5 -tp 0.0,0.2 -tpi 0.1 \
  -ml 80 -mc -1   -nth 0,10 -sow \
  --no-timestamps --no-real-time \
           
./bin/whisper_asr \
  -m /home/jbj/openai/whisper/whisper_modle/ggml-tiny.bin \
  -f /home/jbj/openai/whisper/test/out3.wav \
  --prompt "以下是普通话的句子,使用简体中文输出。" \
  -l zh \
  -t $(nproc) \
  --processors 1 \
  --et 1.8 \
  --lpt -0.8 \
  --bs 3 \
  --bo 5 \
  --tp 0.0,0.2 \
  --tpi 0.1 \
  --nth 0,10 \
  --sow \
  --no-timestamps \
  --no-real-time                    
  --output-srt
  --output-txt  \
  --output-srt  \
  --output-txt  \
  --output-vtt  \
  --output-json


平衡速度与精度的最佳实践

./bin/whisper-cli \
  -m /home/jbj/openai/whisper/whisper_modle/ggml-tiny.bin \
  -f /home/jbj/openai/whisper/test/out3.wav \
  -l zh \
  -t $(nproc) \
  --split-on-word \
  --entropy-thold 1.8 \
  --logprob-thold -0.8 \
  --beam-size 3 \
  --temperature 0.0,0.2 \
 --temperature-inc 0.1 \
  --output-srt
-nth 无语音阈值
-tdrz 概念:轻量级说话人分离 作用:使用特殊训练的模型识别说话人变化,在转录文本中插入说话人标记 tdrz模型.中文需要寻找单独的模型。
bs根据解码路径附带确定性。bo根据采样池样本附带些随机性,根据tp调控。两种算法只能选择一种
短会议 (<30 分钟):-mc -1(无限制),-ml 100(稍长段落,减少切分)。
长会议 (>1 小时):-mc 256(节省内存),-ml 60(更多短段,便于分段处理)。

GPU 加速(如果支持)

使用加速版本

# CUDA 加速
cmake -B build -DWHISPER_CUDA=1
cmake --build build -j --config Release
​
# Metal 加速(Apple Silicon)
cmake -B build -DWHISPER_METAL=1
cmake --build build -j --config Release
​
# CoreML 加速(macOS)
cmake -B build -DWHISPER_COREML=1
cmake --build build -j --config Release

./bin/whisper-cli \
  -m ../../whisper_modle/ggml-large-v3.bin \
  -f ../../test/out3.wav \
  -l zh \
  --use-gpu \
  -t 4  # GPU时减少CPU线程
​

未来扩展(针对会议场景定制)

  1. 说话人分离:当前无 -tdrz,但会议纪要常需区分说话人。加 --tinydiarize 并用 tdrz 模型(e.g., small.en-tdrz),或集成外部工具如 pyannote-audio。

  2. 无 VAD 集成:会议音频常有静音/噪声,缺少 VAD 会增加幻听风险。

  3. 未利用硬件加速:命令未指定 GPU,如果有可用 GPU(如 NVIDIA),会浪费加速潜力。

  4. 支持(仅限 Linux)opus,aac音频。

    1. # Debian/Ubuntu
      sudo apt install libavcodec-dev libavformat-dev libavutil-dev
      ​
      # RHEL/Fedora
      sudo dnf install libavcodec-free-devel libavformat-free-devel libavutil-free-devel
      cmake -B build -D WHISPER_FFMPEG=yes
      cmake --build build

 

whisper.cpp玩法

视频增加字幕

安装字体
sudo apt install fonts-noto-cjk fonts-wqy-zenhei fonts-wqy-microhei
​
音频输出srt字幕文件
./bin/whisper-cli -m ../../whisper_modle/ggml-large-v3.bin -f ../../test/out6.wav -l zh -t 8 --output-txt --output-srt 
​

ffmpeg嵌入字幕

ffmpeg -y -i in6.mp4 \
  -vf "subtitles=out6.srt:force_style='FontName=WenQuanYi Zen Hei,FontSize=10,PrimaryColour=&Hffffff,OutlineColour=&H000000,Outline=1,Alignment=2,MarginV=20'" \
   -c:a libmp3lame \
  in6sub.mp4 
  
  
  #边框
  ffmpeg -i in4z.mp4  \
  -vf "subtitles=out4.srt:force_style='FontName=WenQuanYi Zen Hei,FontSize=8,PrimaryColour=&Hffffff,OutlineColour=&H000000,BackColour=&100000000,BorderStyle=3,Alignment=2,MarginV=20,Outline=1'" \
  -c:a libmp3lame \
  in4sub.mp4
​

参数说明:

  • FontName=WenQuanYi Zen Hei:指定支持中文的字体

  • FontSize=20:字体大小

  • PrimaryColour=&Hffffff:白色字体

  • OutlineColour=&H000000:黑色边框

  • Outline=1:添加边框效果

  • -c:a libmp3lame vscode默认支持音频格式

黑边框BorderStyle 参数说明

  • BorderStyle=3: 创建适应文本长度的透明背景框

  • BackColour=&H80000000: 半透明黑色背景(80 表示透明度)

  • Alignment=5: 字幕居中对齐

  • MarginV=20: 垂直边距调整位置

  • FontSize=22:字体大小

  • BackColour=&H60000000: 适中透明度的黑色背景

  • Alignment=5: 完全居中显示

  • Outline=2: 加粗文字边框

  • Spacing=2: 增加行间距避免重叠

实时读写

项目自带的 stream 实例。仓库包含“Real-time audio input example(stream)”,可从麦克风持续采样并实时打印转写结果。

#安装实时读写插件
sudo apt update && sudo apt install -y libsdl2-dev
​
cmake .. -DWHISPER_SDL2=ON
make -j$(nproc)
​
./bin/whisper-stream -m /home/jbj/openai/whisper/whisper_modle/ggml-tiny.bin -l zh -t 8
 --step 500  --length 3000 -vth 0.6 -sa     

核心参数

  • --step N:连续转写时的“步长”,每收集到 N 毫秒新音频就触发一次增量推理,示例中常见 --step 500 表示每 0.5 秒更新一次。

  • --length N:每轮推理所用的音频窗口长度,示例中 --length 5000 表示每次用最近 5 秒音频做一次完整解码。

  • --vad-thold N:启用流式/滑窗时的语音活动检测阈值,阈值越高越容易判为静音,应按环境调节;VAD 检测到静音后,会对最近 --length 毫秒音频进行转写并输出一个可解析块。

相关可调项

  • --keep N:每轮与上一轮重叠保留的音频(毫秒),用于缓解边界截断与上下文断裂,典型用 200ms 重叠更稳。

  • -t/--threads:计算线程数,增大可提升 CPU 吞吐,但受核心/内存带宽限制。

  • -vth/--vad-thold:VAD 阈值,数值描述见上;配合 step/length 共同决定何时输出稳定分段。

  • -kc/--keep-context:在分段之间保留解码上下文,有助于延续语义与专有名词的稳定性。

  • -mt/--max-tokens:限制每段最多生成的 token 数,避免长段停不下来、降低单轮延迟。

  • -ac/--audio-ctx:音频上下文大小(0 表示全部可用),限制模型可用的过往音频上下文长度,以平衡稳定与速度。

  • -bs/--beam-size:启用 beam search 的束宽(-1 关闭/使用默认贪心),束越宽越稳但更耗时。

  • -tr/--translate:将源语言直接翻译成英语(Whisper 原生支持的模式)。

  • -nf/--no-fallback:禁用温度回退(temperature fallback),可减少重复尝试带来的时延波动。

  • -ps/--print-special:打印特殊 token,便于调试时间戳、片段边界等信息。

  • -l/--language:指定口语语言代码,例如 zh 代表中文。

  • -m/--model:指定 ggml 模型文件路径,例如 ggml-large-v2.bin。

  • -f/--file:将转写文本写入文件,便于离线保存与分析。

  • -tdrz/--tinydiarize:启用 tinydiarize 说话人切分功能,需要下载 tdrz 兼容模型后使用。

  • -ng/--no-gpu:禁用 GPU 推理(如已编译 GPU 支持时可强制仅用 CPU)。

  • -fa/--flash-attn:在推理中启用 Flash Attention 优化路径(视构建/平台支持),以提升注意力计算效率。

Whisper 模型中文调优

Whisper模型的VAD支持方式

2025年8月26日 推荐用于 Whisper 的开源 VAD 模型

主要推荐:TEN VAD、Silero VAD、WebRTC VAD、ste­fanwebb/open-voice-activity-detection。这四款模型在准确率、延迟、跨平台兼容性和社区活跃度上各有所长,可根据场景需求选用。

模型名称核心特点延迟与性能兼容性开源协议
TEN VAD- 帧级检测,精度领先 - 极低延迟,RTF比Silero低约32% - ONNX部署、WASM+JS支持- 实时因子优异 - 轻量级(跨平台C语言实现)Linux/Windows/macOS/Android/iOS Python绑定Apache 2.0
Silero VAD- 6000+语言语料训练,鲁棒性强 - 单线程处理30 ms音频<1 ms - ONNX与PyTorch双运行时支持- CPU单线程耗时<1 ms - GPU或批处理加速任意ONNX平台 PyTorch生态MIT
WebRTC VAD (py-webrtcvad-wheels)- GMM+能量阈值混合算法 - 模式0–3可调节激进度 - 社区成熟度高- 处理10/20/30 ms帧,延迟可忽略Python (Windows/macOS/Linux 三端二进制轮子)BSD
ste­fanwebb/open-voice-activity-detection- 完整Silero VAD开源实现 - 支持自定义数据集训练 - 计划LoRA微调与评估脚本与Silero VAD同级Python示例 & Web/UI集成CC BY­SA 4.0

TEN VAD 介绍

TEN VAD 是由 TEN 团队开发的企业级实时语音活动检测(Voice Activity Detection)系统,于2025年7月正式开源,专门针对低延迟、高精度的语音识别场景设计。

核心技术特性

帧级检测精度:TEN VAD 采用深度学习架构,实现帧级别的语音活动检测,能够准确识别音频帧中是否包含人类语音并过滤背景噪声。相比传统方法,其检测精度显著提升,在手动标注的测试集上表现优于 WebRTC VAD 和 Silero VAD。

超低延迟性能:在语音到非语音的转换检测上,TEN VAD 响应速度远快于 Silero VAD 的数百毫秒延迟,实时因子(RTF)比 Silero VAD 低约32%。这一特性使其特别适用于实时对话AI系统,显著减少端到端响应延迟。

轻量化设计:库文件大小仅为 306KB(Linux x64),相比 Silero VAD 的2.16MB大幅减少。支持多平台部署,包括 Linux、Windows、macOS、Android、iOS 以及 Web(WASM)。

性能基准测试

平台CPU 型号TEN VAD RTFSilero VAD RTFTEN VAD 库大小Silero VAD 库大小
LinuxAMD Ryzen 9 5900X0.0150-306KB2.16MB
LinuxIntel Xeon Gold 63480.00860.0127306KB2.16MB
WindowsIntel i7-10710U0.0150-464KB(x86)/508KB(x64)2.16MB
macOSM10.0160-731KB2.16MB
AndroidGalaxy J6+0.0570-373KB(v7a)/532KB(v8a)2.16MB

在实际应用中,使用 TEN VAD 可减少 62% 的音频流量,显著降低语音转文本服务的成本。

技术规格与部署

音频要求:支持 16kHz 采样率,可配置跳跃大小(推荐160/256样本=10/16ms帧)。其他采样率需重采样至16kHz。

Sherpa-ONNX TEN VAD

web用户上传MP4 → FFmpeg音频提取 
→ Sherpa-ONNX TEN VAD → 语音段分割 
→ Whisper.cpp转录 
→ opencc-js 繁体转简体字
→ 字幕生成  ->ffmpeg嵌入字幕 -> 返回MP4给用户

Silero VAD

模型获取:ggml-org/whisper-vad 

Silero VAD 是由 Silero AI 团队开发的一个基于深度学习的轻量级语音活动检测(Voice Activity Detection)模型,专门用于从音频流中精确识别和分离人类语音片段。

核心特点

Silero VAD 具有以下显著优势:

  • 高精度:在各种背景噪声、多样语言和不同质量音频中展现出卓越的检测性能

  • 高速处理:能够实时进行语音活动检测,处理速度极快

  • 轻量化架构:模型体积不到 3MB,便于部署和集成

  • 灵活的采样率支持:原生支持 16kHz 和 8kHz 采样率

  • 可变块长度:模型训练基于 30 毫秒时间窗,但可直接支持更长的音频块

  • 高度可移植性:提供 PyTorch 和 ONNX 格式,便于在不同平台部署

技术架构

Silero VAD 采用基于卷积神经网络的深度学习架构,使用了类似 VGGish 的网络结构。该模型通过分析音频信号的多维特征来判断语音活动的存在,相比传统基于能量或频谱的方法具有更强的鲁棒性。

工作原理

Silero VAD 的检测流程如下:

  1. 音频预处理:将音频转换为单声道 WAV 格式,统一采样率至 16kHz

  2. 特征提取:对音频帧进行深度学习特征提取

  3. 概率预测:模型输出每帧的语音活动概率(0-1 之间)

  4. 阈值判断:通常以 0.5 作为阈值,超过该值判定为语音活动

  5. 片段合并:将连续的语音帧合并为完整的语音片段

配合whisper.cpp使用

感度调优版本(适合嘈杂环境)
    --vad \
    --vad-model /home/jbj/openai/whisper/vad_modle/ggml-silero-v5.1.2.bin \
    --vad-threshold 0.6 \
    --vad-min-speech-duration-ms 800 \
    --vad-min-silence-duration-ms 800 \
    --vad-speech-pad-ms 200
高精度版本(适合安静环境)
    --vad \
    --vad-model /home/jbj/openai/whisper/vad_modle/ggml-silero-v5.1.2.bin \
    --vad-threshold 0.3 \
    --vad-min-speech-duration-ms 300 \
    --vad-min-silence-duration-ms 300 \
    --vad-speech-pad-ms 50

VAD 参数详解

  • --vad-threshold 0.5: 语音检测阈值概率,超过此值判定为语音活动

  • --vad-min-speech-duration-ms 500: 最小语音持续时间(以毫秒为单位)。将丢弃短于此值的语音段,以过滤掉短暂的干扰或误报。

  • --vad-min-silence-duration-ms 500: 最小静默持续时间(以毫秒为单位)。沉默时间必须至少如此长才能结束演讲片段。较短的沉默时间将被忽略并作为演讲的一部分。

  • --vad-max-speech-duration-s 30: 最大语音持续时间(以秒为单位)。超过此长度的语音片段将在超过 98 毫秒的静音点处自动拆分为多个片段,以防止片段过长。

  • --vad-speech-pad-ms 100: 以毫秒为单位的语音填充。在每个检测到的语音片段之前和之后添加此数量的填充,以避免切断语音边缘。

  • --vad-samples-overlap 0.1:从每个语音片段延伸到下一个语音片段的音频量,以秒为单位(例如,0.10 = 100 毫秒重叠)。这可确保语音在连接在一起时不会在段之间突然中断。

性能分析

硬件设备信息:

Architecture:                       x86_64
CPU op-mode(s):                     32-bit, 64-bit
Byte Order:                         Little Endian
Address sizes:                      43 bits physical, 48 bits virtual
CPU(s):                             8
On-line CPU(s) list:                0-7
Thread(s) per core:                 1
Core(s) per socket:                 2
Socket(s):                          4
NUMA node(s):                       1
Vendor ID:                          GenuineIntel
CPU family:                         6
Model:                              165
Model name:                         Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
Stepping:                           5
CPU MHz:                            2904.003
BogoMIPS:                           5808.00

模型参数

=== Whisper 语音转文字配置 ===
​
基本配置:
  模型路径: xxx
  音频路径: /home/jbj/openai/whisper/test/out3.wav
  语言: zh
  线程数: 8
  处理器数: 1
​
解码参数:
  熵阈值: 1.8
  对数概率阈值: -0.8
  束搜索大小: 3
  最佳选择数: 5
  最大上下文token数: -1
  单个段落最大字符长度: 80
  温度范围: 0 - 0.2
  温度增量: 0.1
  无语音阈值范围: 0 - 10
  按词分割: 启用
  实时输出: 启用
  输出时间戳: 禁用
​
输出选项:
  输出 SRT: 否
  输出 TXT: 否
  输出目录: ./
=============================
​
验证配置...
✓ 配置验证通过
✓ 模型文件找到:/home/jbj/openai/whisper/whisper_modle/ggml-large-v3.bin (大小:3095033483 字节)
✓ 音频文件找到:/home/jbj/openai/whisper/test/out3.wav (大小:1328632 字节)
加载 Whisper 模型...
whisper_init_from_file_with_params_no_state: loading model from '/home/jbj/openai/whisper/whisper_modle/ggml-large-v3.bin'
whisper_init_with_params_no_state: use gpu    = 0
whisper_init_with_params_no_state: flash attn = 0
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw        = 0
whisper_init_with_params_no_state: devices    = 1
whisper_init_with_params_no_state: backends   = 1
whisper_model_load: loading model
whisper_model_load: n_vocab       = 51866
whisper_model_load: n_audio_ctx   = 1500
whisper_model_load: n_audio_state = 1280
whisper_model_load: n_audio_head  = 20
whisper_model_load: n_audio_layer = 32
whisper_model_load: n_text_ctx    = 448
whisper_model_load: n_text_state  = 1280
whisper_model_load: n_text_head   = 20
whisper_model_load: n_text_layer  = 32
whisper_model_load: n_mels        = 128
whisper_model_load: ftype         = 1
whisper_model_load: qntvr         = 0
whisper_model_load: type          = 5 (large v3)
whisper_model_load: adding 1609 extra tokens
whisper_model_load: n_langs       = 100
whisper_model_load:          CPU total size =  3094.36 MB
whisper_model_load: model size    = 3094.36 MB
whisper_backend_init_gpu: no GPU found
whisper_init_state: kv self size  =   83.89 MB
whisper_init_state: kv cross size =  251.66 MB
whisper_init_state: kv pad  size  =    7.86 MB
whisper_init_state: compute buffer (conv)   =   36.15 MB
whisper_init_state: compute buffer (encode) =  212.31 MB
whisper_init_state: compute buffer (cross)  =    9.27 MB
whisper_init_state: compute buffer (decode) =   99.12 MB
✓ 音频文件加载成功
音频信息:
  - 采样数:664277
  - 时长:41.52 秒
  - 采样率:16000 Hz
配置 Whisper 参数...
✓ Whisper 参数配置完成

基于上述信息,测试图表:

模型名称文件大小(MB)模型类型特点转录
ggml-tiny.bin74.1最小模型超轻量级,适合边缘设备9s
ggml-base.bin141.1基础模型平衡性能与资源消耗19s
ggml-small.bin465.0小型模型中等精度,适合一般应用33s
ggml-large-v2-q5_0.bin1030.7量化大型v265%压缩率,性能损失minimal181s
ggml-large-v3-q5_0.bin1031.1量化大型v365%压缩率,最新版本优化215s
ggml-large-v3-turbo.bin1549.3大型v3加速版速度优化版本74s
ggml-large-v2.bin2951.3完整大型v2高精度,完整参数244s
ggml-large-v3.bin2951.7完整大型v3最高精度,最新版本239

扩展学习 Whisper变体项目

引入:5个Whisper变体实现与比较 - 汇智网

whisper.cpp

定位:Whisper 模型的 C++ 原生实现

whisper.cpp 将原本基于 Python 的 Whisper 实现完全移植到 C++,专门为本地部署跨平台运行而设计。这种实现方式带来了显著的性能提升和部署灵活性。

核心优势

  • 轻量级部署:无需 Python 环境,可独立运行

  • 跨平台兼容:支持 Windows、macOS、Linux 等多个平台

  • CPU 优化:针对 CPU 推理进行专门优化,支持多线程处理

  • 内存效率:相比 Python 版本显著减少内存占用

  • 易用性:提供简单直观的命令行接口

适用场景:边缘设备部署、资源受限环境、需要跨平台兼容的应用

WhisperX

定位:增强版 Whisper 实现,专注于批量处理和说话人分离

WhisperX 通过批量推理技术实现了令人瞩目的 70倍实时转录速度,同时集成了先进的说话人分离功能。

核心特性

  • 超高速处理:批量推理实现 70 倍实时转录速度

  • 说话人识别:准确识别和分离不同说话人的语音

  • 精确时间戳:通过 wav2vec2 对齐技术提供单词级精确时间戳

  • 内存优化:使用 Faster-Whisper 后端,large-v2 模型仅需不到 8GB GPU 内存

  • VAD 预处理:有效减少幻觉现象

适用场景:会议转录、多人对话分析、需要精确时间戳的应用

Faster-Whisper

定位:Whisper 的高性能优化实现

Faster-Whisper 作为 WhisperX 的后端引擎,专注于推理速度优化和内存使用效率的提升。

技术亮点

  • 速度提升:比原版 Whisper 显著更快的推理速度

  • 内存效率:大幅减少 GPU 内存需求

  • 质量改进:由于优化的推理机制,可能获得比原版更好的结果

  • 完全兼容:保持与原版 Whisper 模型的完全兼容性

适用场景:GPU 环境下的高效推理、大规模语音处理任务

Whisper-Streaming

定位:实时语音转录和翻译系统

Whisper-Streaming 专门解决了原版 Whisper 无法进行实时处理的核心局限性,实现了真正的流式语音处理。

技术创新

  • 实时处理:支持流式音频输入和实时输出

  • 低延迟:针对实时应用优化的延迟控制

  • 多语言支持:继承 Whisper 的多语言转录和翻译能力

  • 流式架构:专门设计的流式处理管道

适用场景:实时字幕生成、语音助手、实时翻译服务、直播转录

Whisper-Medusa

定位:基于 Medusa 技术的推理加速变体

Whisper-Medusa 采用创新的 Medusa 方法来显著提高 Whisper 的推理速度。

技术原理

  • 并行预测:通过增加额外的解码头并行预测多个后续 token

  • 推理加速:减少传统顺序推理的时间开销

  • 速度提升:实现平均 1.5 倍的推理速度提升

  • 质量保持:在提速的同时保持或改善转录质量

适用场景:需要快速推理的应用、实时性要求较高的场景

Distil-Whisper

定位:知识蒸馏压缩的高效模型

Distil-Whisper 采用知识蒸馏技术将大型 Whisper 模型压缩为更小、更快的版本。

核心特征

  • 模型压缩:通过知识蒸馏技术大幅减少模型参数

  • 速度优化:在保持质量的前提下显著提升推理速度

  • 资源友好:降低计算和存储资源需求

  • 质量保证:在压缩过程中尽可能保持原始模型的准确性

适用场景:移动设备部署、资源受限环境、边缘计算应用

性能指标对比

指标whisper.cppWhisperXFaster-WhisperWhisper-StreamingWhisper-MedusaDistil-Whisper
推理速度中等极快(70x 实时)快(4x 提升)实时处理快(1.5x 提升)极快(5.8x 提升)
内存占用极低低(< 8GB GPU)中等高(需更多 VRAM)极低
转录质量标准最佳优秀良好优秀优秀
时间戳精度标准极高(单词级)标准良好标准仅相对时间戳
多语言支持 ✅ 完整支持✅ 完整支持✅ 完整支持✅ 完整支持✅ 完整支持❌ 仅英语
实时处理
说话人分离

根据具体需求选择:

如果需要说话人分离和精确时间戳,选择 WhisperX;

img

如果需要纯粹的速度优化,考虑 Faster-Whisper;

如果需要本地部署或在资源受限环境中运行,whisper.cpp 是最佳选择。

选择建议

需求场景推荐方案次选方案
本地部署 + 跨平台whisper.cppDistil-Whisper
会议转录 + 说话人识别WhisperXFaster-Whisper
高性能批量处理Faster-WhisperWhisperX
实时转录服务Whisper-StreamingWhisper-Medusa
移动端/边缘设备Distil-Whisperwhisper.cpp
资源受限环境whisper.cppDistil-Whisper
GPU 加速应用WhisperXFaster-Whisper
仅英语高效处理Distil-WhisperFaster-Whisper

相关文章

faster-whisper VS openai-whisper

当然这一切的前提是拥有英伟达显卡,如果计算机压根没有英伟达显卡,或者有,但不想或不会安装cuda,那么两者使用任意一个都可以,因为不使用cuda加速的情况下,仅在cpu上运算,二者对环境没啥要求,下载即用,速度也都是一样的慢。

Whisper与WhisperX深度对比分析

ggml-tiny.binWhisper 语音识别模型的一个轻量级版本,基于 GGML 格式(一种为 CPU 优化的量化模型格式)。以下是详细说明: 1. 模型背景 Whisper 是 OpenAI 开源的自动语音识别(ASR)系统,支持多语言转录翻译。 GGML 是一个专注于 CPU 推理的 tensor 库,支持量化(如 4-bit、5-bit 等),显著减少模型体积内存占用。 2. ggml-tiny.bin 特点 轻量化:tiny 是 Whisper 的最小版本,参数量少(约 39M),适合低算力设备(如树莓派、手机等)。 量化版本:.bin 文件通常是 GGML 格式的量化模型,可能为 4-bit 或 5-bit,牺牲少量精度以提升推理速度。 功能:支持基础语音转录,但准确率低于大模型(如 base、small)。 3. 使用场景 嵌入式设备或移动端离线语音识别。 快速原型开发或对延迟敏感的应用。 4. 如何使用 依赖工具:需搭配 whisper.cpp 或类似支持 GGML 的推理库。 示例命令(假设已安装 whisper.cpp): ./main -m models/ggml-tiny.bin -f input.wav 5. 局限性 准确率较低,尤其对复杂口音或背景噪声敏感。 仅支持转录,无翻译功能(除非额外微调)。 如需更高精度,可考虑 ggml-base.binggml-small.bin。模型文件通常从开源社区(如 Hugging Face)获取。 怎样使用可以参考:https://blog.csdn.net/qq_33906319/article/details/147320987?sharetype=blogdetail&sharerId=147320987&sharerefer=PC&sharesource=qq_3390631
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值