parakeet-mlx
parakeet-mlx 是一款专为苹果 Silicon 芯片(M1/M2/M3 系列)优化的开源语音识别工具。它将英伟达强大的 Parakeet 自动语音识别模型移植到苹果的 MLX 框架上,让用户能在 Mac 本地高效、隐私安全地将音频文件转换为文字字幕。
这款工具主要解决了在苹果设备上运行高性能语音模型的需求,无需依赖云端服务即可处理 WAV、MP3 等多种格式的音频。它特别适合开发者、研究人员以及需要批量处理音频转录的普通用户。无论是制作视频字幕、会议记录整理,还是进行语音数据研究,parakeet-mlx 都能提供流畅的体验。
其技术亮点在于深度适配苹果硬件,支持多种解码策略(如贪婪搜索和束搜索),并具备处理长音频的分块机制。用户可通过简单的命令行操作或 Python API 快速上手,灵活定制输出格式(如 SRT、VTT、JSON 等),甚至能生成带时间戳的词级高亮字幕。此外,它还提供了局部注意力机制选项,有效降低长音频转录时的内存占用。安装简便,只需一条命令即可通过 uv 或 pip 部署,是苹果生态下极具性价比的本地化语音识别方案。
使用场景
一位独立开发者需要在配备 M2 芯片的 MacBook Pro 上,快速将数十个线下技术分享会的录音文件转为带时间轴的字幕,以便制作视频教程。
没有 parakeet-mlx 时
- 硬件闲置与成本浪费:无法利用 Apple Silicon 强大的神经网络引擎,被迫租用昂贵的云端 GPU 实例进行转录,增加了项目预算。
- 隐私数据泄露风险:必须将未处理的原始会议录音上传至第三方在线服务,对于涉及内部技术细节的内容存在合规隐患。
- 工作流割裂低效:需要手动安装复杂的 Python 依赖环境,且难以在本地命令行中批量处理多个音频文件或自定义输出格式(如 SRT/VTT)。
- 长音频处理困难:面对超过一小时的录音,普通本地模型容易显存溢出崩溃,缺乏智能分块和重叠处理机制。
使用 parakeet-mlx 后
- 极致本地性能:直接调用 MLX 框架驱动 M2 芯片,转录速度大幅提升,无需联网即可完成高质量识别,彻底省去云服务费。
- 数据完全可控:所有音频处理均在本地离线完成,敏感的技术讨论内容无需离开设备,完美满足隐私安全要求。
- 命令行一键批量:通过简单的
parakeet-mlx *.mp3 --output-format srt命令即可批量生成带词级时间戳的字幕,无缝集成到现有脚本中。 - 长音频稳定运行:内置的智能分块(chunking)与重叠(overlap)机制,轻松处理数小时的连续录音,自动避免内存溢出错误。
parakeet-mlx 让苹果用户能在本地以零成本、高隐私的方式,获得媲美云端的专业级语音转写体验。
运行环境要求
- macOS
不需要独立 GPU,依赖 Apple Silicon (M1/M2/M3 等) 芯片利用 MLX 框架进行加速
未说明 (取决于模型大小,0.6B 版本建议 8GB+ 统一内存)

快速开始
Parakeet MLX
基于 MLX 的 Parakeet 模型实现——NVIDIA 的自动语音识别(ASR)模型,专为 Apple Silicon 设计。
安装
[!NOTE]
请确保您的系统已安装ffmpeg,否则 CLI 将无法正常工作。
使用 uv(推荐方式):
uv add parakeet-mlx -U
或者,对于 CLI:
uv tool install parakeet-mlx -U
使用 pip:
pip install parakeet-mlx -U
CLI 快速入门
parakeet-mlx <audio_files> [OPTIONS]
参数
audio_files: 要转录的一个或多个音频文件(WAV、MP3 等)
选项
--model(默认值:mlx-community/parakeet-tdt-0.6b-v3,环境变量:PARAKEET_MODEL)
使用的模型的 Hugging Face 仓库
https://huggingface.co/collections/mlx-community/parakeet--output-dir(默认值:当前目录)
保存转录结果的目录--output-format(默认值:srt,环境变量:PARAKEET_OUTPUT_FORMAT)
输出格式(txt/srt/vtt/json/all)--output-template(默认值:{filename},环境变量:PARAKEET_OUTPUT_TEMPLATE)
输出文件名模板,支持{parent}、{filename}、{index}、{date}。--highlight-words(默认值:False)
在 SRT/VTT 输出中启用词级时间戳--verbose/-v(默认值:False)
打印详细的进度信息--decoding(默认值:greedy,环境变量:PARAKEET_DECODING)
解码方法(greedy或beam)
目前仅 TDT 模型支持beam解码--chunk-duration(默认值:120 秒,环境变量:PARAKEET_CHUNK_DURATION)
长音频分块处理时的每块时长,设置为0可禁用分块--overlap-duration(默认值:15 秒,环境变量:PARAKEET_OVERLAP_DURATION)
使用分块时的重叠时长--beam-size(默认值:5,环境变量:PARAKEET_BEAM_SIZE)
束搜索的宽度(仅在束搜索解码时使用)--length-penalty(默认值:0.013,环境变量:PARAKEET_LENGTH_PENALTY)
束搜索中的长度惩罚。设置为0.0可禁用(仅在束搜索解码时使用)--patience(默认值:3.5,环境变量:PARAKEET_PATIENCE)
束搜索中的耐心参数。设置为1.0可禁用(仅在束搜索解码时使用)--duration-reward(默认值:0.67,环境变量:PARAKEET_DURATION_REWARD)
值范围为 0.0 到 1.0,小于 0.5 时更倾向于 token 对数似然,大于 0.5 时更倾向于持续时间对数似然。(仅在 TDT 的束搜索解码时使用)--max-words(默认值:无,环境变量:PARAKEET_MAX_WORDS)
每个句子的最大词数--silence-gap(默认值:无,环境变量:PARAKEET_SILENCE_GAP)
如果句子超过指定的静音间隔(秒),则将其拆分--max-duration(默认值:无,环境变量:PARAKEET_MAX_DURATION)
每个句子的最大时长(秒)--fp32/--bf16(默认值:bf16,环境变量:PARAKEET_FP32- 布尔值)
决定使用的精度--full-attention/--local-attention(默认值:full-attention,环境变量:PARAKEET_LOCAL_ATTENTION- 布尔值)
使用全局注意力还是局部注意力(局部注意力可减少中间内存占用)
适用于不进行分块的长音频转录场景--local-attention-context-size(默认值:256,环境变量:PARAKEET_LOCAL_ATTENTION_CTX)
Parakeet 模型中局部注意力的上下文窗口大小(以帧为单位)--cache-dir(默认值:无,环境变量:PARAKEET_CACHE_DIR)
Hugging Face 模型缓存目录。若未指定,则使用 HF 的默认缓存位置 (~/.cache/huggingface 或您在HF_HOME或HF_HUB_CACHE中设置的路径,即$HF_HOME/hub)
示例
# 基本转录
parakeet-mlx audio.mp3
# 多个文件,并生成带有词级时间戳的 VTT 字幕
parakeet-mlx *.mp3 --output-format vtt --highlight-words
# 生成所有输出格式
parakeet-mlx audio.mp3 --output-format all
Python API 快速入门
转录一个文件:
from parakeet_mlx import from_pretrained
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
result = model.transcribe("audio_file.wav")
print(result.text)
查看时间戳:
from parakeet_mlx import from_pretrained
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
result = model.transcribe("audio_file.wav")
print(result.sentences)
# [AlignedSentence(text="Hello World.", start=1.01, end=2.04, duration=1.03, tokens=[...])]
进行分块处理:
from parakeet_mlx import from_pretrained
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
result = model.transcribe("audio_file.wav", chunk_duration=60 * 2.0, overlap_duration=15.0)
print(result.sentences)
使用束搜索解码:
from parakeet_mlx import from_pretrained, DecodingConfig, Beam
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
config = DecodingConfig(
decoding = decoding(
beam_size=5, length_penalty=0.013, patience=3.5, duration_reward=0.67
# 参考 CLI 选项了解各参数的作用
)
)
result = model.transcribe("audio_file.wav", decoding_config=config)
print(result.sentences)
使用局部注意力:
from parakeet_mlx import from_pretrained
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
model.encoder.set_attention_model(
"rel_pos_local_attn", # 遵循 NeMo 的命名规范
(256, 256),
)
result = model.transcribe("audio_file.wav")
print(result.sentences)
指定句子拆分选项:
from parakeet_mlx import from_pretrained, DecodingConfig, SentenceConfig
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
config = DecodingConfig(
sentence = SentenceConfig(
# 参照 CLI 选项了解各项参数的作用
max_words=30, silence_gap=5.0, max_duration=40.0
)
)
result = model.transcribe("audio_file.wav", decoding_config=config)
print(result.sentences)
from_pretrained
使用 from_pretrained 会从 Hugging Face 下载模型,并将下载的模型存储在 HF 的 缓存文件夹 中。您可以通过传递 cache_dir 参数来指定缓存目录。它会返回 Parakeet 的不同变体,例如:ParakeetTDT、ParakeetRNNT、ParakeetCTC 或 ParakeetTDTCTC。对于一般用途,通常使用 BaseParakeet 抽象即可。然而,如果您需要调用特定变体的方法(如 .decode()),并希望避免 linter 报错,可以使用 typing.cast。
时间戳结果
AlignedResult: 顶级结果,包含完整文本和句子text: 完整转录文本sentences:AlignedSentence列表
AlignedSentence: 句子级别的对齐信息,包含开始和结束时间text: 句子文本start: 开始时间(秒)end: 结束时间(秒)duration: 从start到end的持续时间。tokens:AlignedToken列表
AlignedToken: 词/标记级别的对齐信息,包含精确的时间戳text: 标记文本start: 开始时间(秒)end: 结束时间(秒)duration: 从start到end的持续时间。
流式转录
对于实时转录,可以使用 transcribe_stream 方法创建流式上下文:
from parakeet_mlx import from_pretrained
from parakeet_mlx.audio import load_audio
import numpy as np
model = from_pretrained("mlx-community/parakeet-tdt-0.6b-v3")
# 创建流式上下文
with model.transcribe_stream(
context_size=(256, 256), # (左文上下文, 右文上下文) 帧数
) as transcriber:
# 模拟实时音频片段
audio_data = load_audio("audio_file.wav", model.preprocessor_config.sample_rate)
chunk_size = model.preprocessor_config.sample_rate # 每1秒一个片段
for i in range(0, len(audio_data), chunk_size):
chunk = audio_data[i:i+chunk_size]
transcriber.add_audio(chunk)
# 获取当前转录结果
result = transcriber.result
print(f"当前文本: {result.text}")
# 访问已完成和草稿标记
# transcriber.finalized_tokens
# transcriber.draft_tokens
流式参数
context_size: 元组形式的 (左文上下文, 右文上下文),用于注意力窗口- 控制模型在当前位置前后查看多少帧
- 默认值:(256, 256)
depth: 在分块之间保持精确计算的编码器层数- 控制有多少层能够与非流式前向传播保持完全等价
- depth=1: 只有第一层编码器与非流式计算完全一致
- depth=2: 前两层完全一致,依此类推
- depth=N (总层数): 与非流式前向传播完全等价
- 层次越高,与非流式模式的计算一致性越强
- 默认值:1
keep_original_attention: 是否保留原始注意力机制- False: 转为局部注意力以适应流式处理(推荐)
- True: 保留原始注意力(不太适合流式处理)
- 默认值:False
低级 API
若要直接转录音频的对数梅尔谱,可以按以下步骤操作:
import mlx.core as mx
from parakeet_mlx.audio import get_logmel, load_audio
from parakeet_mlx import DecodingConfig
# 手动加载并预处理音频
audio = load_audio("audio.wav", model.preprocessor_config.sample_rate)
mel = get_logmel(audio, model.preprocessor_config)
# 生成带对齐信息的转录
# 接受 [batch, sequence, feat] 和 [sequence, feat] 形式的输入
# `alignments` 是 AlignedResult 列表。(无论是否输入批次维度都适用!)
alignments = model.generate(mel, decoding_config=DecodingConfig())
待办事项
- 添加 CLI 以提高易用性
- 增加对其他 Parakeet 变体的支持
- 实现流式输入(通过
transcribe_stream进行实时转录) - 提供增强选定词语准确性的选项
- 支持带有连续上下文的分块处理(部分已通过流式处理实现)
致谢
- 感谢 Nvidia 训练这些优秀的模型、撰写精彩的论文,并提供了出色的实现。
- 感谢 MLX 项目,正是它提供的框架使得本次实现成为可能。
- 感谢 audiofile 和 audresample、numpy、librosa 等在音频处理方面的贡献。
- 感谢 dacite 在配置管理方面的支持。
许可证
Apache 2.0
常见问题
相似工具推荐
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
gstack
gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置,旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战,gstack 提供了一套标准化解决方案,帮助开发者实现堪比二十人团队的高效产出。 这套配置特别适合希望提升交付效率的创始人、技术负责人,以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具,涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令(如 `/review` 进行代码审查、`/qa` 执行测试、`/plan-ceo-review` 规划功能),即可自动化处理从需求分析到部署上线的全链路任务。 所有操作基于 Markdown 和斜杠命令,无需复杂配置,完全免费且遵循 MIT 协议。gstack 不仅是一套工具集,更是一种现代化的软件工厂实践,让单人开发者也能拥有严谨的工程流程。
codex
Codex 是 OpenAI 推出的一款轻量级编程智能体,专为在终端环境中高效运行而设计。它允许开发者直接在命令行界面与 AI 交互,完成代码生成、调试、重构及项目维护等任务,无需频繁切换至浏览器或集成开发环境,从而显著提升了编码流程的连贯性与专注度。 这款工具主要解决了传统 AI 辅助编程中上下文割裂的问题。通过将智能体本地化运行,Codex 能够更紧密地结合当前工作目录的文件结构,提供更具针对性的代码建议,同时支持以自然语言指令驱动复杂的开发操作,让“对话即编码”成为现实。 Codex 非常适合习惯使用命令行的软件工程师、全栈开发者以及技术研究人员。对于追求极致效率、偏好键盘操作胜过图形界面的极客用户而言,它更是理想的结对编程伙伴。 其独特亮点在于灵活的部署方式:既可作为全局命令行工具通过 npm 或 Homebrew 一键安装,也能无缝对接现有的 ChatGPT 订阅计划(如 Plus 或 Pro),直接复用账户权益。此外,它还提供了从纯文本终端到桌面应用的多形态体验,并支持基于 API 密钥的深度定制,充分满足不同场景下的开发需求。