微信amr音频转wav格式

直接上代码:

# 从微信获取音频元数据
wx_media_id = request.form.get('media_id')
ACCESS_TOKEN = request.form.get('access_token')
get_url = ('http://file.api.weixin.qq.com/cgi-bin/media/get'
           '?access_token={}&media_id={}').format(
               ACCESS_TOKEN, wx_media_id)
# stream=True很重要,这样设置才能存到本地
get_data = requests.get(get_url, stream=True)

# 存到本地
from ksxing.config import ROOT_DIR
local_file_amr = "{}/static/exam_audio_{}_{}.amr".format(
    ROOT_DIR, result_id, datetime.now().strftime("%Y%m%d%H%M%S"))
if get_data.status_code == 200:
    with open(local_file_amr, 'wb') as f:
        for chunk in get_data.iter_content(1024):
            f.write(chunk)
f.close()

# 从amr转到wav
local_file_wav = "{}/static/exam_audio_{}_{}.wav".format(
    ROOT_DIR, result_id, datetime.now().strftime("%Y%m%d%H%M%S"))
import subprocess
subprocess.call(
    ['ffmpeg', '-i', 'file:{}'.format(local_file_amr), local_file_wav])

# 上传到阿里云
auth = oss2.Auth(
    config.aliyun_Access_Key_ID,
    config.aliyun_Access_Key_Secret)
endpoint = config.aliyun_endpoint
bucket = oss2.Bucket(auth, endpoint, config.aliyun_bucket)
bucket.put_object_from_file(file_name, file_data)

# 获取文件大小,删除本地文件
import os
file_size = os.path.getsize(local_file_wav)
# 删除文件
os.remove(local_file_amr)
os.remove(local_file_wav)

这里主要涉及到这些知识点:

  1. requests根据微信接口获取音频文件

  2. requests存储到本地

  3. ffmpeg转换格式:

    因为amr是不支持web播放的,所以我们需要转换成wav格式(其他比如MP3也行)

    我们用到ffmpeg,CentOS安装参照这里:

    https://www.vultr.com/docs/how-to-install-ffmpeg-on-centos

  4. os的一些用法