You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kaldi-Vosk语音转文本系统中获取纯文本自定义输出

解决方案:提取Vosk转录结果中的纯文本内容

方法一:修改Python脚本(从源头过滤,推荐)

直接修改test_ffmpeg.py,让它只输出text字段的内容,忽略中间的partial相关输出:

修改后的test_ffmpeg.py代码:

#!/usr/bin/env python3

from vosk import Model, KaldiRecognizer, SetLogLevel
import sys
import subprocess
import json

SetLogLevel(0)

sample_rate = 16000
model = Model("..")
rec = KaldiRecognizer(model, sample_rate)

process = subprocess.Popen(['ffmpeg', '-loglevel', 'quiet', '-i',
                        sys.argv[1],
                        '-ar', str(sample_rate) , '-ac', '1', '-f', 's16le', '-'],
                        stdout=subprocess.PIPE)

while True:
    data = process.stdout.read(4000)
    if len(data) == 0:
        break
    if rec.AcceptWaveform(data):
        # 解析JSON结果,提取text字段
        result_json = json.loads(rec.Result())
        print(result_json.get("text", ""))
    # 跳过PartialResult的输出,不打印中间临时结果

# 处理最终结果,提取text字段
final_json = json.loads(rec.FinalResult())
print(final_json.get("text", ""))

修改说明:

  • 移除了PartialResult的打印逻辑,不需要中间的临时转录内容
  • 对Result()和FinalResult()返回的JSON字符串做解析,仅提取并打印text字段的值
  • 使用get("text", "")避免因字段缺失导致的报错

方法二:修改Bash脚本(事后过滤已有JSON内容)

如果不想修改Python脚本,可以在Bash合并步骤中用jq工具过滤text字段(需先安装jq:sudo apt install jq):

修改后的Bash脚本:

#!/bin/bash

# 修正原脚本的赋值语法错误
af="$1"
afe="${af}.wav"

python3 chunker.py "$af"

# 转录每个chunk,保留原始JSON输出
for file in "${af}"/*.wav; 
do
    python3 test_ffmpeg.py "$file" >> "${file}.txt"
done 

# 清空总文件后,过滤并合并text字段内容
> "${af}.txt"
for f in "${af}"/*.txt; 
do
    # 提取text字段并过滤空值
    jq -r '.text | select(. != null)' "$f" >> "${af}.txt"
done

说明:

  • jq -r '.text'读取JSON内容,提取text字段的原始值(不带引号)
  • select(. != null)过滤掉partial类型JSON输出的空值

额外修正:原Bash脚本的语法错误

原脚本中afe= $af + ".wav"是错误的Bash赋值语法,应改为afe="${af}.wav",否则会触发执行错误。


内容的提问来源于stack exchange,提问作者SAGE KHAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:24:24