微信錄音amr音訊檔案轉mp3格式

微信錄音amr音訊檔案轉mp3格式

直到現在,仍然不存在一項旨在網頁上播放音訊的標準。HTML5 規定了一種通過 audio 元素來包含音訊的標準方法。audio 元素能夠播放聲音檔案或者音訊流。當前,audio 元素支援三種音訊格式:MP3 ,Wav ,Ogg Vorbis。

微信錄音的音訊為amr格式,不支援網頁播放,且上傳語音有效期3天,可用微信多媒體介面下載語音到自己的伺服器,然後轉碼轉成MP3格式,途徑有兩種:

一.在伺服器上搭建ffmpeg

很多專案不一定放在自己伺服器上,而且很多碼農並不熟悉伺服器方面的配置,所以沒辦法去搭建ffmpeg,但是對於網路介面的呼叫並不陌生,所以我著重講一下使用七牛PHP框架將微信 amr音訊轉mp3。

二.使用七牛雲端儲存框架轉碼儲存

(1)下載七牛SDK,下載地址:https://developer.qiniu.com/sdk

(2)將下載的整個SDK包解壓之後放入專案中

(3)引入入口檔案,並寫好相應要使用的模組名稱空間

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

(4)將微信錄音amr檔案下載到本地(自己的伺服器)

private function savemedia($serverid){  
$token = $this->_token;          //微信請求素材的Token  
$mediaid = $serverid;            //語音素材的mediaid  
$url = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token='.$token.'&media_id='.$mediaid;  
$content = ihttp_get($url);      //get請求  
if (!is_error($content)){  
$prefix = explode("/", $content['headers']["Content-Type"]);  
$filename = $mediaid.".".$prefix[1];  
$dateStr = date('Y-m-d',time());  
$currdir = "/upload/".$dateStr.'/';  
$dir = getcwd().$currdir;  
if (!is_dir($dir)){       //建立儲存檔案的目錄                          
mkdir(iconv("UTF-8", "GBK", $dir),0777,true);     
}  
$currfile = $currdir.$filename;  
$path = getcwd().$currfile;  
if(file_exists($path)){  
unlink($path); //如果檔案已經存在則刪除已有的                                
}  
$fp = fopen($path, 'w');   
$state=fwrite($fp, $content['content']);  //寫入資料  
fclose($fp);   
}  
}

(5)將本地amr音訊檔案上傳至七牛雲並轉碼生成MP3檔案

private function upchange($filePath,$mediaid){  
$accessKey = trim($reply['accessKey']);      //七牛公鑰  
$secretKey = trim($reply['secretKey']);      //七牛私鑰  
$auth = new Auth($accessKey, $secretKey);  
$bucket = trim($reply['bucket']);  
//資料處理佇列名稱,不設定代表不使用私有佇列,使用公有佇列。  
$pipeline = trim($reply['pipeline']);  
//通過新增'|saveas'引數,指定處理後的檔案儲存的bucket和key  
//不指定預設儲存在當前空間,bucket為目標空間,後一個引數為轉碼之後檔名   
$savekey = Qiniu\base64_urlSafeEncode($bucket.':'.$mediaid.'.mp3');  
//設定轉碼引數  
$fops = "avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame";  
$fops = $fops.'|saveas/'.$savekey;  
if(!empty($pipeline)){  //使用私有佇列  
$policy = array(  
'persistentOps' => $fops,  
'persistentPipeline' => $pipeline  
);  
}else{                  //使用公有佇列  
$policy = array(  
'persistentOps' => $fops  
);  
}  
//指定上傳轉碼命令  
$uptoken = $auth->uploadToken($bucket, null, 3600, $policy);  
$key = $mediaid.'.amr'; //七牛雲中儲存的amr檔名  
$uploadMgr = new UploadManager();  
//上傳檔案並轉碼$filePath為本地檔案路徑  
list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);  
if ($err !== null) {  
return false;  
}else {  
//此時七牛雲中同一段音訊檔案有amr和MP3兩個格式的兩個檔案同時存在  
$bucketMgr = new BucketManager($auth);  
//為節省空間,刪除amr格式檔案  
$bucketMgr->delete($bucket, $key);  
return $ret['key'];  
}  
}

此時七牛雲空間就已經有了儲存的MP3檔案了。