今天在做微信开发的时候需要将jssdk录制的音频上传到微信平台,但是jssdk录制的是speex高清格式,不能直接转换为mp3或者wav格式,
微信官方提供了一个说明:
【如果speex音频格式不符合业务需求,开发者可在获取后,再自行于本地对该语音素材进行转码。
转码请使用speex的官方解码库/downloads/,并结合微信的解码库(含示例代码:下载地址)。】
好吧,因为需要高清的音频又不能直接通过公众号录制模式(不高清),搞linux解码安装吧。
效果图:
逻辑:通过jssdk录制音频
将录制的speex音频上传到服务器
将speex音频转换为wav格式 (内存占用大,speex为30kb的转换后变成了300kb)
将wav格式换为mp3(占用的空间小,speex为30kb转换后80kb)
上传mp3文件到公众号素材里面
其他逻辑
1.安装speex(到上面下载/downloads/)
用weget 命令就可以,也可以下载了上传到linux里面
解压speextarxzvfspeex-1.2.0.tar.gz
然后进入speex库的目录,进行编译安装cdspeex-1.2.0&&./configure&&make&&makeinstall
从github克隆解码库gitclone/gamelife1314/wechat-speex-declib.git
进入解码库安装cdwechat-speex-declib&&make&&cp./bin/speex_decode/usr/local/bin/speex2wav
//测试转码speex2wava.speexb.wav#顺利
3.将wav转换为mp3
先安装ffmpeg (到官网下载安装包然后在)
下载安装包,这种比较慢,可以其他地方下载再上传到这里wget/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
解压文件tar-xvfffmpeg-git-amd64-static.tar.xz
进入目录cdffmpeg-git--amd64-static/
安装ffmpeg,秒装!./ffmpeg
转换文件:ffmpeg-ib.wav-ac1-ab128-ar8000-acodeclibmp3lamec.mp3
说明:ab:比特率,ar:采样率,-acodec 编码 ac:声道
在php里面调用:$speex2wav="speex2wav".$file['storePath']."/a.speex".$file['storePath']."/b.mp3";
$wav2mp3="ffmpeg-i".$file['storePath']."/b.wav-ac1-ab128k-ar8000-acodeclibmp3lame".$file['storePath']."/c.mp3";
exec($speex2wav);
exec($wav2mp3);
最后就是上传素材了