今天在做微信开发的时候需要将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解码安装吧。
效果图:
逻辑:
通过jssdk录制音频
将录制的speex音频上传到服务器
将speex音频转换为wav格式 (内存占用大,speex为30kb的转换后变成了300kb)
将wav格式换为mp3(占用的空间小,speex为30kb转换后80kb)
上传mp3文件到公众号素材里面
其他逻辑
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);
最后就是上传素材了