whisper-ctranslate2 是一个基于 CTranslate2 的 Whisper 命令行客户端,与原始 OpenAI Whisper 客户端兼容,由 Softcatala 开发并开源。它使用 CTranslate2 和 faster-whisper 的 Whisper 实现,在相同准确率下比 openai/whisper 快最多 4 倍,同时占用更少内存;使用批量推理时最多可快 16 倍。
主要能力:
- 与 OpenAI Whisper CLI 兼容,便于迁移。
- 提供预载模型的 Docker 镜像。
- 支持说话人分离(说话人识别)。
- 支持语音活动检测(VAD)过滤以提升质量。
- 可加载自己微调的 Whisper 模型。
- 支持从麦克风实时转写。
- 支持彩色编码的置信度可视化。
安装方式: 安装最新稳定版,直接输入安装命令(资料未给出具体命令文本)。 使用预构建 Docker 镜像:先拉取镜像,镜像包含 small、medium 和 large-v2 模型。使用 --gpus "device=0" 可访问 GPU,若无 GPU 则移除该参数;"$(pwd)":/srv/files/ 将当前目录映射到容器内的 /srv/files/。若需使用镜像中未包含的模型,可创建预载该模型的派生 Docker 镜像,或使用 Docker 卷持久化并共享模型文件。
CPU 与 GPU 支持: 由 CTranslate2 提供 GPU 和 CPU 支持。兼容 x86-64 和 AArch64/ARM64 CPU,并集成多种针对这些平台优化的后端:Intel MKL、oneDNN、OpenBLAS、Ruy 和 Apple Accelerate。GPU 执行需要系统安装 NVIDIA 库 cuBLAS for CUDA 12 和 cuDNN 9 for CUDA 12,请参考 CTranslate2 文档。默认选择可用的最佳硬件进行推理,可使用 --device 和 --device_index 选项手动控制选择。
使用方式: 命令行与 OpenAI Whisper 相同。Whisper 翻译任务将源语言的转写翻译为英语(唯一支持的目标语言)。使用 --help 可查看所有支持的选项及其帮助。
CTranslate2 特定选项: 在 OpenAI Whisper 命令行选项之外,还提供 CTranslate2 或 whisper-ctranslate2 特有的选项。
批量推理: 批量推理独立转写每个片段,可额外提供 2 倍至 4 倍的速度提升。可使用 --batch_size 指定模型解码的最大并行请求数。批量推理使用语音活动检测(VAD)过滤器,并忽略以下参数:compression_ratio_threshold、logprob_threshold、no_speech_threshold、condition_on_previous_text、prompt_reset_on_temperature、prefix、hallucination_silence_threshold。
--compute_type 选项接受 default、auto、int8、int8_float16、int16、float16、float32 值,表示使用的量化类型。在 CPU 上 int8 性能最佳。
从目录加载模型: --model_directory 选项允许指定要加载 CTranslate2 Whisper 模型的目录。例如,加载自己量化的 Whisper 模型版本或自己微调的 Whisper 版本。模型必须为 CTranslate2 格式。
使用语音活动检测(VAD)过滤器: --vad_filter 选项启用语音活动检测(VAD)以过滤掉音频中没有语音的部分。此步骤使用 Silero VAD 模型。VAD 过滤器接受多个附加选项以确定过滤行为:高于某概率值被视为语音;短于 min_speech_duration_ms 的最终语音块被丢弃;语音块的最大持续时间(秒),更长的将在最后静音的时间戳处分割。
--print_colors True 选项使用基于 whisper.cpp 的彩色编码策略打印转写文本,以突出显示高置信度或低置信度的词。
从麦克风实时转写: --live_transcribe True 选项激活从麦克风的实时转写模式。
说话人分离(说话人识别): 使用 pyannote.audio 支持说话人分离以识别说话人。目前支持为片段级别。启用说话人分离需按以下步骤操作:
- 使用 pip install "pyannote.audio==4.0" 安装 pyannote.audio。
- 接受 pyannote/speaker-diarization-community-1 用户条件。
- 在 hf.co/settings/tokens 创建访问令牌。 然后执行时传入 HuggingFace API 令牌作为参数以启用说话人分离,说话人名称会添加到输出文件(如 JSON、VTT 和 SRT 文件)中,例如:[SPEAKER_00]: There is a lot of people in this room。 --speaker_name SPEAKER_NAME 选项允许使用自己的字符串来标识说话人。
适用场景: 适用于需要本地、快速、免费语音转写的用户,包括会议记录、字幕生成、播客转写、实时听写等。支持 CPU 和 GPU,适合不同硬件环境。
限制: 翻译任务仅支持英语作为目标语言。说话人分离目前仅支持片段级别。批量推理会忽略部分参数。GPU 执行需要安装特定 NVIDIA 库。基础转写无需 PyTorch,但说话人分离需要额外安装 pyannote.audio 并接受用户条件、创建访问令牌。