Palmier Pro本地转录引擎揭秘:MLX语音识别如何实现带词级时间戳的转写
2026/8/30 10:49:42 网站建设 项目流程

Palmier Pro本地转录引擎揭秘:MLX语音识别如何实现带词级时间戳的转写

【免费下载链接】palmier-promacOS video editor built for AI项目地址: https://gitcode.com/GitHub_Trending/pa/palmier-pro

Palmier Pro是一款为 AI 而生的 macOS 视频编辑器,它的本地转录引擎能在不上传任何素材的前提下,把视频里的语音转写成带词级时间戳的文字,并自动标注说话人。下面用 3 张图 + 4 个模块,讲清楚这套"离线语音识别"背后的设计。

一句话概括:ASR 转写由 Apple 的 Speech 框架负责,MLX 负责"哪里在说话"和"是谁在说话",两者拼出完整的本地转写能力。

一、为什么强调"本地"转录

大多数剪辑工具把音频上传到云端转写,既慢又涉及隐私。Palmier Pro 的本地转写直接在 Apple Silicon 芯片上完成:

  • 素材不出机器,适合采访、会议等敏感内容;
  • 首次使用自动下载 on-device 语音模型(AssetInventory负责安装),之后完全离线;
  • 转写结果带词级时间戳,可直接驱动"删气口""按词剪片"等 AI 剪辑功能。

核心数据结构就定义在 Transcription.swift 里:

  • TranscriptionWord:单个词,含textstartendspeaker
  • TranscriptionSegment:一句(endpoint 分句),含起止时间;
  • TranscriptionResult:全文 + 语言 + 词表 + 句表。

二、词级时间戳到底从哪来

很多人以为时间戳要自己"算",其实关键在于给 Speech 框架"开了一个开关"。

在 Transcription.swift 中,创建SpeechTranscriber时传入了attributeOptions: [.audioTimeRange]。这个选项让框架在输出文字的同时,为每个 token 附带一段音频时间区间。

随后在 Transcription.swift 的decodeResults里,代码遍历attributed.runs,把每个 run 的audioTimeRange换算成秒,得到TranscriptionWord

let range = run.audioTimeRange let start = range.map(\.start.seconds) let end = range.map { ($0.start + $0.duration).seconds } words.append(TranscriptionWord(text: trimmed, start: start, end: end, ...))

也就是说:词级时间戳不是估算出来的,而是语音模型直接给出的,精度天然达到"单个词"级别。

三、MLX 在其中扮演什么角色

真正跑在 MLX 上的,是转写之外、却决定转写质量的两块音频分析能力。它们统一通过 MLXRuntime.swift 做推理串行化,避免并发踩到 Metal 后端的竞态。

1. Silero VAD:判断哪里有人在说话

VoiceActivity.swift 用SileroVADModel(明确指定engine: .mlx)对音频做"有无人说话"检测:

  • 输入统一为16 kHz 单声道
  • 按 32 ms 的 chunk 逐段推理,输出概率序列;
  • 再用 VAD 管线二值化,得到一段段"语音 span"(起止秒数)。

这套 span 有两个用途:确认说话人识别命中的片段真实有人声、以及标记"死气"(dead air)。

2. WeSpeaker:识别"是谁"在说话

SpeakerIdentity.swift 用WeSpeakerModel(同样走 MLX)对每段发言提取声纹向量,再用余弦相似度(阈值 0.45)跨文件比对,让同一个人在不同素材里拿到同一标签。这样转写结果里每个词都带上了speaker

小提醒:这两个模型在开发构建里由编译开关BUNDLED_SPEECH控制,MLXRuntime还会在"未打包构建"时直接跳过 MLX 加载,避免崩溃。

四、时间戳如何变成"自动剪辑"

词级时间戳最大的价值,是让"按词剪片"成为可能。WordCutPlanner.swift 的cutRanges直接把词的startFrame/endFrame交给剪辑引擎:

  • tight / balanced / loose三档保留 60 / 150 / 320 ms 气口;
  • 选出要保留的词,回算出要删除的静音区间;
  • 交给RippleEngine.mergeRanges合并成最终剪辑范围。

这一步就是"删除口癖、一键去静音"的底层逻辑——全靠前面那套词级时间戳支撑。

五、完整流程走一遍

把上面串起来,一次本地转写的旅程是这样的:

  1. 抽音轨:Transcription.swift 用AVAssetReader把视频解码成 16 kHz 单声道 16-bit PCM;
  2. 转写SpeechAnalyzer跑 on-device 模型,逐词产出时间戳;
  3. 语音检测:Silero VAD(MLX)标出哪些区间有人声;
  4. 说话人:WeSpeaker(MLX)给每段话贴上说话人标签;
  5. 缓存:结果写入磁盘 + 内存两级缓存(见 TranscriptCache.swift),下次秒开;
  6. 剪辑:时间戳喂给 WordCutPlanner,生成去静音/按词剪片方案。

云端也有一路并行方案:TranscriptionProvider区分.local.cloud,后者通过 TranscriptionBackend.swift 提交远端任务。本地与云端结果可互相替换,接口完全一致。

六、如何上手体验

  1. 需要macOS 26(Tahoe)+ Apple Silicon
  2. 打开项目,导入含语音的素材;
  3. 触发转写,首次会自动下载 on-device 语音模型;
  4. 转写完成后,即可在时间轴上按词选中、删除气口、识别说话人。

依赖清单可在 Package.swift 中查看:mlx-swift(MLX 推理)、speech-swift(Silero VAD / WeSpeaker)、swift-transformers(分词器)等,都是本地推理的关键拼图。


小结:Palmier Pro 的本地转录并不是"一个模型干所有活",而是Speech 框架给词级时间戳 + MLX 补上"哪里在说话、是谁在说话"的组合拳。理解了这套分工,你就能明白它的静音移除、说话人分离、按词剪辑为何能又快又准。

【免费下载链接】palmier-promacOS video editor built for AI项目地址: https://gitcode.com/GitHub_Trending/pa/palmier-pro

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询