linux服务器下如何下载微信语音并转为mp3格式

       注:以下操作均在centos6.5下进行

       在微信开发的过程中,有时候我们会接触到微信语音,这里需要解决两个问题:1. 如何从微信服务器上下载语音文件到我们的服务器上?2. 如何将语音文件的amr格式转化成H5页面可用的mp3格式?

       1. 查看微信JSSDK文档可以找到相关的多媒体下载API,这里我们需要用到的是上传多媒体API返回的多媒体id。

    //下载多媒体文件
    function saveMedia($media_id){
        $access_token = $this->wx_access_token();//获取token的方法
        $url = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token='.$access_token.'&media_id='.$media_id;
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);    
        curl_setopt($ch, CURLOPT_NOBODY, 0);    //对body进行输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $package = curl_exec($ch);
        $httpinfo = curl_getinfo($ch);
       
        curl_close($ch);
        $media = array_merge(array('mediaBody' => $package), $httpinfo);
        
        //求出文件格式
        preg_match('/\w\/(\w+)/i', $media["content_type"], $extmatches);
        $fileExt = $extmatches[1];
        $filename = time().rand(100,999).".{$fileExt}";
        //$dirname = "./Uploads/";
        if ($fileExt == 'amr') {//语音文件
            $dirname = "./Uploads/video/";
        }else{
            $dirname = "./Uploads/img/";
        }
        if(!file_exists($dirname)){
            mkdir($dirname,0777,true);
        }
        file_put_contents($dirname.$filename,$media['mediaBody']);
        if ($fileExt == 'amr') {//语音文件
            $this->amrToMp3($filename);//amr转mp3的方法,文章后边会详细说明
            $filename = substr($filename, 0, strlen($filename)-4).'.mp3';
        }
        return $dirname.$filename;
    }
       2. 要下载语音文件到服务器并不难,但是我们下载到的文件是amr格式的,并不能在H5页面中使用,因此要把amr转成可用的mp3格式,这里我们用到了ffmpeg这个工具。

       centos6.5下安装ffmpeg的步骤:

       一、安装yasm     

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
/configure
make
make install

       二、安装mp3编码器lame

wget http://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make
make install


       三、安装amr转mp3所需的库

wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz
tar -xzvf opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3
./configure
make
make install

wget http://www.penguin.cz/~utx/ftp/amr/amrnb-11.0.0.0.tar.bz2
tar -xjvf amrnb-11.0.0.0.tar.bz2
cd amrnb-11.0.0.0
./configure
make
make install

wget http://www.penguin.cz/~utx/ftp/amr/amrwb-11.0.0.0.tar.bz2
tar -xjvf amrwb-11.0.0.0.tar.bz2
cd amrwb-11.0.0.0
./configure
make
make install

        四、安装ffmpeg

wget http://ffmpeg.org/releases/ffmpeg-2.5.3.tar.bz2
tar -xjvf ffmpeg-2.5.3.tar.bz2
cd ffmpeg-2.5.3
./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-shared
make
make install

       五、加载配置

ldconfig

       六、可能出现的问题

在使用的时候可能会出现错误:error while loading shared libraries: libavdevice.so.56: cannot open shared object file: No such file or directory

解决方法:

find / -name libavdevice.so.56

找到这个文件的路径后,将其目录添加到ld.so.conf的最后一行

vim /etc/ld.so.conf


再重新加载配置

ldconfig


       七、测试转码功能

/usr/local/bin/ffmpeg -i /var/www/html/iread/Uploads/video/1470018722287.amr /var/www/html/iread/Uploads/video/1470018722287.mp3

以上/var/www/html/iread/Upload/video/是我服务器上语音文件所在的目录

       这里我直接使用了服务器上的amr文件,执行指令后,发现文件夹中确实生成了对应的mp3文件,说明转码功能可以正常使用。


       到此为止,只剩下最后一步了,那就是如何使用php代码实现下载完语音文件后自动执行转码的指令。

    //利用Linux服务器执行ffmpeg指令对amr语音文件转mp3格式
    function amrToMp3($filename){
        $newFilename = substr($filename, 0, strlen($filename)-4).'.mp3';//需要生成的mp3文件名
        $command = '/usr/local/bin/ffmpeg -i /var/www/html/iread/Uploads/video/'.$filename.' /var/www/html/iread/Uploads/video/'.$newFilename;
        exec($command);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值