语音识别输入格式FAQ

更新时间:
复制 MD 格式

本文介绍语音识别服务的音频输入要求、音频格式的检查与转换方法,以及格式不符合要求时的排查方法。

语音识别各服务支持的语音输入格式

音频的实际编码、采样率和声道数需要符合所调用服务的要求。仅修改文件扩展名不会转换音频格式。

语音识别服务

音频输入要求

一句话识别

  • 单声道。支持 PCM、PCM 编码的 WAV、OGG 封装的 OPUS 和 SPEEX、AMR、MP3、AAC。PCM 采样位数为 16 bit。

  • 采样率:8000 Hz 或 16000 Hz。

  • 音频时长不超过 60 秒,文件大小不超过 2 MiB。

实时语音识别

  • 单声道。支持 PCM、PCM 编码的 WAV、OGG 封装的 OPUS、OGG 封装的 SPEEX、AMR、MP3、AAC。PCM 采样位数为 16 bit。

  • 采样率:8000 Hz 或 16000 Hz。

录音文件识别

支持单声道和双声道的 WAV、MP3、M4A、WMA、AAC、OGG、AMR、FLAC 文件,文件大小不超过 512 MiB。

录音文件识别闲时版

支持单声道和双声道的 WAV、MP3、M4A、WMA、AAC、OGG、AMR、FLAC 文件,文件大小不超过 512 MiB。

录音文件识别极速版

  • 支持 AAC、MP3、OPUS、WAV 格式。

  • 文件大小不超过 100 MiB,时长不超过 2 小时。超过 2 小时的文件可使用录音文件识别普通版。

  • 模型类型:8000(电话)和 16000(非电话)。

如何查看语音格式

检查音频时,重点关注以下属性。术语定义请参见基本概念和术语。

  • 采样率:8000 Hz(8 kHz)表示每秒 8000 个采样点;16000 Hz(16 kHz)表示每秒 16000 个采样点。

  • 采样位数:16 bit 表示每个采样点使用 16 bit(2 字节)保存。

  • 声道:Mono 为单声道,Stereo 为立体声。

Linux

使用以下命令查看 WAV 文件属性:

file input.wav

16 kHz、16 bit、单声道 PCM 编码的 WAV 文件,输出示例如下:

input.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

8 kHz 文件的对应输出如下:

input.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz

裸 PCM 不包含描述采样率、采样位数和声道数的文件头,需要从录音或导出配置中确认这些参数。

Windows

右键单击音频文件,选择属性,在详细信息页签查看音频属性。8 kHz 和 16 kHz 的 PCM 编码 WAV 文件均可按此方式查看。

如何估算 PCM 数据大小

未压缩 PCM 数据的大小可以按以下公式计算:

PCM 数据大小(MiB)= 采样率(Hz)× 采样位数(bit)× 声道数 × 时长(秒)÷(8 × 1024 × 1024)

例如,16 kHz、16 bit、单声道、60 秒的 PCM 数据为 1,920,000 字节,约 1.83 MiB。WAV 文件还包含容器头等信息;该公式不适用于 MP3、AAC 等压缩音频的文件大小计算。

如何进行语音格式转换

音频的采样率、采样位数、声道或编码不符合输入要求时,可以先转换为所需格式,再调用识别服务。

Linux(FFmpeg)

从 FFmpeg 官网获取 FFmpeg。以下示例中的输入文件名需要替换为实际文件名。

查看音频属性

ffmpeg -i input.mp3

该命令显示输入信息,不生成输出文件。

转换为 PCM 编码的 WAV

以下命令将 WAV 转为 16 kHz、16 bit、单声道 WAV。输入为 MP3、AMR 或 44.1 kHz WAV 时,替换输入文件名即可;输出为 8 kHz 时,将 -ar 16000 改为 -ar 8000。

ffmpeg -i input.wav -ar 16000 -ac 1 -c:a pcm_s16le output.wav

在裸 PCM 和 WAV 之间转换

裸 PCM 输入需要在 -i 前指定原始音频的参数。以下示例假设输入为 16 kHz、16 bit、小端、单声道 PCM;参数必须与实际数据一致。

ffmpeg -f s16le -ar 16000 -ac 1 -i input.pcm -ar 16000 -ac 1 -c:a pcm_s16le output.wav

将 WAV 转为 16 kHz、16 bit、小端、单声道裸 PCM:

ffmpeg -i input.wav -ar 16000 -ac 1 -c:a pcm_s16le -f s16le output.pcm

-f s16le 指定输出为裸 PCM,不能仅将输出文件命名为 .wav 来生成 WAV 容器。

转换 A-law 或 μ-law 音频

对于 8 kHz、单声道的裸 A-law 或 μ-law 数据,分别使用以下命令输出 8 kHz、16 bit、单声道 WAV:

ffmpeg -f alaw -ar 8000 -ac 1 -i input.alaw -ar 8000 -ac 1 -c:a pcm_s16le output.wav
ffmpeg -f mulaw -ar 8000 -ac 1 -i input.mulaw -ar 8000 -ac 1 -c:a pcm_s16le output.wav

若 A-law 或 μ-law 已封装在 WAV 文件中,直接读取 WAV 容器,不要用 -f alaw 或 -f mulaw 强制按裸数据解析:

ffmpeg -i input.wav -ar 8000 -ac 1 -c:a pcm_s16le output.wav

Windows(音频转换工具)

可以使用 Adobe Audition、CoolEdit 等音频转换工具,打开音频文件后修改导出设置并导出。

例如,输出 16 kHz、16 bit、单声道音频时,在导出音频混缩对话框的采样类型区域,将采样率设置为 16000 Hz、声道设置为 Mono(单声道)、分辨率设置为 16 Bit。导出格式需符合所调用服务的要求。

常见问题及解决方法

示例音频正常,自己的音频没有识别结果怎么办?

先确认音频包含有效语音,再检查实际编码、采样率和声道数是否符合音频输入要求,并确认请求参数与音频一致。

可以将音频转换为8 kHz 或 16 kHz、16 bit、单声道的 PCM 编码 WAV。转换方法请参见如何进行语音格式转换。

录音文件识别或闲时版报 UNSUPPORT_SAMPLE_RATE 怎么办?

收到 status: 41010101、message: UNSUPPORT_SAMPLE_RATE 时,先检查项目中选择的模型与音频采样率是否匹配:8 kHz 模型对应 8 kHz 音频,16 kHz 模型对应 16 kHz 音频。

对于高于 16 kHz 的音频,录音文件识别可在设置 version=4.0 的同时设置 enable_sample_rate_adaptive=true,将音频自动降采样为 16 kHz。参数说明请参见录音文件识别接口说明。该参数不是任意采样率与模型不匹配问题的通用解决办法。

也可以先将音频转换为模型支持的采样率,再发起识别。请参见如何进行语音格式转换。

实时语音识别返回空结果怎么办?

检查输入音频是否包含有效语音,以及实际编码、采样率和声道数是否符合音频输入要求。请求中的格式和采样率参数应与音频一致。

使用已有音频文件时,不需要一律转为 PCM 或 WAV;输入不符合要求时,再按格式转换方法处理。

使用 MP3 调用一句话识别报错怎么办?

一句话识别支持 MP3。检查实际文件编码、采样率和声道数,并将请求的 format 设置为 mp3。不要仅根据文件扩展名判断编码,也不要将 MP3 输入误设为 pcm。

输入要求请参见音频输入要求。

一句话识别报 TOO_LONG_SPEECH 怎么办?

一句话识别仅支持不超过 60 秒的音频。收到 status: 41010104、message: TOO_LONG_SPEECH 时,检查音频时长。超过 60 秒的音频可使用实时语音识别、录音文件识别或录音文件识别闲时版。各服务的限制请参见音频输入要求。

控制台产品体验上传音频后无法识别怎么办?

可以先将音频转换为 8 kHz 或 16 kHz、16 bit、单声道的 PCM 编码 WAV 文件,再上传。转换方法请参见如何进行语音格式转换。

录音文件识别或闲时版报 AUDIO_DURATION_TOO_LONG 怎么办?

收到 status: 41050103、message: AUDIO_DURATION_TOO_LONG 时,检查音频时长。录音文件识别和闲时版支持的最大音频时长为 12 小时;双声道且两个声道均需识别时,最大时长为 6 小时。可以将长音频切分后分别识别。

从 FFmpeg 官网获取工具。以下命令提取原音频第 10 分钟至第 5 小时 10 分钟的区间:

ffmpeg -i input_audio.wav -ss 00:10:00 -to 5:10:00 -c copy output_audio.wav
  • -i input_audio.wav:指定输入文件。

  • -ss 00:10:00:指定开始时间为第 10 分钟。

  • -to 5:10:00:指定结束时间为第 5 小时 10 分钟。

  • -c copy:直接复制音频数据,不重新编码。输出时长约为 5 小时,实际边界受音频包影响。

  • output_audio.wav:输出文件。