parakeet-mlx

GitHub
898 52 简单 1 次阅读 今天Apache-2.0音频插件
AI 解读 由 AI 自动生成,仅供参考

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

不需要独立 GPU,依赖 Apple Silicon (M1/M2/M3 等) 芯片利用 MLX 框架进行加速

内存

未说明 (取决于模型大小,0.6B 版本建议 8GB+ 统一内存)

依赖
notes1. 必须安装 ffmpeg,否则命令行工具无法正常工作。2. 该工具专为 Apple Silicon 架构设计,使用 MLX 框架,不支持 Linux 或 Windows 上的 NVIDIA GPU。3. 首次运行会从 Hugging Face 下载模型文件。4. 推荐使用 uv 进行安装和管理。
python未说明 (需支持 uv 或 pip 安装)
mlx
ffmpeg
numpy
huggingface_hub
audiofile
audresample
librosa
dacite
parakeet-mlx hero image

快速开始

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
    解码方法(greedybeam
    目前仅 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_HOMEHF_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 的不同变体,例如:ParakeetTDTParakeetRNNTParakeetCTCParakeetTDTCTC。对于一般用途,通常使用 BaseParakeet 抽象即可。然而,如果您需要调用特定变体的方法(如 .decode()),并希望避免 linter 报错,可以使用 typing.cast

时间戳结果

  • AlignedResult: 顶级结果,包含完整文本和句子
    • text: 完整转录文本
    • sentences: AlignedSentence 列表
  • AlignedSentence: 句子级别的对齐信息,包含开始和结束时间
    • text: 句子文本
    • start: 开始时间(秒)
    • end: 结束时间(秒)
    • duration: 从 startend 的持续时间。
    • tokens: AlignedToken 列表
  • AlignedToken: 词/标记级别的对齐信息,包含精确的时间戳
    • text: 标记文本
    • start: 开始时间(秒)
    • end: 结束时间(秒)
    • duration: 从 startend 的持续时间。

流式转录

对于实时转录,可以使用 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 项目,正是它提供的框架使得本次实现成为可能。
  • 感谢 audiofileaudresamplenumpylibrosa 等在音频处理方面的贡献。
  • 感谢 dacite 在配置管理方面的支持。

许可证

Apache 2.0

常见问题

相似工具推荐

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|2天前
Agent插件

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.3k|★★☆☆☆|今天
图像数据工具视频

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 不仅是一套工具集,更是一种现代化的软件工厂实践,让单人开发者也能拥有严谨的工程流程。

75.5k|★★☆☆☆|今天
Agent插件

codex

Codex 是 OpenAI 推出的一款轻量级编程智能体,专为在终端环境中高效运行而设计。它允许开发者直接在命令行界面与 AI 交互,完成代码生成、调试、重构及项目维护等任务,无需频繁切换至浏览器或集成开发环境,从而显著提升了编码流程的连贯性与专注度。 这款工具主要解决了传统 AI 辅助编程中上下文割裂的问题。通过将智能体本地化运行,Codex 能够更紧密地结合当前工作目录的文件结构,提供更具针对性的代码建议,同时支持以自然语言指令驱动复杂的开发操作,让“对话即编码”成为现实。 Codex 非常适合习惯使用命令行的软件工程师、全栈开发者以及技术研究人员。对于追求极致效率、偏好键盘操作胜过图形界面的极客用户而言,它更是理想的结对编程伙伴。 其独特亮点在于灵活的部署方式:既可作为全局命令行工具通过 npm 或 Homebrew 一键安装,也能无缝对接现有的 ChatGPT 订阅计划(如 Plus 或 Pro),直接复用账户权益。此外,它还提供了从纯文本终端到桌面应用的多形态体验,并支持基于 API 密钥的深度定制,充分满足不同场景下的开发需求。

75.2k|★☆☆☆☆|4天前
语言模型Agent插件