2007年8月9日

用ffmpeg輕鬆搞定手機影片以及FLV—3gp、MPEG4、AMR、flv

  • 本文是針對 Ubuntu Edgy Eft / Feisty Fawn 所寫(本文也同時適用Kubuntu/Xubuntu),如果你是用其他作業系統,可能操作方式會有所差異。
  目前的多媒體手機可是相當普及,而手裡有著這麼好用的手機,不給他放點影片進去看看還真的是有點給他浪費。雖然沒有漂漂的圖形模式可用,不過要慶幸的是,要製作出手機支援的影片格式,在Linux下幾乎可以說比在Windows下還方便喔!

  沒錯!我們用到的工具就是ffmpeg,由於 Ubuntu 預編的ffmpeg並不支援AAC/FLV/AMR…等格式,所以在使用之前,我們必須重編ffmpeg,方法很簡單。
  • 編譯ffmpeg
在一切工作開始前,請啟用 /etc/apt/source.list 中的 multiverse 和 universe 中的源:
然後請在文字模式下或開啟一個終端機視窗,並執行apt安裝必要的套件:▲請在/etc/apt/sources.list中啟用上述兩個源,以上是在kate中編輯的示意圖。
接下來必須先更新套件列表:
sudo apt-get update

然後就是安裝需要的套件囉:
sudo apt-get install quilt libsdl1.2-dev libogg-dev libvorbis-dev liba52-dev libdts-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev liblame-dev libxvidcore4-dev libfaac-dev libfaad2-dev

為了確保等一下編譯時不發生問題,請執行以下指令:
sudo apt-get build-dep ffmpeg

完成後接下來請切換到/usr/local/src:
cd /usr/local/src

還要切換到root,這樣才能順利編譯,如果你沒有啟用root用戶(Ubuntu預設不啟用),執行以下命令就可以切過去了:
sudo su

再來開始下載ffmpeg原始碼和patch囉!
apt-get source ffmpeg
wget http://blogger.rukker.org/dl/ffmpeg-0.cvs20060823_enable_amr.patch.bz2
wget http://wclhfl.dyndns.org/pub/ffmpeg_enable_amr.patch.bz2

當一切下載完成後,接下來要把patch給補上去:
cd ffmpeg-0.cvs20060823 註:切換到ffmpeg原始碼資料夾,注意!你的不見得會跟範例一樣。
bzcat ../ffmpeg-0.cvs20060823_enable_amr.patch.bz2 | patch -p1
bzcat ../ffmpeg_enable_amr.patch.bz2 | patch -p1

一切大功告成後,就可以開始編譯ffmpeg囉!我們用risky模式,這樣就可以支援更多格式:
DEB_BUILD_OPTIONS="risky" dpkg-buildpackage

喝杯咖啡,等待編譯完畢,編譯完畢後,請跳回/usr/local/src,那裡應該就有ffmpeg的deb檔囉!二話不說!安裝吧~
cd ..
dpkg -i ffmpeg_0.cvs20060823-3.1ubuntu1_i386.deb libavcodec0d_0.cvs20060823-3.1ubuntu1_i386.deb libavformat0d_0.cvs20060823-3.1ubuntu1_i386.deb libpostproc0d_0.cvs20060823-3.1ubuntu1_i386.deb

注意!你的套件名稱不一定跟我一樣。
由於套件是自己編的,系統會誤認為它是舊版,所以我們要停止系統更新它,以免好不容易編出來的心血泡湯:
▲這是在Kate當中的操作示意圖。
請開啟(沒有的話舊建立)/etc/apt/preferences,並加入以下內容:

Package: ffmpeg
Pin: version 0.cvs20060823-3.1ubuntu1
Pin-Priority: 1001

Package: libavcodec0d
Pin: version 0.cvs20060823-3.1ubuntu1
Pin-Priority: 1001

Package: libavformat0d
Pin: version 0.cvs20060823-3.1ubuntu1
Pin-Priority: 1001

Package: libpostproc0d
Pin: version 0.cvs20060823-3.1ubuntu1
Pin-Priority: 1001

注意!版本部分請修改成你所使用的版本,你的版本號不一定跟我一樣。
存檔後,安裝工作就大功告成啦!
  • 轉檔
現在,你可以利用FFMPEG來轉換你想要的媒體檔囉!
以下是範例:
    • To FLV: ffmpeg -i movie.avi -acodec mp3 -ar 11025 movie.flv
    • To MPEG4: ffmpeg -i movie.avi -vcodec mpeg4 -acodec aac movie.mp4
    • To 3GP:ffmpeg -i movie.avi -s qcif -r 12 -ac 1 -ar 8000 -b 30k -ab 12k movie.3gp
    • To AMR:ffmpeg -i music.wav -acodec amr_nb -ar 8000 -ac 1 -ab 32k music.amr
簡單的解說一下幾個常用的選項:
  • -acodec : 指定音訊編碼器。
  • -vcodec : 指定影片編碼器。
  • -s : 指定解析度,qcif就是176*144,是3gp格式常見的解析度。
  • -r : 這是定義每秒畫格數(fps)的選項。
  • -b : 影片位元速率(bps) [註]
  • -ar : 聲音取樣頻率(Hz)
  • -ab : 聲音位元速率(bps) [註]
  • -ac :指定聲音的聲道數目(例如:2就是立體聲, 1 則為單音)
以上工具就可以讓你輕輕鬆鬆把想要的影片轉成手機可用的影片啦!
註:傳送到手機的方法,你可以參考 藍牙傳輸—讓Linux與手機溝通無代溝 一篇。
註: 指定位元速率部份, 舊版的會自動使用Kbps, 但新板ffmpeg使用bps單位, 所以指定位元速率時數字後面宜加上單位"k"(例如影像128Kbps就指定成 -b 128k, 聲音亦然)

  • 02/04, 08 更新→ 由於原網站消失了,所以 AMR 的 Patch 下載不到,因此小弟在我的伺服器上放了一份 AMR 的 Patch 包,雖然有點舊,不過仍可以使用,網址部分已經更正上去!【新載點】

3 則留言:

  1. 文章每個部份講解的非常詳細易懂,完全沒有贅言,容易閱讀。

    我真的覺得在這方面Linux真的是比Windows方便,在Windows底下似乎還沒找到比較方便的軟體。

    回覆刪除
  2. 能拜讀您的文章真的受益良多,小弟的公司也正準備架設影音串流server,只是在安裝了FFmpeg之後,轉檔出來都正常也可以觀看,只是有個很大的問題:沒有聲音?!?!!

    小弟公司是使用freebsd的os,機器是使用一般機房的1u server,是否是因為沒有音效卡的關係才造成轉碼出來後影片沒有聲音?

    小弟的msn:lx207.lx207@msa.hinet.net
    mail:lucas.lee@dagoda.com
    如果版主有空希望能給小弟一些指導!!

    回覆刪除
  3. To lucas.lee:
    嗯...我想輸出的檔案沒有音效和音效卡的有與無應該是無關的, 也許您可以檢查看看ffmpeg轉換過程中有沒有輸出什麼錯誤訊息, 有可能是ffmpeg並不支援輸入檔案的音效部分, 如果確定ffmpeg支援輸入檔的音效, 而且有正確的轉換出來, 則很可能是播放程式不支援輸出的音效格式. :)

    回覆刪除

請注意,在較舊的文章留言並不會馬上出現在回應區!

Site Meter