微信音頻轉(zhuǎn)mp3格式

直到現(xiàn)在,仍然不存在一項(xiàng)旨在網(wǎng)頁(yè)上播放音頻的標(biāo)準(zhǔn)。HTML5 規(guī)定了一種通過(guò) audio 元素來(lái)包含音頻的標(biāo)準(zhǔn)方法。audio 元素能夠播放聲音文件或者音頻流。當(dāng)前,audio 元素支持三種音頻格式:MP3 ,Wav ,Ogg Vorbis。
微信錄音的音頻為amr格式,不支持網(wǎng)頁(yè)播放,且上傳語(yǔ)音有效期3天,可用微信多媒體接口下載語(yǔ)音到自己的服務(wù)器,然后轉(zhuǎn)碼轉(zhuǎn)成MP3格式,途徑有兩種:
一.在服務(wù)器上搭建ffmpeg
很多項(xiàng)目不一定放在自己服務(wù)器上,而且很多碼農(nóng)并不熟悉服務(wù)器方面的配置,所以沒(méi)辦法去搭建ffmpeg,但是對(duì)于網(wǎng)絡(luò)接口的調(diào)用并不陌生,所以我著重講一下使用七牛PHP框架將微信 amr音頻轉(zhuǎn)mp3。
二.使用七牛云存儲(chǔ)框架轉(zhuǎn)碼存儲(chǔ)
(1)下載七牛SDK,下載地址:https://developer.qiniu.com/sdk
(2)將下載的整個(gè)SDK包解壓之后放入項(xiàng)目中
(3)引入入口文件,并寫(xiě)好相應(yīng)要使用的模塊命名空間

require_once 'qiniusdk/autoload.php';    
    
use Qiniu\Auth;    
use Qiniu\Storage\UploadManager;    
use Qiniu\Storage\BucketManager;   

(4)將微信錄音amr文件下載到本地(自己的服務(wù)器)

function upload($serverid){
        $media_id = $serverid;
        $access_token = M('accesstoken')->getField('access_token');
        $path = './'.C("UPLOADPATH").'audio/'.date('Ymd',time());

        if(!is_dir($path)){
                mkdir($path);
        }
        //微 信上傳下載媒體文件
        $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";

        $mediaid = "wxupload_".time().rand(1111,9999);
        $filename = $mediaid . ".amr";

        $this->downAndSaveFile($url,$path."/".$filename);
        $res = 'audio/'.date('Ymd',time()).'/'.$filename;

        $data = array();
        $data['res'] = $res;
        $data['filename'] = $filename;
        $data['mediaid'] = $mediaid;
        return $data;
}

(5)將本地amr音頻文件上傳至七牛云并轉(zhuǎn)碼生成MP3文件

private function upchange($filePath,$mediaid){    
            
    $accessKey = trim($reply['accessKey']);      //七牛公鑰    
    $secretKey = trim($reply['secretKey']);      //七牛私鑰    
    $auth = new Auth($accessKey, $secretKey);    
            
    $bucket = trim($reply['bucket']);    
    //數(shù)據(jù)處理隊(duì)列名稱(chēng),不設(shè)置代表不使用私有隊(duì)列,使用公有隊(duì)列。    
    $pipeline = trim($reply['pipeline']);    
            
    //通過(guò)添加'|saveas'參數(shù),指定處理后的文件保存的bucket和key    
    //不指定默認(rèn)保存在當(dāng)前空間,bucket為目標(biāo)空間,后一個(gè)參數(shù)為轉(zhuǎn)碼之后文件名     
    $savekey = Qiniu\base64_urlSafeEncode($bucket.':'.$mediaid.'.mp3');    
    //設(shè)置轉(zhuǎn)碼參數(shù)    
    $fops = "avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame";    
    $fops = $fops.'|saveas/'.$savekey;    
    if(!empty($pipeline)){  //使用私有隊(duì)列    
        $policy = array(    
            'persistentOps' => $fops,    
            'persistentPipeline' => $pipeline    
        );    
    }else{                  //使用公有隊(duì)列    
        $policy = array(    
            'persistentOps' => $fops    
        );    
    }    
            
    //指定上傳轉(zhuǎn)碼命令    
    $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);    
    $key = $mediaid.'.amr'; //七牛云中保存的amr文件名    
    $uploadMgr = new UploadManager();    
            
    //上傳文件并轉(zhuǎn)碼$filePath為本地文件路徑    
    list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);    
    if ($err !== null) {    
        return false;    
    }else {    
        //此時(shí)七牛云中同一段音頻文件有amr和MP3兩個(gè)格式的兩個(gè)文件同時(shí)存在    
        $bucketMgr = new BucketManager($auth);    
        //為節(jié)省空間,刪除amr格式文件    
        $bucketMgr->delete($bucket, $key);    
        return $ret['key'];    
    }    
}  

(5)將本地amr音頻文件上傳至七牛云并轉(zhuǎn)碼生成MP3文件

function downAndSaveFile($url, $savePath) {
        ob_start();
        readfile($url);
        $img = ob_get_contents();
        ob_end_clean();
        $size = strlen($img);
        $fp = fopen($savePath, 'a');
        fwrite($fp, $img);
        fclose($fp);
}

function downchange($mediaid) {
        $bucket = 'shuiliju';
        $accessKey = $this->ak;
        $secretKey = $this->sk;
        $auth = new Auth($accessKey, $secretKey);

        //baseUrl構(gòu)造成私有空間的域名/key的形式
        $baseUrl = 'http://os4top2ks.bkt.clouddn.com/' . $mediaid;
        $authUrl = $auth->privateDownloadUrl($baseUrl);


        //下載到本地
        $filename = $mediaid;
        $path = './' . C("UPLOADPATH") . 'audio/' . date('Ymd', time());
        $this->downAndSaveFile($authUrl, $path . "/" . $filename);
        $res = 'audio/' . date('Ymd', time()) . '/' . $filename;
        $data = array();
        $data['res'] = $res;
        $data['filename'] = $filename;
        $data['mediaid'] = $mediaid;

        $bucketMgr = new BucketManager($auth);
        $bucketMgr->delete($bucket, $mediaid);
        return $data;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容