西麦农场

时间尺度守恒


  • 首页

  • 分类

  • 归档

  • 坑List

使用pydub对音频进行转码满足百度语言和腾讯长语言识别要求

2018-10-24 | DevFAQ | python pydub 语音识别

腾讯语言识别要求

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

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

  • 目录
  • 站点概览
  • 腾讯语言识别要求
  • 参考百度语音文档
  • 解决思路
  • python实现
    戊在西安填坑中

    戊在西安填坑中

    29 日志
    7 分类
    50 标签
    0%
    © 2017- 戊在西安填坑中 | 陕ICP备13008306号-3 | 主题 NexT.Pisces