用途:在 Apple Silicon(Metal GPU)上完全离线地做语音转文字,并可批量处理、服务于对证据敏感的场景。每个脚本都是 uv run --script 的内联依赖文件,无需维护 venv。
两个引擎:parakeet 使用 mlx-community/parakeet-tdt-0.6b-v2,速度快、给出逐词置信度、非语音时返回空,但不支持词汇偏置;qwen3 使用 mlx-community/Qwen3-ASR-1.7B-8bit,开放权重 WER 较好并支持热词,但会在音效上幻听感叹词、缺少 token 上限时可能循环。资料建议对任何将作为证据的音频都跑两个引擎,二者的分歧即为置信信号。
主要用法(原样保留命令):S=~/.claude/skills/parakeet/scripts $S/transcribe.py clip.wav 单个文件输出到 stdout;--engine both 会打印 status<TAB>parakeet<TAB>qwen3。 批量:$S/batch_transcribe.py clips/ --out manifest.jsonl;加 --context-file vocab.txt 提供 Qwen3 热词;--engine qwen3 --language auto 指定语言;--engine parakeet --beam 4 启用 beam search。 设置检查:$S/check_setup.py,加 --load 做合成语音完整往返(首次约下载 5 GB)。 终端听写:$S/dictate.py,录制到回车后转写。 OpenAI 兼容服务:$S/parakeet_server.py --port 8384 --preload parakeet,模型 id 为 parakeet-tdt-0.6b、qwen3-asr。 格式支持 ffmpeg 可解码的一切(wav 含 8-bit/ADPCM、mp3、m4a、flac、ogg、aac、webm、aiff)。
批量输出:每条 JSONL 含源文件 sha256、时长、采样率、编码、解码检查与各引擎的 text、model、HF revision;parakeet 附加 words[{w,start,end,conf}] 和 min_conf,qwen3 附加 truncated 和 echo_stripped。双引擎时给出 status:agreed、needs_listen、sfx_likely、silent、error。写 --out 时先写 .partial,完成后重命名,并生成 .meta.json 记录参数、模型版本、包版本、热词哈希、脚本 sha256、计时与计数;单个坏文件不终止批量,但只要有片段出错退出码为 1。
短片段与旧游戏音频:小于 2 秒的片段两侧各补 0.75 秒静音(--pad 0 关闭);Qwen3 token 上限为 12 * duration_s + 32,触顶标记 truncated;热词应作为定向工具而非默认,先不带热词跑,再对 needs_listen 片段用小词表做第三方意见。电平方面 ffmpeg 重采样为 16 kHz 单声道并峰值归一到 -1 dBFS,低于 -60 dBFS 不放大。
长音频:超过 5 分钟按每约 60 秒内最安静的 100 ms 帧切分并独立解码,不使用 parakeet-mlx 0.5.2 自带的重叠分块。
限制与注意事项:不要同时跑两个批处理任务(共享 GPU,争用会慢约 5 倍);冷启动每模型约需下载 2.5 GB 至 ~/.cache/huggingface/hub。资料未提供价格与收费信息。听写类需求可配合 Handy(系统级按住说话),但 Handy 用于听写而非批量证据。旧的 ~/Programming/parakeet-dictate 已被取代。