PHP, JavaScript, Ajax, jQuery, ActionScript, Flex, AIR, Facebook App, Linux, Apache, MySQL...

2010年4月28日 星期三

[Linux]使用 PHP 進行影片轉檔及擷取縮圖

要在 Linux 主機上使用 PHP 進行影片轉檔,須安裝 LAME、ffmpeg、Ruby、FLVTool2。


1.安裝 LAME

LAME 是用來將聲音壓成 MP3 格式,並加入 --enable-shared 以供 ffmpeg 使用
網址:http://lame.sourceforge.net/

下載完成後,輸入下列命令:
[root@localhost ~]# tar -zxvf lame-3.98.4.tar.gz
[root@localhost ~]# cd lame-3.98.4
[root@localhost ~]# ./configure --enable-shared -prefix=/usr
[root@localhost ~]# make
[root@localhost ~]# make install


2.安裝 ffmpeg

ffmpeg 影片轉檔系統,其 libavcodec 涵蓋大部分影片格式,不過仍有轉換 FLV 上的問題,須另外安裝 FLVTools 來修正。
網址:http://www.ffmpeg.org/

下載完成後,輸入下列命令:
[root@localhost ~]# tar -zxvf ffmpeg-0.5.1.tar.gz
[root@localhost ~]# cd ffmpeg-0.5.1
[root@localhost ~]# ./configure --enable-gpl --enable-libmp3lame --enable-shared --prefix=/usr
[root@localhost ~]# make clean && make
[root@localhost ~]# make install


3.安裝 Ruby

FLVTool2 可以修正 ffmpeg 不正確儲存 FLV metadata 的問題,不過它是用 Ruby 寫的,須先安裝 Ruby。
網址:http://www.ruby-lang.org/en/

下載完成後,輸入下列命令:
[root@localhost ~]# tar -zxvf ruby-1.9.1-p376.tar.gz
[root@localhost ~]# cd ruby-1.9.1-p376
[root@localhost ~]# ./configure
[root@localhost ~]# make
[root@localhost ~]# make install


4.安裝 FLVTool2

FLVTool2 是一個用來編輯FLV檔的套件,透過它來儲存FLV檔,確保 FLV 檔裡有正確的 metadata。
網址:http://rubyforge.org/projects/flvtool2/

下載完成後,輸入下列命令:
[root@localhost ~]# tar -xvf flvtool2-1.0.6.tar
[root@localhost ~]# cd flvtool2-1.0.6
[root@localhost ~]# ruby setup.rb config
[root@localhost ~]# ruby setup.rb setup
[root@localhost ~]# ruby setup.rb install


5.安裝 ffmpeg-php

為了讓 PHP 取得影片的資料,要安裝 ffmpeg-php 插件。
網址:http://ffmpeg-php.sourceforge.net/

下載完成後,輸入下列命令:
[root@localhost ~]# tar -xvf ffmpeg-php-0.6.0.tbz2
[root@localhost ~]# cd ffmpeg-php-0.6.0
[root@localhost ~]# phpize
[root@localhost ~]# ./configure && make
[root@localhost ~]# make install

如果 Apache 是使用 XAMPP 請參考這篇:
[Linux] 在 XAMPP 上安裝 PHP extension (以 ffmpeg-php 為例)

編譯完成後就可以製作出一個 ffmpeg.so 的檔案,即可設定 PHP 載入這個插件。


6.設定 php.ini

[root@localhost ~]# vi /opt/lampp/etc/php.ini

加入以下內容:
[ffmpeg]
extension=ffmpeg.so

最後重啟 Apache


7.開始轉檔

以下是一個簡單的範例:
PHP程式碼

//ffmpeg 的執行路徑
$ffmpegPath = "/usr/bin/ffmpeg";
//來源影片路徑
$srcFile = '/var/www/html/ffmpeg/upload/test_in.wmv';
//輸出影片路徑
$outFile = '/var/www/html/ffmpeg/upload/test_out.flv';
//輸出縮圖路徑
$outImg = '/var/www/html/ffmpeg/upload/test.jpg';

//取得影片資訊
$ffmpegObj = new ffmpeg_movie($srcFile);
//取得音頻比特率
$srcAB = intval($ffmpegObj->getAudioBitRate()/1000);

//將影片轉換為FLV檔
exec("$ffmpegPath -i $srcFile -f flv -s 436x324 -acodec libmp3lame -ar 22050 -ac 2 -ab $srcAB -y $outFile");

//從影片產生縮圖
exec("$ffmpegPath -itsoffset -1  -i $srcFile -vcodec mjpeg -vframes 1 -an -f rawvideo -s 436x324 $outImg");

2 意見:

小王子 提到...

如果要從中取出三到五張圖案有辦法設定嗎

大鼻子 提到...

這段語法執行5次就可以了

ffmpeg -itsoffset -[秒數] -i [來源路徑] -vcodec mjpeg -vframes 1 -an -f rawvideo -s [寬度]x[高度] [圖示檔檔名]

張貼留言