项目介绍
Whisper:OpenAI 出品的“万能”语音识别器
-
它究竟是什么?
Whisper 是 OpenAI 在 2022 年发布的一个大规模自动语音识别(ASR)+ 语音翻译模型。简单说,它能自动听懂并把语音“听写”成文字,还能把多种语言的语音翻译成英文。 -
为何它厉害?
-
训练数据极大:用了 68 万小时的多语言、多任务标注音频,覆盖 98 种语言。
-
零样本能力:不需要针对特定口音或场景调优,就能直接用,非常“通用”。
-
多功能:可做识别、翻译、语言检测,还能输出每句话的时序戳。
-
开源可用:模型权重和推理代码都公开,支持 Python、PyTorch,只要有显卡就能跑。
-
-
它如何工作?
-
预处理:把音频切成最长 30 秒一段,转成“声音图”(Log-Mel 频谱)。
-
编码器(Encoder):读入声音图,提取出“声音特征”序列。
-
解码器(Decoder):根据特征和特殊任务指令(“这是英语”“请翻译为英文” 等),一步步生成文字输出。
-
全程都是一个端到端的 Transformer 模型,不像传统 ASR 要拆好多模块。
-
-
对普通人意味着什么?
-
无论短视频、会议录音,还是多语言采访,Whisper 都能一键“听写+翻译”
-
要求高显存:原始模型跑“大模型”至少需 10 GB 显卡,否则要量化或分段处理
-
适合做研究和原型,日常小规模转录也可按需剪裁模型
-
whisper.cpp:让 Whisper 在你电脑上“随手可用”
-
它是什么?
whisper.cpp 是社区开发者(Georgi Gerganov)用 纯 C/C++ 重写的 Whisper 推理引擎,依赖轻量级的ggml库,能在无需 CUDA 或 PyTorch 的情况下,只靠 CPU 运行 Whisper。 -
为什么要它?
-
门槛低:无须高端显卡,也不需要安装 Python、PyTorch。
-
速度优:通过低精度量化(8/4/2-bit)和高效内存布局,CPU 单线程就能跑出可用速度。
-
跨平台:Windows/Mac/Linux/Raspberry Pi/Android/iOS 等几乎全支持,只需编译一次就能跑。
-
-
它如何运行?
-
下载源码后,用
make编译生成一个可执行文件(如main或whisper)。 -
一行命令就能把音频转文字
-
量化模型(从 32-bit float 缩小到 8-bit 或更低),可把原先上 GB 级的模型文件压到几十 MB,从而大幅节省内存。
-
-
对普通人意味着什么?
-
更易用:在普通笔记本、嵌入式设备上也能做离线语音识别,无需网络,也不必折腾深度学习环境。
-
轻量便携:走到哪儿拷贝一个程序和量化模型,就能随时识别翻译。
-
社区友好:大量脚本和教程,入门零门槛;支持自定义参数(比如只识别中文、只输出时间戳等)。
-
小结
-
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
-
克隆仓库
bashgit clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp
-
编译项目
-
使用 CMake(可定制化,支持多线程)
bash mkdir build && cd build cmake .. make -j$(nproc)
-
下载模型
whisper.cpp 提供多种模型,可根据准确度与资源消耗平衡选择:
截至 2025年8月26日,在 whisper.cpp 框架中,最强的中文语音识别模型主要有两个候选:
| 特性 | ggml-large-v3 | ggml-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:语言代码(如zh、en)
-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线程
未来扩展(针对会议场景定制)
说话人分离:当前无
-tdrz,但会议纪要常需区分说话人。加--tinydiarize并用 tdrz 模型(e.g., small.en-tdrz),或集成外部工具如 pyannote-audio。无 VAD 集成:会议音频常有静音/噪声,缺少 VAD 会增加幻听风险。
未利用硬件加速:命令未指定 GPU,如果有可用 GPU(如 NVIDIA),会浪费加速潜力。
支持(仅限 Linux)opus,aac音频。
# 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模型的VAD支持方式
2025年8月26日 推荐用于 Whisper 的开源 VAD 模型
主要推荐:TEN VAD、Silero VAD、WebRTC VAD、stefanwebb/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 |
| stefanwebb/open-voice-activity-detection | - 完整Silero VAD开源实现 - 支持自定义数据集训练 - 计划LoRA微调与评估脚本 | 与Silero VAD同级 | Python示例 & Web/UI集成 | CC BYSA 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 RTF | Silero VAD RTF | TEN VAD 库大小 | Silero VAD 库大小 |
|---|---|---|---|---|---|
| Linux | AMD Ryzen 9 5900X | 0.0150 | - | 306KB | 2.16MB |
| Linux | Intel Xeon Gold 6348 | 0.0086 | 0.0127 | 306KB | 2.16MB |
| Windows | Intel i7-10710U | 0.0150 | - | 464KB(x86)/508KB(x64) | 2.16MB |
| macOS | M1 | 0.0160 | - | 731KB | 2.16MB |
| Android | Galaxy J6+ | 0.0570 | - | 373KB(v7a)/532KB(v8a) | 2.16MB |
在实际应用中,使用 TEN VAD 可减少 62% 的音频流量,显著降低语音转文本服务的成本。
技术规格与部署
音频要求:支持 16kHz 采样率,可配置跳跃大小(推荐160/256样本=10/16ms帧)。其他采样率需重采样至16kHz。
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 的检测流程如下:
-
音频预处理:将音频转换为单声道 WAV 格式,统一采样率至 16kHz
-
特征提取:对音频帧进行深度学习特征提取
-
概率预测:模型输出每帧的语音活动概率(0-1 之间)
-
阈值判断:通常以 0.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.bin | 74.1 | 最小模型 | 超轻量级,适合边缘设备 | 9s |
| ggml-base.bin | 141.1 | 基础模型 | 平衡性能与资源消耗 | 19s |
| ggml-small.bin | 465.0 | 小型模型 | 中等精度,适合一般应用 | 33s |
| ggml-large-v2-q5_0.bin | 1030.7 | 量化大型v2 | 65%压缩率,性能损失minimal | 181s |
| ggml-large-v3-q5_0.bin | 1031.1 | 量化大型v3 | 65%压缩率,最新版本优化 | 215s |
| ggml-large-v3-turbo.bin | 1549.3 | 大型v3加速版 | 速度优化版本 | 74s |
| ggml-large-v2.bin | 2951.3 | 完整大型v2 | 高精度,完整参数 | 244s |
| ggml-large-v3.bin | 2951.7 | 完整大型v3 | 最高精度,最新版本 | 239 |
扩展学习 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.cpp | WhisperX | Faster-Whisper | Whisper-Streaming | Whisper-Medusa | Distil-Whisper |
|---|---|---|---|---|---|---|
| 推理速度 | 中等 | 极快(70x 实时) | 快(4x 提升) | 实时处理 | 快(1.5x 提升) | 极快(5.8x 提升) |
| 内存占用 | 极低 | 低(< 8GB GPU) | 低 | 中等 | 高(需更多 VRAM) | 极低 |
| 转录质量 | 标准 | 最佳 | 优秀 | 良好 | 优秀 | 优秀 |
| 时间戳精度 | 标准 | 极高(单词级) | 标准 | 良好 | 标准 | 仅相对时间戳 |
| 多语言支持 | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 | ❌ 仅英语 |
| 实时处理 | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 说话人分离 | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
根据具体需求选择:
如果需要说话人分离和精确时间戳,选择 WhisperX;

如果需要纯粹的速度优化,考虑 Faster-Whisper;
如果需要本地部署或在资源受限环境中运行,whisper.cpp 是最佳选择。
选择建议
| 需求场景 | 推荐方案 | 次选方案 |
|---|---|---|
| 本地部署 + 跨平台 | whisper.cpp | Distil-Whisper |
| 会议转录 + 说话人识别 | WhisperX | Faster-Whisper |
| 高性能批量处理 | Faster-Whisper | WhisperX |
| 实时转录服务 | Whisper-Streaming | Whisper-Medusa |
| 移动端/边缘设备 | Distil-Whisper | whisper.cpp |
| 资源受限环境 | whisper.cpp | Distil-Whisper |
| GPU 加速应用 | WhisperX | Faster-Whisper |
| 仅英语高效处理 | Distil-Whisper | Faster-Whisper |
相关文章
faster-whisper VS openai-whisper
当然这一切的前提是拥有英伟达显卡,如果计算机压根没有英伟达显卡,或者有,但不想或不会安装cuda,那么两者使用任意一个都可以,因为不使用cuda加速的情况下,仅在cpu上运算,二者对环境没啥要求,下载即用,速度也都是一样的慢。
2642

被折叠的 条评论
为什么被折叠?



