将微信jssdk录制的speex高清音频转换为wav/mp3

今天在做微信开发的时候需要将jssdk录制的音频上传到微信平台,但是jssdk录制的是speex高清格式,不能直接转换为mp3或者wav格式,

微信官方提供了一个说明:

如果speex音频格式不符合业务需求,开发者可在获取后,再自行于本地对该语音素材进行转码。

转码请使用speex的官方解码库<a href="http://speex.org/downloads/ "http://speex.org/downloads/"" target="_blank">http://speex.org/downloads/ ,并结合微信的解码库(含示例代码:<a href="http://wximg.gtimg.com/shake_tv/mpwiki/declib.zip "speex解码库"" target="_blank">下载地址)。

好吧,因为需要高清的音频又不能直接通过公众号录制模式(不高清),搞linux解码安装吧。

效果图:

微信截图_20200310181850.png


逻辑:

  1. 通过jssdk录制音频

  2. 将录制的speex音频上传到服务器

  3. 将speex音频转换为wav格式 (内存占用大,speex为30kb的转换后变成了300kb)

  4. 将wav格式换为mp3(占用的空间小,speex为30kb转换后80kb)

  5. 上传mp3文件到公众号素材里面

  6. 其他逻辑


1.安装speex(到上面下载http://speex.org/downloads/

https://downloads.xiph.org/releases/speex/speex-1.2.0.tar.gz


用weget 命令就可以,也可以下载了上传到linux里面

解压speex

tar xzvf speex-1.2.0.tar.gz

然后进入speex库的目录,进行编译安装

cd speex-1.2.0 && ./configure && make && make install



2.微信的解码库(https://github.com/ppninja/wechat-speex-declib


从github克隆解码库

git clone https://github.com/gamelife1314/wechat-speex-declib.git

进入解码库安装

cd wechat-speex-declib && make && cp ./bin/speex_decode /usr/local/bin/speex2wav

//测试转码

speex2wav a.speex b.wav #顺利


3.将wav转换为mp3

先安装ffmpeg (到官网下载安装包然后在)

    下载安装包,这种比较慢,可以其他地方下载再上传到这里

wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz


   解压文件

  tar -xvf ffmpeg-git-amd64-static.tar.xz

    进入目录

 cd ffmpeg-git-20200305-amd64-static/

    安装ffmpeg,秒装!

    ./ffmpeg


转换文件:

 ffmpeg -i b.wav -ac 1 -ab 128 -ar 8000 -acodec libmp3lame c.mp3



说明:ab:比特率,ar:采样率,-acodec 编码 ac:声道


在php里面调用:

$speex2wav = " speex2wav ".$file['storePath']."/a.speex ".$file['storePath']."/b.mp3";
$wav2mp3 = " ffmpeg -i ".$file['storePath']."/b.wav -ac 1 -ab 128k -ar 8000 -acodec libmp3lame ".$file['storePath']."/c.mp3";
exec($speex2wav);
exec($wav2mp3);

最后就是上传素材了

评论/留言