微信web版swoole聊天室之 php 微信錄音amr轉mp3

目錄

一、服務器安裝ffmpeg

1、準備編譯環境

2、編譯所需源碼包

3、shell使用方法

4、錯誤解決辦法

二、部署PHP腳本

1、創建目錄

2、轉換PHP腳本

3、設置定時任務實時調用轉換腳本

4、下載微信錄音文件並保存到服務器的腳本

三、流程


一、服務器安裝ffmpeg

1、準備編譯環境

yum install -y automake autoconf libtool gcc gcc-c++  #CentOS

2、編譯所需源碼包

#yasm:彙編器,新版本的ffmpeg增加了彙編代碼

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

 

#lame:Mp3音頻解碼

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支持

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

 

#amrnb支持

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

 

#amrwb支持

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

 

#加載配置

#最後寫入config後,終端運行ffmpeg命令,出現success和已安裝的擴展,則運行成功。

ldconfig

3、shell使用方法

ffmpeg -i test.mp3 -ac 1 -ar 8000 test.amr  #MP3轉換AMR

ffmpeg -i test.amr test.mp3                 #AMR轉換MP3

4、錯誤解決辦法

   執行轉換代碼時如果出現錯誤

   ①錯誤:“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”

      原因:ffmpeg默認安裝目錄爲“/usr/local/lib”,有些64位系統下軟件目錄則爲“/usr/lib64

      解決:建立軟鏈接ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

   ②錯誤:ffmpeg: error while loading shared libraries: libavdevice.so.54: cannot open shared object file: No such file or directory

      原因:動態鏈接庫未找到

      解決:1、可以通過如下方式查看ffmpeg的動態鏈接庫哪些沒有找到          

ldd `which ffmpeg`
        libavdevice.so.54 => not found
        libavfilter.so.3 => not found
        libavformat.so.54 => not found
        libavcodec.so.54 => not found
        libswresample.so.0 => not found
        libswscale.so.2 => not found
        libavutil.so.51 => not found
        libm.so.6 => /lib64/libm.so.6 (0x00002ab7c0eb6000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab7c100b000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ab7c1125000)
        /lib64/ld-linux-x86-64.so.2 (0x00002ab7c0d9a000)

       2、查找對應庫所在位置 

find /usr/local/lib/ | grep -E "libavdevice.so.54|libavfilter.so.3|libavcodec.so.54"
/usr/local/lib/libavfilter.so.3.17.100
/usr/local/lib/libavcodec.so.54.59.100
/usr/local/lib/libavdevice.so.54
/usr/local/lib/libavcodec.so.54
/usr/local/lib/libavfilter.so.3
/usr/local/lib/libavdevice.so.54.2.101

     3、查看鏈接庫配置文件

more  /etc/ld.so.conf | grep /usr/local/lib

    4、如果不包含的話,需要編輯此文添加

vi /etc/ld.so.conf
/usr/local/lib
/usr/local/lib64
#運行配置命令
ldconfig

二、部署PHP腳本

1、創建目錄

mkdir /home/www/amr
mkdir /home/www/mp3

2、轉換PHP腳本

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/11/29
 * Time: 13:57
 */

namespace app\script\controller;


use think\Controller;

class Mp3 extends Controller
{
    /**
     * amr轉MP3
     */
    public function amrToMp3()
    {
        set_time_limit(0);

        //每秒執行一次
        for ($i = 1; $i <= 60; $i++) {
            $path = '/home/www/script/amr';
            if (is_dir($path)) {
                $dir = scandir($path);
                foreach ($dir as $value) {
                    if ($value == '.' || $value == '..') {
                        continue;
                    } else {
                        $amr = '/home/www/amr/' . $value;
                        $mp3 = '/home/www/mp3/' . substr($value, 0, -4) . '.mp3';
                        $command = "/usr/local/bin/ffmpeg -i $amr $mp3";
                        shell_exec($command);
                    }
                }
            }

            
            //轉換需要時間,避免未轉換完就刪除文件
            sleep(1);

            //刪除amr後綴的所有文件
            $command = "rm -rf /home/www/amr/*.amr";
            shell_exec($command);
        }
    }

}

3、設置定時任務實時調用轉換腳本

* * * * * /usr/bin/php  /home/www/mp3.php

4、下載微信錄音文件並保存到服務器的腳本

<?php

class uploadMp3
{
    public function upload()
    {
        //下載
        $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" . $_GET['token'] . "&media_id=" . $_GET['id'];
        $data = $this->downLoadFile($url);

        //文件名稱
        $file_name = $_GET['name'];

        //擴展名
        $ext = '.amr';

        //保存路徑
        $file_dir = './amr/';
        $this->saveWeixinFile($file_dir . $file_name . $ext, $data);
    }

    /**
     * 下載
     * @param $url
     * @return mixed
     */
    public function downLoadFile($url)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOBODY, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $package = curl_exec($ch);
        curl_close($ch);
        return $package;
    }

    /**
     * 保存MP3到本地
     * @param $name
     * @param $content
     */
    public function saveWeixinFile($name, $content)
    {
        $local_file = fopen($name, 'w');
        if (false !== $local_file) {
            if (false !== fwrite($local_file, $content)) {
                fclose($local_file);
            }
        }
    }
}

$uploadMp3 = new uploadMp3();
$uploadMp3->upload();



三、流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章