ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

whisper.cpp 语音转文字完全指南:从命令行安装到高级转录技巧

whisper.cpp 语音转文字完全指南:从命令行安装到高级转录技巧 whisper.cpp 语音转文字完全指南从命令行安装到高级转录技巧【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp还在为整理一小时的会议录音而逐句手打还在为视频加字幕熬到深夜语音转文字这件事其实可以交给本地工具一口气干完。本文要介绍的 whisper.cpp是 OpenAI 语音识别模型 Whisper 的 C/C 移植版它不联网、不吃显卡也能跑一条命令就能把音频变成文字、字幕甚至带时间戳的数据。读完这篇文章你将收获15 分钟内跑通第一条 whisper.cpp 语音转文字命令一套按需点菜的模型选择方法以及给模型瘦身的量化技巧10 余个核心参数的实战用法让转录又快又准SRT 字幕、JSON、CSV 等多种格式的一键导出方法实时转录、说话人分离、Karaoke 歌词等进阶玩法两份可直接套用的实战案例以及常见报错的应对思路下面我们按从零到一的路线一步步把这位能干的转写员请进你的电脑。第一章 先认识它一个能离线工作的语音识别引擎说起语音识别很多人第一反应是得连云端 API、按分钟付费、还得担心隐私。whisper.cpp 恰好把这些顾虑都解决掉了。它是 OpenAI Whisper 模型的一个极简 C/C 实现核心代码只有两个文件whisper.h和whisper.cpp其余部分依赖一个叫 ggml 的机器学习底层库。它的特点可以概括为四点纯本地运行音频数据不出设备录音内容只属于你自己隐私安全有保障零依赖、轻量不需要 Python 环境、不需要庞大的深度学习框架编译出的程序很小多平台通吃macOS、Linux、Windows 都能跑还支持 iOS、Android甚至能编译成 WebAssembly 塞进浏览器硬件适配灵活纯 CPU 就能工作x86 有 AVX 加速、苹果芯片有 NEON 与 Metal、NVIDIA 显卡走 CUDA、Intel 设备可借力 OpenVINO。一句话总结它把语音转文字这件事从云端搬回了本地像一个随叫随到的私人速记员。接下来我们就正式把它雇佣下来。第二章 15 分钟快速上手跑通你的第一句转录与其纸上谈兵不如先动手。我们把安装、下载模型、运行转录串成一条流水线照着敲即可。第一步把代码仓库请到本地在终端里执行git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp第二步编译项目Linux/macOS 下推荐用 CMakecmake -B build cmake --build build --config ReleaseWindows 用户如果用的是 MSVCVisual Studio把第一句换成指定生成器cmake -B build -G Visual Studio 17 2022 cmake --build build --config Release编译完成后可执行程序在build/bin/目录下主角叫whisper-cli。第三步下载一个模型模型相当于转写员的业务能力得先准备好。项目提供了一个下载脚本一行命令即可./models/download-ggml-model.sh base.en这条命令会下载base 英文模型适合入门默认放进models/目录文件名形如ggml-base.en.bin。第四步转录第一段音频仓库自带了示例音频samples/jfk.wav直接用默认模型转录./build/bin/whisper-cli -f samples/jfk.wav稍等几秒你就能在屏幕上看到带时间戳的英文转写结果。至此你的第一条 whisper.cpp 语音转文字任务宣告成功。✅顺带一提项目还提供了make base.en这种一键命令它会自动完成下载模型 转录 samples 目录下所有 wav的整套流程适合懒得敲命令的同学。把第一句跑通之后接下来要操心的问题就变成了换不同场景时该用哪个模型第三章 像点菜一样选模型五档配置怎么挑whisper.cpp 的模型家族按体积从小到大分成 tiny、base、small、medium、large 五档每档都有纯多语言版和仅英文版带.en后缀。选模型就像点菜胃口精度要求和预算硬件资源得平衡。模型磁盘占用内存占用适合什么场景tiny75 MiB约 273 MB嵌入式设备、低功耗实时转录base142 MiB约 388 MB追求速度与精度平衡的通用场景small466 MiB约 852 MB对精度有中等要求的日常使用medium1.5 GiB约 2.1 GB高精度转录如正式会议large2.9 GiB约 3.9 GB追求最高精度的顶配需求挑选时记住一个朴素原则内存够就往上选一档硬件吃紧就往下降一档。英文内容优先考虑.en版它体积更小、速度更快多语言内容则要用不带后缀的版本。下载脚本支持的型号很全从tiny、small.en-tdrz带说话人分离能力到large-v3、large-v3-turbo高速大模型都在列表里./models/download-ggml-model.sh small.en-tdrz # 支持说话人分离 ./models/download-ggml-model.sh medium # 多语言中档 ./models/download-ggml-model.sh large-v3 # 多语言顶配模型选好了如果机器仍吃力还有最后一招——量化。给模型瘦身量化到底省了多少量化可以把模型权重从高精度压缩到低精度体积变小、推理变快代价是微乎其微的精度损失。quantize工具就是干这个的# 把 base.en 模型量化为 Q5_0 格式 ./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0三种主流量化格式对比如下量化格式体积缩减精度损失适用场景q4_0约 50%轻微资源极度紧张的环境q5_0约 40%极小体积与精度兼顾的折中选择q8_0约 25%可忽略对精度要求苛刻的场景量化后的模型用法不变只是路径换成新文件./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin samples/jfk.wav小贴士下载脚本里也直接提供了预量化的base-q8_0、large-v3-q5_0等型号不必每次都手动量化。模型就绪后下一个现实问题浮出水面我的音频是 MP3、是视频不是 WAV怎么办第四章 音频投喂前的预处理格式转换是关键whisper-cli 目前只认16-bit PCM 单声道 WAV文件。好消息是任何格式都能用 ffmpeg 这个万能转换器搞定一句命令即可# MP3 转 WAV16kHz 采样率、单声道是语音识别的黄金配置 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参数含义拆解一下-ar 16000把采样率设为 16kHz-ac 1强制单声道-c:a pcm_s16le指定 16-bit PCM 编码。这三件套组合拳打下来任何音频都能变成 whisper.cpp 的标准口粮。第五章 让转录结果更听话核心参数逐个击破格式搞定接下来是参数调教环节。这就像给转写员交代工作细则说清楚今天重点听什么、听多久、用几个人干。语言指定与自动检测默认情况下模型会尝试自动判断语言。手动指定往往更稳妥、速度也更快# 指定中文 ./build/bin/whisper-cli -m models/ggml-medium.bin -l zh -f audio.wav # 自动检测 ./build/bin/whisper-cli -l auto -f multi_lang.wav # 只检测语言检测完就退出 ./build/bin/whisper-cli -dl -f audio.wav控制处理范围长音频只想先试听开头用-d限制时长单位毫秒# 只处理前 30 秒 ./build/bin/whisper-cli -d 30000 -f long_audio.wav用提示词带节奏--prompt可以给模型一个初始提示相当于告诉它这段内容的大背景是什么对专业术语、人名地名的识别帮助明显./build/bin/whisper-cli --prompt 以下是技术会议记录涉及数据库和微服务架构 -f meeting.wav分配计算资源线程数-t是最常用的性能开关一般设为核心数的 12 倍./build/bin/whisper-cli -t 8 -f audio.wav-p则控制并行处理器数量适合多核机器进一步压榨性能。参数配齐后就该聊聊成果交付了——毕竟我们真正想要的是字幕文件、结构化数据而不只是屏幕上一闪而过的文字。第六章 一键导出字幕、数据随你挑whisper-cli 的输出格式相当齐全一个开关对应一种文件可以同时叠加使用# 生成 SRT 字幕最通用 ./build/bin/whisper-cli -f audio.wav -osrt # 生成 VTT 字幕网页播放器常用 ./build/bin/whisper-cli -f audio.wav -ovtt # 生成 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两个文件文件名由-of统一管理非常省心。JSON 输出的结构大致长这样简化示例{ language: en, duration: 11.0, segments: [ { id: 0, start: 0.0, end: 1.0, text: And so my fellow Americans, } ] }如果需要更完整的逐词信息可以用-ojffull JSON想要逐词时间戳则用-ml 1配合-sow按词切分这对做逐字字幕特别有用。输出不是终点质量才是。接下来我们把目光投向如何让转写结果更接近完美。第七章 质量调优从听得清到听得准用束搜索换精度beam search束搜索会让模型在多个候选结果中挑选最优组合精度更高但更慢# 提高识别精度牺牲速度 ./build/bin/whisper-cli -f audio.wav -bs 10 -bo 20-bs是束宽-bo是保留的最佳候选数量数值越大越费时量力而行。压低随机性温度参数-tp控制模型输出的随机程度数值越低越死板、越稳定# 降低随机性适合字幕等固定内容 ./build/bin/whisper-cli -f audio.wav -tp 0.0过滤杂音词与低置信度内容口语里常见的嗯、啊、那个可以用正则过滤掉./build/bin/whisper-cli -f audio.wav --suppress-regex (um|uh|like)而-wt可以设置单词置信度阈值只保留足够有把握的词默认 0.01./build/bin/whisper-cli -f audio.wav -wt 0.05控制输出长度与上下文-ml限制每个段落的字符数上限-mc限制上下文窗口大小对长音频的内存控制很有帮助./build/bin/whisper-cli -f audio.wav -ml 100 # 每段最多 100 字符 ./build/bin/whisper-cli -f audio.wav -mc 1024 # 限制上下文大小调优做完很多用户会问能不能再快点这就轮到硬件加速登场了。第八章 提速利器从多线程到 GPU 全家桶CPU 多线程不换硬件的前提下-t 8这类线程参数是见效最快的。配合-pp还可以实时查看转录进度./build/bin/whisper-cli -t 8 -pp -f audio.wavNVIDIA GPUCUDA编译时打开 CUDA 开关即可cmake -B build -DGGML_CUDA1 cmake --build build --config Release需要说明的是whisper-cli 在编译支持 GPU 的情况下默认启用 GPU只有想强制回退到 CPU 时才需要加-ng即--no-gpu。另外-fa可以开启 Flash Attention 加速适合支持的硬件进一步提速./build/bin/whisper-cli -fa -f samples/jfk.wavApple SiliconMetalmacOS 上启用 Metal 后推理会完整跑在 GPU 上体验极佳cmake -B build -DGGML_METAL1 cmake --build build --config ReleaseIntel 设备OpenVINOOpenVINO 适合 Intel CPU/GPU 环境。先转换模型再编译、运行# 转换模型 python models/convert-whisper-to-openvino.py --model base.en # 编译支持 OpenVINO cmake -B build -DWHISPER_OPENVINO1 cmake --build build --config Release # 指定 OpenVINO 编码设备运行 ./build/bin/whisper-cli -f samples/jfk.wav -oved GPU到这里静态音频的转录能力已经拉满。但 whisper.cpp 的看家本领还不止这些——它还能边听边写。第九章 进阶玩法实时转录、说话人分离、歌词与语法约束玩法一麦克风实时转录stream用 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是上下文窗口长度越大对语境的把握越好但响应越慢。想进一步过滤静音还可以调-vthVAD 阈值。玩法二说话人分离tinydiarize会议录音里谁说了什么也能区分出来。先下载专用模型./models/download-ggml-model.sh small.en-tdrz再在转录时加上-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, weve had a problem here. [00:00:03.800 -- 00:00:06.200] [SPEAKER_01] This is Houston. Say again please.玩法三Karaoke 歌词视频-owts会生成一个可执行的 ffmpeg 脚本用于制作逐词高亮的卡拉 OK 视频./build/bin/whisper-cli -f song.wav -owts source ./song.wav.wts # 执行生成的脚本玩法四语法约束识别GBNF通过 GBNF 语法文件可以规定识别结果只能落在某些词上非常适合命令控制类场景。项目自带了grammars/colors.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 语法文件长这样规则清晰得像画流程图root :: (red | green | blue | yellow | black | white) (space (red | green | blue | yellow | black | white))* space :: 基于这套语法约束再配合 command 工具你甚至可以快速搭一个本地的离线语音助手原型cmake --build build --target command ./build/bin/command -m models/ggml-base.en.bin --grammar grammars/assistant.gbnf学了这么多招数是时候组合起来打两场实战了。第十章 实战演练两个拿来即用的完整流程案例一会议录音自动转纪要把一段会议录音变成带说话人标注的纪要全程三步# 1. 格式转换MP3 → 16kHz WAV ffmpeg -i meeting.mp3 -ar 16000 -ac 1 -c:a pcm_s16le meeting.wav # 2. 带说话人分离的高精度转录同时导出 JSON 和 SRT ./build/bin/whisper-cli -m models/ggml-small.en-tdrz.bin -tdrz -f meeting.wav -oj -osrt # 3. 用 jq 提取纯文本交给摘要工具生成纪要 jq -r .segments[].text meeting.json | summarize-tool summary.txt整个流程从录音到纪要全自动中间不需要人工干预。案例二为视频批量生成多语言字幕给一部视频配上字幕同样三步走# 1. 从视频抽取音轨 ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le audio.wav # 2. 用大模型自动检测语言并生成 SRT ./build/bin/whisper-cli -m models/ggml-large-v3.bin -l auto -f audio.wav -osrt -of subtitles # 3. 把字幕烧进视频 ffmpeg -i video.mp4 -vf subtitlessubtitles.srt output_with_subs.mp4到这里你的 whisper.cpp 技能树已经点得七七八八了。不过实操中难免踩坑最后奉上一份避坑速查表。第十一章 避坑指南常见报错与解决思路报错现象解决思路内存不足OOM换小一号模型或改用量化版例如 large 换 medium 或base.en-q5_0提示无法识别 GPU检查编译时是否开启了对应选项如-DGGML_CUDA1并确认显卡驱动已安装提示音频格式不支持用 ffmpeg 转成 16-bit PCM WAVffmpeg -i input -ar 16000 -ac 1 -c:a pcm_s16le output.wav转录速度慢调高-t线程数、考虑量化模型或启用 GPU 加速识别结果语言不对用-l zh显式指定语言避免自动检测误判另外想量化评估自己机器的性能可以编译并运行 bench 基准测试工具cmake --build build --target bench ./build/bin/bench -m models/ggml-base.en.bin它会给出清晰的耗时数据帮你判断硬件瓶颈在哪。写在最后你的语音转文字工具箱已经就位回顾全程我们从零开始认识了 whisper.cpp 这个离线语音识别引擎完成了安装、选型、量化、转码、调参、输出、加速、进阶玩法直到实战落地的一整套闭环。现在你手里的工具足以应对会议纪要、字幕生成、实时转录、语音助手原型等绝大多数日常场景。想更进一步还有三条路值得探索自定义模型用models/convert-h5-to-ggml.py把微调好的模型转换成 ggml 格式再投入生产多语言集成项目提供了 Go、Java、Ruby、Python 等多种语言绑定可以把它嵌入自己的应用Web 部署whisper.wasm 能让浏览器直接跑语音识别无需任何后端。工具已经备好剩下的就交给你的想象力了。动手试试吧第一条转录成功的提示符正在等你点亮。【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表