百度语音识别要求

语音参数 必须符合16k或8K采样率、16bit采样位数、单声道
语音格式 PCM、WAV、AMR、 SILK
百度语音识别也是类似要求

参考百度语音文档

《音频文件转码工具文档》详细的介绍了使用FFmpeg库尽心音频文件转码,可以参考。
比较重要的命令如下:

mp3 文件转 16K 16bits 位深的单声道 pcm文件
ffmpeg -y -i aidemo.mp3 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm

mp3 文件转 16k 16bits 位深的单身的 wav文件
ffmpeg -y -i aidemo.mp3 -acodec pcm_s16le -ac 1 -ar 16000 16k.wav

查看语音合成生成的MP3格式信息
ffprobe -v quiet -print_format json -show_streams aidemo.mp3

解决思路

通过github和搜索发现pydub库,但对于采样率,采样位数之类概念不慎了解,暂时也不太想深入了解。所以通过python代码和ffmpeg转码后的文件格式信息进行比较,以达到语音文件格式参数达到要求。
既基于pydub库转码后的文件和使用ffmpeg文件转码的文件使用ffprobe得出格式信息进行比对。

python实现

 
  1. # -*- coding: utf-8 -*-
  2.  
  3. from pydub import AudioSegment
  4.  
  5.  
  6. def mp32wav(from_path, to_path, frame_rate=16000):
  7. # from_path: 目标音频文件路径
  8. # to_path: 转码后文件路径
  9. # frame_rate: 默认16kHz,可以frame_rate=8000,既8kHz
  10. mp3_version = AudioSegment.from_mp3(from_path) # 可以根据文件不太类型导入不同from方法
  11. # ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
  12. # flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")
  13. mono = mp3_version.set_frame_rate(frame_rate).set_channels(1) # 设置声道和采样率
  14. mono.export(to_path, format='wav', codec='pcm_s16le') # codec此参数本意是设定16bits pcm编码器, 但发现此参数可以省略

此方法可以直接调用,既可以将语言文件转码为百度语言或者腾讯长语音识别要求,如果大小长度不满足,也可以通过pydub进行编辑,具体参考pydub文档

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐