乐于分享
好东西不私藏

零成本搞定语音转文字:OpenClaw 中文音频处理实战

零成本搞定语音转文字:OpenClaw 中文音频处理实战

FunASR + FFmpeg 的组合,可能是目前最好的中文免费方案。


写在前面

音频处理是 AI Agent 工作中遇到的另一类高频需求。会议录音要整理、视频字幕要提取、播客内容要分析——这些场景的共同痛点在于:中文语音识别的精度,和整套流程的自动化程度
上篇聊了视频处理,这篇聚焦音频。同样是”免费优先、本地部署、OpenClaw Skill 集成”的思路,经过一段时间的实测和对比,我找到了一套针对中文场景特别能打的方案。

一、我们面临的真实需求

先把场景列清楚,带着问题去找工具。

1.1 五大典型场景

1.2 四条选型原则

排序跟视频处理略有不同——这次中文优先级排第一:
  • 中文优先—— 主要面向中文场景,识别精度是第一指标
  • 免费优先—— 优先开源方案,能省就省
  • 本地部署—— 会议录音涉及隐私,数据不出本机是底线
  • Skill 集成—— 与 OpenClaw 自然语言交互无缝衔接

二、全景扫描:语音转文字方案怎么选

2.1 OpenClaw 内置 Skill 三件套

结论很明确:中文场景首选 funasr-transcribe,多语言场景用 voice-transcribe,FFmpeg 是管道工。

2.2 开源自建方案对比

这是本地部署的核心选项:
FunASR 凭借中文场景的绝对精度优势,成为个人/小团队的首选。

2.3 云服务商方案(作为参照系)

了解商业方案的价格,才能感知免费方案的价值:
一个1小时的中文会议录音,用阿里云ASR大约要 ¥7.2~14.4,用 FunASR——零元

2.4 一图看懂选型

2.5 三套推荐组合


三、FFmpeg 音频处理:管道工的基础活

在整个链路中,FFmpeg 负责音频的”搬运和预处理”——从视频里把音频拆出来,转成模型能吃的格式,必要时做降噪。

3.1 从视频提取音频

这是最高频的操作:
#提取为 MP3(有损压缩,文件小)ffmpeg -i video.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3# 提取为 WAV(无损,推荐给转写模型用)ffmpeg -i video.mp4 -vn -acodec pcm_s16le output.wav# 指定采样率16kHz + 单声道(大多数ASR模型的标准输入)ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 output.wav

提示:16kHz 单声道 WAV 是 FunASR 和 Whisper 的标准输入格式,建议提取时一步到位。

3.2 格式转换

#MP3 转 WAVffmpeg -i input.mp3 -acodec pcm_s16le output.wav# WAV 转 MP3ffmpeg -i input.wav -acodec libmp3lame -q:a 2 output.mp3# 改变采样率(适配不同模型)ffmpeg -i input.mp3 -ar 16000 -ac 1 output_16k.wav

3.3 音频剪辑

#取前30秒(适合快速测试)ffmpeg -i input.mp3 -t 30 -c copy output.mp3# 从第10秒开始,取20秒ffmpeg -i input.mp3 -ss 10 -t 20 -c copy output.mp3# 指定时间段ffmpeg -i input.mp3 -ss 00:05:00 -to 00:15:00 output.mp3

3.4 基础降噪

#简单的高低通滤波(去除低频噪音和高频电流声)ffmpeg -i input.mp3 -af "highpass=f=200,lowpass=f=3000" output.mp3# 移除开头和结尾的静音ffmpeg -i input.mp3 -af "silenceremove=start_periods=1:start_threshold=-50dB:start_silence=0.5" output.mp3# 更高级的降噪(需要 afftdn 滤镜)ffmpeg -i input.mp3 -af "afftdn=nf=-25" output.mp3

四、funasr-transcribe:中文转写利器

4.1 为什么是 FunASR

在中文语音识别领域,FunASR 是目前开源方案中精度最高的选择。它基于阿里的工业级模型,经过大量中文语料训练,对普通话、中英混合、甚至部分方言都有很好的表现。
核心优势:
  • 中文精度业界领先,接近商业API水平
  • 完全本地运行,数据不出机器
  • 支持标点恢复、说话人分离等高级功能
  • 模型选择灵活(从轻量到专业)

4.2 安装准备

安装 uv(Python 包管理工具):
#macOS / Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh# Windows (PowerShell)powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
安装 Skill:
clawhub install funasr-transcribe#确认安装成功ls ~/.openclaw/skills/funasr-transcribe/
模型下载(首次使用自动触发):
#可以手动预下载,避免首次使用等待python -c "from funasr import AutoModel; model = AutoModel(model='iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8405-pytorch')"

4.3 使用方法

在 OpenClaw 对话中,用自然语言操作:

你说的话

实际效果

“用 funasr 转写这段音频”

自动调模型,返回文字稿

“用 funasr 转写这段音频,返回 SRT 字幕”

带时间戳的字幕格式

“用 funasr 转写,语言选中文”

明确指定语言,减少误判

4.4 支持的格式

4.5 常见故障排查

模型下载失败(网络问题):
#设置 HuggingFace 镜像export HF_ENDPOINT=https://hf-mirror.com
内存不足:
#使用轻量模型(精度略低,但内存占用小很多)python -c "from funasr import AutoModel; model = AutoModel(model='iic/speech_paraformer-small_asr_nat-zh-cn-16k-common-vocab8405-pytorch')"
GPU 未被使用:
#检查 CUDA 是否可用python -c "import torch; print(torch.cuda.is_available())"# 如果返回 False,安装 CUDA 版 PyTorchpip install torch --index-url https://download.pytorch.org/whl/cu118

五、voice-transcribe:多语言场景的补充

5.1 定位

FunASR 负责中文,Whisper 负责”其他”。当你的音频包含大量英文或需要多语言混合识别时,voice-transcribe(基于 OpenAI Whisper)是更好的选择。

5.2 安装与配置

clawhub install voice-transcribe#安装依赖pip install openai-whisper# 或uv pip install openai-whisper

5.3 模型选择指南

Whisper 提供多档模型,越大的模型精度越高,但也越吃资源:
推荐:日常使用选 small,追求精度选 medium。

5.4 FunASR vs Whisper 决策表


六、完整工作流实战

6.1 视频 → 文字稿(最常用的流程)

需求:把 video.mp4 里的音频转成文字。
第一步:提取音频
ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 audio.wav
第二步:转写
用 funasr-transcribe 转写 audio.wav
完整一键脚本:
#!/bin/bash# video_to_text.shINPUT_VIDEO="$1"OUTPUT_DIR="${2:-./output}"mkdir -p "$OUTPUT_DIR"echo "🔊 正在提取音频..."ffmpeg -i "$INPUT_VIDEO" -vn -ar 16000 -ac 1 "$OUTPUT_DIR/audio.wav" -yecho "📝 正在转写..."# 通过 OpenClaw Skill 执行openclaw skill run funasr-transcribe --input "$OUTPUT_DIR/audio.wav" --output "$OUTPUT_DIR/transcript.txt"echo "✅ 完成!文字稿:$OUTPUT_DIR/transcript.txt"

6.2 生成 SRT 字幕

方法一:直接使用 Whisper
whisper audio.wav --model medium --language zh --output_format srt --output_dir ./output
方法二:FunASR + Python 转换
from funasr import AutoModelmodel = AutoModel(model="iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8405-pytorch")result = model.generate(input="audio.wav")def text_to_srt(result, output_file):    with open(output_file, 'w', encoding='utf-8'as f:        for i, item in enumerate(result, 1):            text = item['text']            start = item['start']            end = item['end']            # SRT 时间格式:HH:MM:SS,mmm            start_srt = f"{int(start//3600):02d}:{int((start%3600)//60):02d}:{int(start%60):02d},{int((start%1)*1000):03d}"            end_srt = f"{int(end//3600):02d}:{int((end%3600)//60):02d}:{int(end%60):02d},{int((end%1)*1000):03d}"            f.write(f"{i}\n{start_srt} --> {end_srt}\n{text}\n\n")text_to_srt(result, "output.srt")

6.3 批量处理

#!/bin/bash# 批量转写文件夹下所有 mp3INPUT_DIR="$1"OUTPUT_DIR="${2:-./transcripts}"mkdir -p "$OUTPUT_DIR"for audio_file in "$INPUT_DIR"/*.mp3; do    filename=$(basename "$audio_file" .mp3)    echo "📝 正在处理: $filename"    # 统一转16kHz WAV    ffmpeg -i "$audio_file" -ar 16000 -ac 1 "$OUTPUT_DIR/${filename}.wav" -y -loglevel error    # 调用 Skill 转写    echo "  转写完成"doneecho "✅ 批量处理结束!"

七、踩坑记录

7.1 FFmpeg 音频问题

问题:提取的音频有杂音
# 基础降噪ffmpeg -i input.mp3 -af "highpass=f=80,lowpass=f=11000" output.mp3# 高级降噪ffmpeg -i input.mp3 -af "afftdn=nf=-25" output.mp3
问题:音频文件太大
# 压缩到 1MB 以内ffmpeg -i input.wav -fs 1M output.mp3# 降低比特率ffmpeg -i input.wav -acodec libmp3lame -q:a 4 output.mp3

7.2 转写质量问题

FunASR 时间戳不准:
使用带 VAD(语音活动检测)的模型:
python -c "from funasr import AutoModel; model = AutoModel(model='iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8405-pytorch')"
Whisper 把中文听成英文:
强制指定语言:
whisper audio.wav --language Chinese --model medium
转写太慢:
FunASR:换 small 模型或启用 GPU
Whisper:换 tiny/base 模型,或用 faster-whisper 加速

八、最佳实践总结

8.1 完整工具链

8.2 场景化推荐速查

8.3 成本一览


写在最后

音频处理链路的核心就三点:FFmpeg 做管道、FunASR/Whisper 做转写、AI 做理解
对于绝大多数中文场景,FunASR + FFmpeg 的免费组合已经足够好用。精度接近商业API,还不用担心数据外泄和账单问题。

——

感谢阅读

真实经历,真诚分享

关注我,一个只分享 AI 实战记录的人类