PHP使用FFMPEG進行音頻視頻操作(音頻聲道轉換)Win AND Linux

一、Win裏進行操作:

①先下載FFMPEG第三方包:http://ffmpeg.org/download.html#build-windows

下載完成後:解壓 -> 打開裏面有個bin文件打開->

可以在cmd裏到:比我的是:執行C:\Users\lbxr\Desktop\ffmpeg\bin>ffmpeg -i  a.mp3   -ac 2  -f mp3 b.mp3   (意思是吧a.mp3裏的聲道(-ac 2)轉成雙聲道保存並生成b.mp3)

php可以下載  操作ffmpeg 的類庫:https://github.com/PHP-FFMpeg/PHP-FFMpeg/

 

也可以composer進行安裝:到項目根目錄:   composer require php-ffmpeg/php-ffmpeg

composer安裝完成後會:vendor在裏面多出來個php-ffmpeg

二、Linux上配置FFMPEG;我本地用的filezilla進行上傳:上傳到Linux:  /usr/include/裏進行編譯操作:FFMPEG保存到/usr/local/ffmpeg裏

①:下載彙編編輯器:yasm (如果有的話可以不下載) :下載地址:http://yasm.tortall.net/Download.html

上傳到linux服務器上:進行操作

  1. tar -xvzf yasm-1.3.0.tar.gz

  2. cd yasm-1.3.0/

  3. ./configure

  4. make && make install

②:因爲FFmpeg默認只支持mp3的解碼,不支持mp3編碼,所以先安裝mp3編碼庫。

下載地址:https://sourceforge.net/projects/lame/files/lame/

上傳到linux服務器上:進行操作

1:  tar -zxvf lame-3.100.tar.gz
2:  cd lame-3.100
3:  ./configure
4:  make && make install

③:FFmpeg的安裝包下載地址http://ffmpeg.org/

上傳到linux服務器上:進行操作   --prefix=是你將要保存的位置(我保存的是:/usr/local/ffmpeg)

  1. tar -xjvf ffmpeg-4.2.1.tar.bz2

  2. cd ffmpeg-4.2.1/

  3. ./configure --enable-shared --enable-libmp3lame --prefix=/usr/local/ffmpeg

  4. make

  5. make install

編譯完成後進入:/usr/local/ffmpeg裏出現:bin,include,lib,share這4個目錄,進入bin目錄執行   ./ffmpeg

出現:

出現這個是你當前運行ffmpeg但是沒有找到動態類庫:需要配置環境變量

vim /etc/profile

在末尾添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然後保存退出

執行:source /etc/profile   使其配置生效

現在就OK了。

下面介紹一比對參數:

-ar 設置音頻採樣率 HZ  ,-ab 設置比特率   ,-vn 取消視頻    , -ac 設置聲道數,1就是單聲道,2就是立體聲,

轉換單聲道的TVrip可以用1(節省一半容量),高品質的DVDrip就可以用2
ffmpeg -i \20190701.mp3 -vn -ar 16000 -ac 2 -ab 192 -f mp3 \20190701.mp3  這樣就ok了;

不過我們可能會在任何一個地方用:需要配置全局變量

 export PATH=$PATH:/usr/local/ffmpeg/bin  (路徑自己修改)  這樣就ok了

可以打印:export   輸出:看到裏面的ffmpeg路徑就ok了,現在可以在系統的任何地方操作ffmpeg了

 

 

三、下面我開始說框架:TP裏使用FFMPEG

安裝php-ffmpeg

composer安裝:項目根目錄:(推薦使用composer)

composer require php-ffmpeg/php-ffmpeg

github下載:https://github.com/PHP-FFMpeg/PHP-FFMpeg/

在使用類的頭頂使用:

require '../vendor/autoload.php';

use FFMpeg\FFMpeg;
use FFMpeg\FFProbe;
use FFMpeg\Format\Audio\Mp3;//這個引入是因爲我操作是MP3文件,你可以根據操作音頻、視頻類型進行引入

 

引入成功後:代碼(win版使用類)

這個是ffmpeg官網進行下載的bin裏的加載類

成功後可以打印一下會輸出實例的對象操作類;

$ffmpeg = FFMpeg::create([
    'ffmpeg.binaries'  => 'C:/Users/lbxr/Desktop/ffmpeg/bin/ffmpeg.exe',
    'ffprobe.binaries' => 'C:/Users/lbxr/Desktop/ffmpeg/bin/ffprobe.exe',
]);
$audio = $ffmpeg->open($FileName);
$format = new Mp3();
$format->on('progress', function ($audio, $format, $percentage) {
    echo "$percentage % 進度";
});
$format->setAudioChannels(2);
$audio->save($format, $NameF);

如果想學習更多的操作可以看這個:https://blog.csdn.net/a9925/article/details/80334700

代碼(linux版使用類)

上面我們已經在linux上進行了編譯ffmpeg類,我們只需要把路徑引進來:

ok流程就和上面一樣了;

 

下面講講:nginx和apache裏我遇到的問題

測試服務器我是用的apache代理服務器:

裏面一般彙報:your ffprobe version is too old and does not support `-help` option, please upgrade

我第一反應應該是服務器裏的環境變量或者動態庫沒有加載試驗才報這個:

最後發現需要在apache裏的envvars文件裏添加把動態加載庫放到這,項目進行轉換的時候會以apache的身份進行操作系統,所以他報錯告訴我們ffprobe太老或者找不到,其實就是找不到;(重啓apache:   /usr/local/apache2/bin/apachectl restart)apachectl找到這個(位置不一定一樣);

生成服務器:nginx代理服務器:(重啓nginx命令:/usr/sbin/nginx -s reload)

但是生成服務器使用的是nginx,nginx裏沒有envvars這個文件:這就比較坑了;

但是不要慌:

vi /etc/ld.so.conf

轉換的時候會用nginx的身份進行轉換,雖然我們配置了環境變量,但是nginx用戶還是加載不了動態庫。我們直接在動態庫加載配置了加上ffmpeg配置:

這樣就直接在加載動態庫的時候直接去找,不用通過環境變量裏的配置去加載動態庫了。這樣發現就解決了。

這樣項目安全上線。以後還是要多研究研究啊

 

 

補充:

安裝完以後只有root用戶可以使用,但是其他用戶不能使用;那肯定就是權限的問題了。我們應該賦予使用用戶權限;或者把當前ffmpeg執行的權限給使用用戶;執行ffmpeg時使用絕對路徑

或者先把root權限給使用用戶

 

 

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