)
人工智能语音音频本地部署推理引擎【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址https://gitcode.com/GitHub_Trending/wh/whisper.cpp点击查看免费下载whisper.cpp 是 OpenAI Whisper 自动语音识别ASR模型的高性能 C/C 移植实现以零依赖、低内存占用和跨平台著称可在手机、嵌入式设备、桌面乃至浏览器WebAssembly中离线运行完整推理。本文以仓库根目录 README.md 为主线结合 include/whisper.h、models/README.md、examples/cli/README.md 等源码与文档系统讲解环境搭建、模型获取与量化、whisper-cli完整参数、实时流式转写、各硬件加速后端的构建方式以及 C API 二次开发路径帮助你从零开始把 Whisper 部署到自己的应用中。项目概览whisper.cpp 是什么whisper.cpp 将 OpenAI 的 Whisper 自动语音识别模型移植为纯 C/C 实现核心特征是不依赖任何第三方深度学习框架。模型的全部高层实现在 include/whisper.h 与 src/whisper.cpp 两个文件中其余代码属于ggml机器学习库本仓库内的 ggml 目录即为该库的源码。这种轻量化的实现方式使其非常容易集成到不同平台和应用程序中。项目的主要能力与特性均可在仓库中直接印证纯 C/C 实现无框架依赖Apple Silicon 一等公民通过 ARM NEON、Accelerate 框架、Metal 与 Core ML 深度优化x86 架构的 AVX 指令集支持POWER 架构的 VSX 指令集支持混合 F16 / F32 精度整数量化支持Q4、Q5、Q8 等格式运行期零内存分配模型加载后推理过程不再动态分配内存Vulkan GPU 支持纯 CPU 推理支持NVIDIA GPU 高效支持cuBLAS 自定义 CUDA kernelOpenVINO 支持Intel CPU/GPUAscend NPU 支持CANNC 风格 API详见 include/whisper.h。支持的平台官方 README 列出的已验证范围macOSIntel 与 ArmiOS示例见 examples/whisper.objcAndroid示例见 examples/whisper.androidJava绑定见 bindings/java/README.mdLinux / FreeBSDWebAssembly示例见 examples/whisper.wasmWindowsMSVC 与 MinGWRaspberry PiDocker快速开始从零跑通一次语音转写1. 克隆仓库并下载模型git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp然后下载一个已转换为ggml格式的 Whisper 模型。以英文base.en模型为例sh ./models/download-ggml-model.sh base.en该脚本位于 models/download-ggml-model.sh默认从 Hugging Face 上的ggerganov/whisper.cpp仓库拉取预转换模型。脚本内置白名单支持 tiny / base / small / medium / large-v1 / large-v2 / large-v3 / large-v3-turbo 等数十个变体含.en纯英文版、-q5_1/-q8_0量化版与-tdrz说话人分段版。脚本会优先尝试wget2、wget最后回退到curl完成下载若本地已存在同名模型文件则直接跳过。提示脚本默认把模型保存到models/目录也可通过第二个参数指定存放路径。不带参数运行时脚本会列出全部可用模型清单。2. 构建 whisper-cli 并转写音频# 构建项目 cmake -B build cmake --build build --config Release # 转写一段音频 ./build/bin/whisper-cli -f samples/jfk.wav其中 examples/cli 是演示库绝大多数功能的主示例也可作为其他项目使用whisper.cpp库的参考实现。一条命令的快捷演示直接执行make base.en它会自动下载base.en模型转换为自定义ggml格式并对samples目录下所有.wav样本运行推理。更多模型对应快捷目标make -j tiny.en make -j tiny make -j base.en make -j base make -j small.en make -j small make -j medium.en make -j medium make -j large-v1 make -j large-v2 make -j large-v3 make -j large-v3-turbo3. 输入音频格式要求注意whisper-cli目前只接受 16-bit WAV 文件使用前请确保输入已转换。可以用ffmpeg统一转换ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav上面的参数将音频重采样为 16 kHz 单声道 16-bit PCM——这也是 Whisper 模型的采样标准头文件 include/whisper.h 中定义WHISPER_SAMPLE_RATE 16000。4. 获取更多测试音频make -j samples该命令会从 Wikipedia 下载若干音频文件并用ffmpeg转换为 16-bit WAV 格式。仓库自带 samples/jfk.wav 可作为最常用的测试样本。详细的命令行帮助随时可用./build/bin/whisper-cli -h查看。模型体系ggml 格式与可用模型清单ggml 格式是什么原始 OpenAI PyTorch 模型经过转换变成自定义ggml二进制格式以便在 C/C 中直接加载。单个ggml模型文件打包了四类内容模型参数hparamsmel 滤波器mel filters词汇表vocabulary权重weights。转换由 models/convert-pt-to-ggml.py 脚本完成其文件头注释详细描述了输出二进制格式的字段布局各变量的维度数、名称长度、维度、名称、数据。获取ggml模型有三种途径使用 models/download-ggml-model.sh 下载预转换模型手动下载预转换模型可从模型发布渠道获取使用convert-pt-to-ggml.py自行转换mkdir models/whisper-medium python models/convert-pt-to-ggml.py ~/.cache/whisper/medium.pt ~/path/to/repo/whisper/ ./models/whisper-medium mv ./models/whisper-medium/ggml-model.bin models/ggml-medium.bin rmdir models/whisper-medium说明自行转换需要先克隆 OpenAI Whisper 源码仓库以获取 tokenizer、mel 滤波器等算法资产并预先在~/.cache/whisper/下载好原始 PyTorch 模型。可用模型与 SHA 校验值以下清单来自 models/README.md模型为多语言版名称含.en的为纯英文版后缀-q5_0为量化版后缀-tdrz支持基于 tinydiarize 的说话人轮次标记ModelDiskSHA前 40 位tiny75 MiBbd577a113a864445d4c299885e0cb97d4ba92b5ftiny.en75 MiBc78c86eb1a8faa21b369bcd33207cc90d64ae9dfbase142 MiB465707469ff3a37a2b9b8d8f89f2f99de7299dacbase.en142 MiB137c40403d78fd54d454da0f9bd998f78703390csmall466 MiB55356645c2b361a969dfd0ef2c5a50d530afd8d5small.en466 MiBdb8a495a91d927739e50b3fc1cc4c6b8f6c2d022small.en-tdrz465 MiBb6c6e7e89af1a35c08e6de56b66ca6a02a2fdfa1medium1.5 GiBfd9727b6e1217c2f614f9b698455c4ffd82463b4medium.en1.5 GiB8c30f0e44ce9560643ebd10bbe50cd20eafd3723large-v12.9 GiBb1caaf735c4cc1429223d5a74f0f4d0b9b59a299large-v22.9 GiB0f4c8e34f21cf1a914c59d8b3ce882345ad349d6large-v2-q5_01.1 GiB00e39f2196344e901b3a2bd5814807a769bd1630large-v32.9 GiBad82bf6a9043ceed055076d0fd39f5f186ff8062large-v3-q5_01.1 GiBe6e2ed78495d403bef4b7cff42ef4aaadcfea8delarge-v3-turbo1.5 GiB4af2b29d7ec73d781377bfd1758ca957a807e941large-v3-turbo-q5_0547 MiBe050f7970618a659205450ad97eb95a18d69c9ee此外 models/download-ggml-model.sh 还支持tiny-q5_1、tiny-q8_0、base-q5_1、base-q8_0、small-q5_1、small-q8_0、medium-q5_0、medium-q8_0、large-v2-q8_0、large-v3-turbo-q8_0等量化变体。仓库根目录models/下还自带一批以for-tests-为前缀的空模型文件不含权重仅供 CI 运行 sanitizer 测试使用不能用于真实推理。微调模型与蒸馏模型社区使用 Hugging Face Transformers 微调的 Whisper 模型与 OpenAI 原始格式略有不同可用 models/convert-h5-to-ggml.py 读取转换python3 ./whisper.cpp/models/convert-h5-to-ggml.py ./whisper-medium/ ./whisper .蒸馏模型distil-whisper也已获得初步支持转换方式类似。需要留意的是chunk-based 转写策略尚未实现因此使用蒸馏模型时转写质量可能不如理想状态。内存占用参考官方 README 给出的模型磁盘与运行时内存参考取决于线程数与硬件实际值会有浮动ModelDiskMemtiny75 MiB~273 MBbase142 MiB~388 MBsmall466 MiB~852 MBmedium1.5 GiB~2.1 GBlarge2.9 GiB~3.9 GB量化显著降低内存与磁盘占用whisper.cpp 支持对ggml模型做整数量化。量化后的模型占用更少的内存和磁盘空间且视硬件不同可能获得更高处理效率。创建并使用量化模型的完整流程# 用 Q5_0 方法量化模型 cmake -B build cmake --build build --config Release ./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/gb0.wavquantize工具源码位于 examples/quantize/quantize.cpp其核心流程是读取输入模型 → 校验GGML_FILE_MAGIC魔数 → 按目标ggml_ftype对张量逐层量化 → 写出新模型文件。从源码可见默认超参数以 Whisper tiny 为基准如n_vocab 51864、n_audio_ctx 1500、n_text_ctx 448、n_mels 80等量化时依据模型头部信息适配。量化并不会改变模型架构仅改变权重存储精度因此在 examples/cli 等示例中通过-m参数即可无缝切换使用。whisper-cli 完整参数说明whisper-cli是功能最全的命令行入口其参数表完整继承自 examples/cli/README.md。以下是全部选项及默认值usage: ./build-pkg/bin/whisper-cli [options] file0.wav file1.wav ... options: -h, --help [default] show this help message and exit -t N, --threads N [4 ] number of threads to use during computation -p N, --processors N [1 ] number of processors to use during computation -ot N, --offset-t N [0 ] time offset in milliseconds -on N, --offset-n N [0 ] segment index offset -d N, --duration N [0 ] duration of audio to process in milliseconds -mc N, --max-context N [-1 ] maximum number of text context tokens to store -ml N, --max-len N [0 ] maximum segment length in characters -sow, --split-on-word [false ] split on word rather than on token -bo N, --best-of N [5 ] number of best candidates to keep -bs N, --beam-size N [5 ] beam size for beam search -ac N, --audio-ctx N [0 ] audio context size (0 - all) -wt N, --word-thold N [0.01 ] word timestamp probability threshold -et N, --entropy-thold N [2.40 ] entropy threshold for decoder fail -lpt N, --logprob-thold N [-1.00 ] log probability threshold for decoder fail -tp, --temperature N [0.00 ] The sampling temperature, between 0 and 1 -tpi, --temperature-inc N [0.20 ] The increment of temperature, between 0 and 1 -debug, --debug-mode [false ] enable debug mode (eg. dump log_mel) -tr, --translate [false ] translate from source language to english -di, --diarize [false ] stereo audio diarization -tdrz, --tinydiarize [false ] enable tinydiarize (requires a tdrz model) -nf, --no-fallback [false ] do not use temperature fallback while decoding -otxt, --output-txt [false ] output result in a text file -ovtt, --output-vtt [false ] output result in a vtt file -osrt, --output-srt [false ] output result in a srt file -olrc, --output-lrc [false ] output result in a lrc file -owts, --output-words [false ] output script for generating karaoke video -fp, --font-path [/System/Library/Fonts/Supplemental/Courier New Bold.ttf] path to a monospace font for karaoke video -ocsv, --output-csv [false ] output result in a CSV file -oj, --output-json [false ] output result in a JSON file -ojf, --output-json-full [false ] include more information in the JSON file -of FNAME, --output-file FNAME [ ] output file path (without file extension) -np, --no-prints [false ] do not print anything other than the results -ps, --print-special [false ] print special tokens -pc, --print-colors [false ] print colors -pp, --print-progress [false ] print progress -nt, --no-timestamps [false ] do not print timestamps -l LANG, --language LANG [en ] spoken language (auto for auto-detect) -dl, --detect-language [false ] exit after automatically detecting language --prompt PROMPT [ ] initial prompt (max n_text_ctx/2 tokens) -m FNAME, --model FNAME [models/ggml-base.en.bin] model path -f FNAME, --file FNAME [ ] input WAV file path -oved D, --ov-e-device DNAME [CPU ] the OpenVINO device used for encode inference -dtw MODEL --dtw MODEL [ ] compute token-level timestamps -ls, --log-score [false ] log best decoder scores of tokens -ng, --no-gpu [false ] disable GPU -fa, --flash-attn [false ] flash attention --suppress-regex REGEX [ ] regular expression matching tokens to suppress --grammar GRAMMAR [ ] GBNF grammar to guide decoding --grammar-rule RULE [ ] top-level GBNF grammar rule name --grammar-penalty N [100.0 ] scales down logits of nongrammar tokens这些参数与 C API 中的whisper_full_params结构体见 include/whisper.h一一对应。比如-t/--threads对应n_threads、-bo/--best-of对应greedy.best_of、-bs/--beam-size对应beam_search.beam_size而--temperature与--temperature-inc对应temperature/temperature_inc温度回退机制参考了 OpenAI 原始 transcribe 流程。--grammar系列参数则允许用 GBNF 文法约束解码输出仓库 grammars 目录下提供了colors.gbnf、chess.gbnf、assistant.gbnf等现成文法示例。实验性解码特性分段控制、词级时间戳与说话人分段控制文本段长度默认按语义断句输出若需限制每段最大长度例如 16 字符使用-ml 16$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 16 [00:00:00.000 -- 00:00:00.850] And so my [00:00:00.850 -- 00:00:01.590] fellow [00:00:01.590 -- 00:00:04.140] Americans, ask [00:00:04.140 -- 00:00:05.660] not what your [00:00:05.660 -- 00:00:06.840] country can do [00:00:06.840 -- 00:00:08.430] for you, ask [00:00:08.430 -- 00:00:09.440] what you can do [00:00:09.440 -- 00:00:10.020] for your [00:00:10.020 -- 00:00:11.000] country.词级时间戳把--max-len设为 1 即可获得逐词时间戳配合-sow/--split-on-word可强制按词而非按 token 切分$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 1 [00:00:00.000 -- 00:00:00.320] [00:00:00.320 -- 00:00:00.370] And [00:00:00.370 -- 00:00:00.690] so [00:00:00.690 -- 00:00:00.850] my [00:00:00.850 -- 00:00:01.590] fellow [00:00:01.590 -- 00:00:02.850] Americans [00:00:02.850 -- 00:00:03.300] , ...词级时间戳依赖 include/whisper.h 中定义的 token 级时间数据whisper_token_data结构体中的t0/t1字段与word_thold默认 0.01等阈值控制。置信度颜色编码添加--print-colors参数后转写文本会按实验性颜色策略输出用颜色直观区分高/低置信度词./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/gb0.wav --print-colors说话人分段tinydiarize实验性基于 tinydiarize 方案的本地说话人轮次检测需要搭配-tdrz模型# 下载 tinydiarize 兼容模型 ./models/download-ggml-model.sh small.en-tdrz # 运行并添加 -tdrz 参数 ./build/bin/whisper-cli -f ./samples/a13.wav -m ./models/ggml-small.en-tdrz.bin -tdrz输出中会以[SPEAKER_TURN]标记说话人切换点[00:00:00.000 -- 00:00:03.800] Okay Houston, weve had a problem here. [SPEAKER_TURN] [00:00:03.800 -- 00:00:06.200] This is Houston. Say again please. [SPEAKER_TURN] [00:00:06.200 -- 00:00:08.260] Uh Houston weve had a problem. ...对应地C API 提供whisper_full_get_segment_speaker_turn_next()查询某段后是否预测为说话人轮次切换whisper_full_params中的tdrz_enable字段控制该特性开关。卡拉 OK 风格视频生成利用-owts参数输出“逐词高亮”的卡拉 OK 风格视频生成脚本需要系统装有ffmpeg./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -owts source ./samples/jfk.wav.wts ffplay ./samples/jfk.wav.mp4-owts会生成一个.wav.wtsbash 脚本source执行后调用ffmpeg渲染出当前朗读词被高亮的 mp4 视频。仓库 examples/generate-karaoke.sh 提供了更便捷的封装脚本。多模型对比视频scripts/bench-wts.sh 可生成不同模型在同一音频上的横向对比视频./scripts/bench-wts.sh samples/jfk.wav ffplay ./samples/jfk.wav.all.mp4硬件加速后端构建选项与适用场景Apple SiliconMetal 与 Core ML在 Apple Silicon 上推理默认通过 Metal 在 GPU 上全量执行。若进一步启用 Core MLEncoder 推理可交由 Apple Neural EngineANE运行相比纯 CPU 可获得数倍加速。配置步骤安装 Python 依赖pip install ane_transformers pip install openai-whisper pip install coremltools需确认 Xcode 已安装并执行xcode-select --install安装命令行工具建议使用 Python 3.10建议使用 macOS Sonoma14或更新版本旧版本系统可能出现转写幻觉问题可选使用 Miniconda 管理环境如conda create -n py310-whisper python3.10 -y。生成 Core ML 模型以base.en为例./models/generate-coreml-model.sh base.en生成物为models/ggml-base.en-encoder.mlmodelc目录。带 Core ML 支持构建cmake -B build -DWHISPER_COREML1 cmake --build build -j --config Release正常运行示例加载日志可见 Core ML 相关输出$ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav whisper_init_state: loading Core ML model from models/ggml-base.en-encoder.mlmodelc whisper_init_state: first run on a device may take a while ... whisper_init_state: Core ML model loaded system_info: n_threads 4 / 10 | AVX 0 | AVX2 0 | AVX512 0 | FMA 0 | NEON 1 | ARM_FMA 1 | F16C 0 | FP16_VA 1 | WASM_SIMD 0 | BLAS 1 | SSE3 0 | VSX 0 | COREML 1 |首次运行较慢是因为 ANE 服务会把 Core ML 模型编译为设备特定格式后续运行会明显更快。Core ML 实现细节参考 src/coreml 目录包含 encoder/decoder 的 Core ML 实现与头文件。NVIDIA GPUCUDA 加速借助 cuBLAS 与自定义 CUDA kernelWhisper 可在 NVIDIA 显卡上高效推理。前提是已安装 CUDA 工具链然后cmake -B build -DGGML_CUDA1 cmake --build build -j --config Release对应的 GPU 内核实现位于 ggml/src/ggml-cuda 目录支持fattnflash attention、mmvq矩阵向量量化等多种优化 kernel。GPU 设备选择由 include/whisper.h 中whisper_context_params的gpu_device字段控制。Vulkan GPU 支持跨厂商 GPU 加速方案只要显卡驱动支持 Vulkan API 即可cmake -B build -DGGML_VULKAN1 cmake --build build -j --config ReleaseVulkan 后端实现位于 ggml/src/ggml-vulkan其中包含大量.comp计算着色器add、mul、norm、rope、softmax、dequant 等算子。BLAS CPU 支持OpenBLASEncoder 处理可通过 OpenBLAS 在 CPU 上加速。需预先安装 OpenBLAS然后cmake -B build -DGGML_BLAS1 cmake --build build -j --config ReleaseOpenVINO 支持在支持 OpenVINO 的平台上x86 CPU、Intel 集成/独立 GPUEncoder 推理可转移到 OpenVINO 设备执行获得显著加速。建立 Python 虚拟环境并安装依赖建议 Python 3.10Windowscd models python -m venv openvino_conv_env openvino_conv_env\Scripts\activate python -m pip install --upgrade pip pip install -r requirements-openvino.txtLinux / macOScd models python3 -m venv openvino_conv_env source openvino_conv_env/bin/activate python -m pip install --upgrade pip pip install -r requirements-openvino.txt生成 OpenVINO encoder 模型以base.en为例python convert-whisper-to-openvino.py --model base.en产物为ggml-base.en-encoder-openvino.xml/.binIR 模型文件建议移动到ggml模型同目录——这是 OpenVINO 扩展运行时默认搜索的位置。安装 OpenVINO 工具包并设置环境以 Linux 为例source .../setupvars.shWindows 为setupvars.bat然后构建cmake -B build -DWHISPER_OPENVINO1 cmake --build build -j --config Release运行日志可见 OpenVINO 加载信息与设备选择$ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav whisper_ctx_init_openvino_encoder: loading OpenVINO model from models/ggml-base.en-encoder-openvino.xml whisper_ctx_init_openvino_encoder: first run on a device may take a while ... whisper_openvino_init: path_model models/ggml-base.en-encoder-openvino.xml, device GPU, cache_dir models/ggml-base.en-encoder-openvino-cache whisper_ctx_init_openvino_encoder: OpenVINO model loaded system_info: n_threads 4 / 8 | ... | OPENVINO 1 |首次运行较慢OpenVINO 需将 IR 模型编译为设备特定 blob 并缓存后续运行会直接复用缓存。默认设备为 CPU可通过-oved参数切换。OpenVINO 集成源码见 src/openvino/whisper-openvino-encoder.cppC API 侧对应whisper_ctx_init_openvino_encoder()。Ascend NPU 支持CANNAscend NPU 通过 CANN 与 AI Core 提供推理加速。已验证设备Ascend NPUStatusAtlas 300T A2Support需先安装 CANN toolkit然后构建cmake -B build -DGGML_CANN1 cmake --build build -j --config Release运行方式与常规一致./build/bin/whisper-cli -f samples/jfk.wav -m models/ggml-base.en.bin -t 8注意若在 Ascend NPU 上遇到问题可在项目讨论区以[CANN]为前缀提报若在自己的设备上跑通也欢迎更新“已验证设备”表格。实时语音输入whisper-streamexamples/stream 演示了从麦克风做实时推理的朴素实现工具每半秒采样一次并持续运行转写。cmake -B build cmake --build build --config Release ./build/bin/stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000即每 500 ms 采样一帧、累计 5000 ms 音频执行一次转写。该工具依赖 SDL2 采集麦克风音频构建前需安装# Debian 系 sudo apt-get install libsdl2-dev # Fedora sudo dnf install SDL2 SDL2-devel # macOS brew install sdl2 cmake -B build -DWHISPER_SDL2ON cmake --build build --config Release滑窗模式 VAD将--step设为 0 即进入滑窗模式——仅当检测到语音活动后才转写./build/bin/whisper-stream -m ./models/ggml-base.en.bin -t 6 --step 0 --length 30000 -vth 0.6此时使用一个非常基础的 VAD 检测器-vth决定 VAD 阈值值越大越容易判定为静音。一般0.6左右可用具体需按场景调优。检测到静音时工具会转写最近--length毫秒的音频并输出便于解析的转写块。该示例另有浏览器版本 examples/stream.wasm。性能评估whisper-bench 与 bench.pyexamples/bench 提供whisper-bench工具只运行模型的 Encoder 部分并打印耗时用于横向比较不同系统配置下的推理性能。此外 scripts/bench.py 提供多模型、多音频的批量基准脚本用 Python 编写、易于修改扩展python3 scripts/bench.py -f samples/jfk.wav -t 2,4,8 -p 1,2默认对models目录下任意标准模型执行测试输出结果为 CSV 文件方便后续统计分析。C API 与二次开发最小集成示例include/whisper.h 头文件自带基本用法注释展示最直接的库调用方式#include whisper.h // ... whisper_context_params cparams whisper_context_default_params(); struct whisper_context * ctx whisper_init_from_file_with_params(/path/to/ggml-base.en.bin, cparams); if (whisper_full(ctx, wparams, pcmf32.data(), pcmf32.size()) ! 0) { fprintf(stderr, failed to process audio\n); return 7; } const int n_segments whisper_full_n_segments(ctx); for (int i 0; i n_segments; i) { const char * text whisper_full_get_segment_text(ctx, i); printf(%s, text); } whisper_free(ctx);其中pcmf32是 32 位浮点格式的 RAW 音频数据。头文件中还定义了关键常量WHISPER_SAMPLE_RATE 16000采样率、WHISPER_N_FFT 400FFT 点数、WHISPER_HOP_LENGTH 160hop 长度、WHISPER_CHUNK_SIZE 3030 秒分块。核心调用链从 C API 可以清晰看到 Whisper 推理的四个阶段这也是 src/whisper.cpp 内部的实际调用链whisper_pcm_to_mel()将 RAW PCM 音频转换为 log mel 频谱图whisper_encode()对频谱图运行 Encoderwhisper_decode()运行 Decoder 获得下一个 token 的 logits 与概率whisper_full()一站式完成 “PCM → log mel → encoder → decoder → text” 全流程。另有whisper_full_parallel()可将音频分块并行处理某些场景可提速但分块首尾的转写准确率可能下降。解码策略由whisper_sampling_strategy枚举定义支持WHISPER_SAMPLING_GREEDY贪心对应 OpenAI GreedyDecoder与WHISPER_SAMPLING_BEAM_SEARCH束搜索对应 OpenAI BeamSearchDecoder两种。回调与精细控制whisper_full_params见 include/whisper.h支持多种回调whisper_new_segment_callback每个新文本段生成时回调流式场景推荐使用回调而非print_realtimewhisper_progress_callback进度更新回调whisper_encoder_begin_callbackEncoder 开始前回调返回 false 可中止计算whisper_logits_filter_callback采样前修改 logitsabort_callbackggml 计算前的中止检查。参数层面还覆盖temperature/temperature_inc温度与回退、entropy_thold/logprob_thold/no_speech_thold解码失败判定阈值、suppress_blank/suppress_nst空白与非语音 token 抑制、language/detect_language语言指定或自动检测whisper_lang_auto_detect()底层参考了 OpenAI 的 decoding 实现、initial_prompt初始提示最多n_text_ctx/2个 token、以及 GBNF 文法约束grammar_rules、grammar_penalty。性能信息与系统信息C API 还提供whisper_print_timings()/whisper_get_timings()输出各阶段耗时sample / encode / decode / batchd / prompt以及whisper_print_system_info()打印 CPU 特性AVX、NEON、FMA、BLAS、COREML、OPENVINO 等CLI 启动时打印的system_info行即来源于此。官方示例矩阵仓库 examples 目录提供了从 CLI 到完整 App 的多层次参考实现部分可跑在浏览器里示例Web 版本说明whisper-cliwhisper.wasm音频转写/翻译命令行工具whisper-benchbench.wasm本机 Whisper 性能基准whisper-streamstream.wasm麦克风实时转写whisper-commandcommand.wasm从麦克风接收语音命令的语音助手whisper-server-带 OAI 风格 API 的 HTTP 转写服务器whisper-talk-llama-与 LLaMA 机器人对话whisper.objc-iOS 移动应用whisper.swiftui-SwiftUI iOS/macOS 应用whisper.android-Android 移动应用whisper.nvim-Neovim 语音转文字插件generate-karaoke.sh-一键生成卡拉 OK 视频的辅助脚本livestream.sh-直播音频转写yt-wsp.sh-下载并转写/翻译 VOD 视频wchesswchess.wasm语音控制的国际象棋安装与生态通过 Conan 安装可使用 Conan 安装预编译二进制或从源码构建conan install --requireswhisper-cpp/[*] --buildmissing语言绑定官方与社区为多种语言提供了绑定仓库内可直接查看的有Go bindings/go含 go-whisper 示例Java bindings/javaRuby bindings/rubyJavaScript / WebAssembly bindings/javascript 与 libwhisper.worker.js此外社区还维护 Rust、Objective-C/Swift、.NET、Python、R、Unity 等绑定详见根 README.md 的 Bindings 章节。测试与质量保障仓库 tests 目录包含test-c.cC API 冒烟测试、tests/run-tests.sh端到端转写对比含en-0-ref.txt等参考输出以及多个语言的单元测试如 bindings/go/pkg/whisper/context_test.go。配合models/下for-tests-前缀的空模型CI 可运行各类 sanitizer 测试而不需下载大模型。已知限制仅推理Inference onlywhisper.cpp 目前只提供推理能力不包含训练/微调流程模型训练仍需在 PyTorch 生态中完成再通过转换脚本导入。总结如何选择你的部署路径综合上文可以按以下思路快速落地本机体验sh ./models/download-ggml-model.sh base.encmake -B build cmake --build build --config Release./build/bin/whisper-cli -f samples/jfk.wav全程无需 Python 框架资源受限设备优先选择tiny/base或-q5_0/-q8_0量化模型量化流程见上文“量化”一节性能敏感场景按硬件选择后端——Apple Silicon 用 Metal/Core MLNVIDIA 用-DGGML_CUDA1Intel 平台用 OpenVINO 或 Vulkan华为昇腾用 CANN实时/流式场景参考 examples/stream 的滑窗 VAD 模式产品化集成以 include/whisper.h 的 C API 为契约参考 examples/server 的 HTTP 服务形态或 examples/cli 的参数组织方式并结合对应语言绑定快速接入现有技术栈。赞分享人工智能语音音频本地部署推理引擎【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址https://gitcode.com/GitHub_Trending/wh/whisper.cpp点击查看免费下载相关推荐终极指南whisper.cpp语音识别快速上手与实战应用终极指南whisper.cpp语音识别快速上手与实战应用 whisper.cpp 是一个高性能的 C/C语音识别 开源项目它是 OpenAI 的 Whi人工智能语音音频本地部署推理引擎Whisper语音识别快速上手完整指南从零部署到实战应用Whisper语音识别快速上手完整指南从零部署到实战应用 还在为语音识别部署的复杂依赖而头疼吗作为高性能GPGPU推理引擎Whisper能够将OpenAI人工智能语音音频本地部署桌面应用5分钟快速上手Whisper API语音识别实战指南5分钟快速上手Whisper API语音识别实战指南 还在为语音转文本的复杂技术而头疼吗Whisper API为你提供了一套完整的解决方案让你在几分钟内就上一篇aiohttp WebSocket 关闭码校验修复拒绝对端 Close 帧中的 1006ABNORMAL_CLOSURE下一篇Windows 和 Office 一键 KMS 激活完整指南3 分钟搞定之后自动续期创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考