要搞個自家YouTube伺服器,第一個難關就是如何讓Server有能力去轉片。參考Luar的英文Blog,總算找到了安裝各種套件的方法了。
正如前面文章提到,要讓Linux伺服器會轉FLV影片,要安裝4個套件,它們依次是LAME、ffmpeg、Ruby和FLVTool2。另外,由於用ffmpeg轉片只會忠實地按照您指定的尺寸來縮放影片,用轉4:3影片的尺寸來轉16:9影片會令完成影片變成,為了日後檔案上傳後可透過PHP自動檢查影片的尺寸來進行轉換工作,所以還要裝個PHP的擴充ffmpeg-php。而由於我們的特別需求,所以都不能用RPM方式來安裝,全都要耐心地去編譯。
LAME
LAME是用來將聲音壓成MP3格式的,是相當有名的壓MP3套件。先到LAME的官網去下載最新的LAME,依下面的指令來解開安裝它。其中最重要的是--enable-shared一段,因為只有那樣ffmpeg才能用得到它的弁遄C
tar -zxvf lame-3.97.tar.gz
cd lame-3.97
./configure --enable-shared -prefix=/usr
make
make install
ffmpeg
ffmpeg是著名的轉片套件,所附的libavcodec涵誘j部分影片格式,轉FLV也可以。不過由於它也有不少FLV轉換軟件也有的共通問題,所以稍後還要安裝FLVTools來修正。
ffmpeg表明它是一個「永遠也是開發中的專案」,總是不停在更新,所以沒有一個官方的Binary檔可以下載來安裝,連源碼也要透過Subversion來取得最新版本。大多數Linux版本相信都已經預設安裝了SVN了吧。
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk /usr/local/src/ffmpeg
cd /usr/local/src/ffmpeg
./configure --enable-gpl --enable-libmp3lame --enable-shared --prefix=/usr
make clean && make
make install
當然,安裝ffmpeg時可以有很多很多很多很多插件和參數供您加上去,以安裝出一個更加萬能的轉片工具,不過因為真的太多太多太多,一版紙也寫不完,所以如何您要裝的話就自己到網上查看好了。
Ruby
花了好長時間編譯ffmpeg之後,就要著手修正不正確儲存FLV metadata的問題了。FLVTool2可以做到這項工作,不過它是用Ruby來寫的,所以要先安裝Ruby。Ruby是由一位日本人松本行弘開發出來的,是個徹底至極的OO語言,不過由於太新不夠普及,不是所有Linux分發版本都預設安裝這種程式語言的編譯程式,所以又要去官網下載源碼來安裝。
tar -zxvf ruby-1.8.5-p12.tar.gz
cd ruby-1.8.5-p12
./configure
make
make install
FLVTool2
FLVTool2是一個用來編輯FLV檔的套件,透過它來儲存FLV檔,就可以保證FLV檔裡有正確的metadata了。FLVTool2的最新版本放了在RubyForge網站,下載回來就可以安裝。
gunzip flvtool2-1.0.6.tgz
tar -xvf flvtool2-1.0.6.tar
cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
到這裡,有關轉片方面的安裝便大尼i成。那應該怎麼用ffmpeg來轉換影片至FLV檔呢?在Luar的網站雖然也有一些參考指令,不過不知怎的米奇總是用得不順手,於是就參考一下同是使用ffmpeg來轉片的攜帶動畫轉換君3GP Converter的做法。
將影片轉換為FLV檔
ffmpeg -y -i [來源檔路徑] -f flv -s [目的影片寬度]x[目的影片高度] -r [目的frame rate] -b [目的bitrate] -acodec mp3 -ar 22050 -ab 48 -ac 2 - | flvtool2 -U stdin [目的檔檔名]
目的檔的寬度和高度可以自訂,不過要小心會變形。一般來說320x240是4:3,320x180則是16:9。目的frame rate一般都離不開8/10/14.985/15/23.976/24/25/29.97/30的,網上播片的話14.985便夠了。至於bitrate就要看您的伺服器的流量和您自己的要求了,米奇的Demo網站用的是512000(512kbps),雖然幾乎沒起格,但檔案就頗大(186秒12.1MB),用384000(384kbps)已經有不錯的效果。至於聲音參數方面,由於FLV格式有一點要求,所以還是不要動好了。
從影片擷取小圖示
或陰z會需要一張小圖示來代表那影片,ffmpeg也可以用來擷取這張圖示。
ffmpeg -y -i [來源路徑] -f image2 -ss [擷取影格的秒數] -vframes 1 -s [圖示寬度]x[圖示高度] -an [圖示檔檔名]
擷取影格的秒數可以是小數後3位的小數,也接受00:00:00.xxx格式。圖檔名方面JPG/GIF/PNG都接受。
ffmpeg-php
為了讓PHP取得影片的資料,要安裝ffmpeg-php擴充插件。先到這裡下載ffmpeg-php回來編譯:
bunzip2 ffmpeg-php-0.5.0.tbz2
tar -xvf ffmpeg-php-0.5.0.tar
cd ffmpeg-php-0.5.0
phpize
./configure && make
make install
編譯完成後就可以製作出一個ffmpeg.so的檔案。然後就要去設定PHP,讓它載入這個擴充插件了。首先用筆記簿開一個新的純文字檔案,輸入以下兩行:
; Enable ffmpeg-php extension module
extension=ffmpeg.so
將檔案命名為ffmpeg.ini儲存起來,然後上傳到/etc/php.d/目錄裡,重新啟動Apache之後,PHP就會自動載入它。您可以透過phpinfo()函式來查看ffmpeg-php有沒有正確載入。