whisper.cpp命令行工具详解:从安装到高级用法

【免费下载链接】whisper.cpp OpenAI 的 Whisper 模型在 C/C++ 中的移植版本。 【免费下载链接】whisper.cpp 项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp

你还在为音频转文本工具复杂的依赖配置而头疼?还在寻找本地化、高性能的语音识别解决方案?本文将带你全面掌握whisper.cpp命令行工具(whisper-cli)的安装配置、基础功能与高级用法,从模型选择到实时转录,从多格式输出到GPU加速,一站式解决语音转文本的全流程需求。读完本文,你将能够:

  • 在Linux/macOS/Windows系统快速部署whisper.cpp环境
  • 根据场景选择最优模型并理解性能 trade-off
  • 掌握15+核心参数的实战配置技巧
  • 实现实时语音转录、说话人分离、字幕生成等高级功能
  • 通过量化、硬件加速等手段优化识别效率

环境准备与安装

系统要求

whisper.cpp对系统资源有一定要求,不同模型的内存占用差异显著:

模型 磁盘空间 内存占用 推荐场景
tiny 75 MiB ~273 MB 嵌入式设备、实时转录
base 142 MiB ~388 MB 平衡速度与精度的通用场景
small 466 MiB ~852 MB 中等精度需求
medium 1.5 GiB ~2.1 GB 高精度转录
large 2.9 GiB ~3.9 GB 最高精度需求

编译安装步骤

Linux/macOS
# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp
cd whisper.cpp

# 编译项目
cmake -B build
cmake --build build --config Release

# 验证安装
./build/bin/whisper-cli -h
Windows (MSVC)
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp
cd whisper.cpp
cmake -B build -G "Visual Studio 17 2022"
cmake --build build --config Release

编译完成后,可执行文件位于build/bin/whisper-cli(Linux/macOS)或build/bin/Release/whisper-cli.exe(Windows)。

模型管理

模型下载

whisper.cpp提供便捷的模型下载脚本,支持多种预训练模型:

# 下载基础英文模型(推荐入门使用)
./models/download-ggml-model.sh base.en

# 下载多语言模型
./models/download-ggml-model.sh medium

# 下载支持说话人分离的模型
./models/download-ggml-model.sh small.en-tdrz

预下载的模型默认保存在models/目录,命名格式为ggml-<模型名>.bin

模型量化

对于资源受限的环境,可通过量化减小模型体积并提升速度:

# 将base.en模型量化为Q5_0格式(体积减少约40%)
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0

# 使用量化模型
./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin samples/jfk.wav

常用量化方法对比:

量化方法 体积缩减 精度损失 推荐场景
q4_0 ~50% 轻微 资源极度受限环境
q5_0 ~40% 极小 平衡体积与精度
q8_0 ~25% 可忽略 对精度要求高的场景

基础功能:音频转录

基本用法

whisper-cli支持WAV格式音频文件的转录,基本命令格式如下:

# 基础转录(使用默认base.en模型)
./build/bin/whisper-cli -f samples/jfk.wav

# 指定模型和语言
./build/bin/whisper-cli -m models/ggml-medium.bin -l zh -f audio.wav

# 输出详细时间戳
./build/bin/whisper-cli -f samples/jfk.wav --print-progress

音频格式转换

whisper.cpp仅支持16-bit PCM WAV格式,可使用ffmpeg转换其他格式:

# MP3转WAV
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav

# 视频提取音频并转换
ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le audio.wav

核心参数详解

性能优化参数
# 设置线程数(根据CPU核心数调整,通常设为核心数的1-2倍)
./build/bin/whisper-cli -t 8 -f audio.wav

# 启用GPU加速(需编译时配置)
./build/bin/whisper-cli -ng 0 -f audio.wav  # 0表示禁用GPU,1表示启用

# 启用Flash Attention加速(需支持的硬件)
./build/bin/whisper-cli -fa -f audio.wav
识别控制参数
# 设置初始提示词(帮助模型理解上下文)
./build/bin/whisper-cli --prompt "以下是技术会议记录" -f meeting.wav

# 限制识别时长(毫秒)
./build/bin/whisper-cli -d 30000 -f long_audio.wav  # 仅处理前30秒

# 设置语言检测
./build/bin/whisper-cli -l auto -f multi_lang.wav  # 自动检测语言

高级功能

多格式输出

whisper-cli支持多种输出格式,满足不同场景需求:

# 输出SRT字幕文件
./build/bin/whisper-cli -f audio.wav -osrt

# 输出JSON格式(含详细元数据)
./build/bin/whisper-cli -f audio.wav -oj

# 输出CSV格式(便于数据分析)
./build/bin/whisper-cli -f audio.wav -ocsv

# 指定输出文件名
./build/bin/whisper-cli -f audio.wav -of result -osrt -oj  # 生成result.srt和result.json

JSON输出示例(简化版):

{
  "language": "en",
  "duration": 11.0,
  "segments": [
    {
      "id": 0,
      "start": 0.0,
      "end": 1.0,
      "text": " And so my fellow Americans,"
    }
  ]
}

实时转录

通过stream示例实现麦克风实时转录:

# 编译stream工具
cmake --build build --target stream

# 实时转录(500ms窗口,5秒上下文)
./build/bin/stream -m models/ggml-base.en.bin -t 4 --step 500 --length 5000

实时转录参数调优:

  • --step:每次处理的音频片段长度(毫秒),越小延迟越低但性能消耗越大
  • --length:上下文窗口长度(毫秒),越大上下文理解越好但延迟越高
  • -t:线程数,根据CPU性能调整

说话人分离

使用支持tinydiarize的模型实现说话人分离:

# 下载支持说话人分离的模型
./models/download-ggml-model.sh small.en-tdrz

# 执行带说话人分离的转录
./build/bin/whisper-cli -m models/ggml-small.en-tdrz.bin -tdrz -f meeting.wav

输出示例:

[00:00:00.000 --> 00:00:03.800]   [SPEAKER_00] Okay Houston, we've had a problem here.
[00:00:03.800 --> 00:00:06.200]   [SPEAKER_01] This is Houston. Say again please.

字幕与 Karaoke 生成

whisper-cli可生成带时间戳的字幕文件,甚至创建Karaoke风格视频:

# 生成字幕文件
./build/bin/whisper-cli -f song.wav -ovtt -osrt

# 生成Karaoke脚本并创建视频
./build/bin/whisper-cli -f song.wav -owts
source ./song.wav.wts  # 执行生成的ffmpeg脚本

Karaoke视频生成依赖ffmpeg,生成的视频会高亮显示当前播放的歌词。

语法引导识别

通过GBNF语法文件约束识别结果,适用于结构化内容识别:

# 使用内置颜色语法识别颜色名称
./build/bin/whisper-cli -f color_command.wav --grammar grammars/colors.gbnf

# 使用自定义命令语法
./build/bin/whisper-cli -f voice_command.wav --grammar my_commands.gbnf --grammar-rule command

示例GBNF语法(colors.gbnf):

root ::= (red | green | blue | yellow | black | white) (space (red | green | blue | yellow | black | white))*
space ::= " "

硬件加速配置

GPU加速(NVIDIA)

# 启用CUDA支持编译
cmake -B build -DGGML_CUDA=1
cmake --build build --config Release

# 验证GPU加速
./build/bin/whisper-cli -f samples/jfk.wav -ng 0  # 0表示启用GPU

Apple Metal加速(macOS/iOS)

# 启用Metal支持
cmake -B build -DGGML_METAL=1
cmake --build build --config Release

OpenVINO加速(Intel设备)

# 生成OpenVINO模型
cd models
python convert-whisper-to-openvino.py --model base.en

# 编译支持OpenVINO
cmake -B build -DWHISPER_OPENVINO=1
cmake --build build --config Release

# 使用OpenVINO加速
./build/bin/whisper-cli -f samples/jfk.wav -oved GPU

高级参数调优

识别精度优化

# 提高识别精度(牺牲速度)
./build/bin/whisper-cli -f audio.wav -bs 10 -bo 20

# 降低识别随机性(适合固定内容)
./build/bin/whisper-cli -f audio.wav -tp 0.0

# 启用单词级时间戳(用于精确字幕)
./build/bin/whisper-cli -f audio.wav -ml 1

性能与资源控制

# 限制内存使用
./build/bin/whisper-cli -f audio.wav -mc 1024  # 限制上下文大小

# 控制输出长度
./build/bin/whisper-cli -f audio.wav -ml 100  # 最大段长度100字符

# 多处理器并行
./build/bin/whisper-cli -f audio.wav -p 2  # 使用2个处理器

噪声抑制与内容过滤

# 抑制特定词汇
./build/bin/whisper-cli -f audio.wav --suppress-regex "(um|uh|like)"

# 设置置信度阈值
./build/bin/whisper-cli -f audio.wav -wt 0.05  # 只保留置信度>5%的词

实战案例

案例1:会议记录自动化

# 1. 转换会议录音
ffmpeg -i meeting.mp3 -ar 16000 -ac 1 -c:a pcm_s16le meeting.wav

# 2. 高精度转录(启用说话人分离)
./build/bin/whisper-cli -m models/ggml-small.en-tdrz.bin -tdrz -f meeting.wav -oj -osrt

# 3. 生成会议摘要(结合其他工具)
jq -r '.segments[].text' meeting.json | summarize-tool > summary.txt

案例2:实时语音助手

# 编译命令行工具
cmake --build build --target command

# 启动语音命令识别
./build/bin/command -m models/ggml-base.en.bin --grammar grammars/assistant.gbnf

案例3:多语言视频字幕生成

# 提取视频音频
ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le audio.wav

# 生成多语言字幕
./build/bin/whisper-cli -m models/ggml-large-v3.bin -l auto -f audio.wav -osrt -of subtitles

# 合并字幕到视频
ffmpeg -i video.mp4 -vf "subtitles=subtitles.srt" output_with_subs.mp4

问题排查与常见错误

常见错误解决

# 错误:内存不足
解决:使用更小模型或量化版本,如将large换为medium或base.en-q5_0

# 错误:无法识别GPU
解决:确认编译时启用对应GPU选项,如-DGGML_CUDA=1,并安装正确驱动

# 错误:音频格式不支持
解决:使用ffmpeg转换为16-bit PCM WAV,命令:ffmpeg -i input -ar 16000 -ac 1 -c:a pcm_s16le output.wav

性能基准测试

使用bench工具评估系统性能:

# 编译基准测试工具
cmake --build build --target bench

# 运行基准测试
./build/bin/bench -m models/ggml-base.en.bin

总结与进阶

whisper.cpp命令行工具提供了从基础转录到高级语音交互的完整功能集,通过本文介绍的安装配置、模型管理、参数调优等内容,你已具备解决大多数语音识别场景的能力。为进一步提升,可探索:

  1. 自定义模型训练:使用convert-h5-to-ggml.py转换微调模型
  2. 集成到应用:通过C API或 bindings(Python/Go/Java等)集成到项目
  3. Web部署:使用whisper.wasm实现在浏览器中运行
  4. 硬件优化:针对特定硬件(如ARM NEON、AVX2)编译优化

收藏本文,关注项目更新,获取最新功能与性能优化技巧!如有问题或优化建议,欢迎在项目仓库提交issue或PR。

【免费下载链接】whisper.cpp OpenAI 的 Whisper 模型在 C/C++ 中的移植版本。 【免费下载链接】whisper.cpp 项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐