1. 程式人生 > >Linux環境下ffmpeg的配置步驟以及簡單的使用命令

Linux環境下ffmpeg的配置步驟以及簡單的使用命令

資源連結:http://download.csdn.net/detail/hlj_include/9599667

第一步:建議安裝目錄:usr/local/目錄下

lame-3.99.5.tar.gz
(1)、tar -zxvf lame-3.99.5.tar.gz

(2)、cd lame-3.99.5 

(3)、./configure

(4)、make
(5)、make install


第二步:libogg-1.3.1.tar.gz
解壓安裝同第一步的1~4小步


第三步:libvorbis-1.3.3.tar.gz
解壓安裝同第一步的1~4小步


第四步:xvidcore-1.3.2.tar.gz
解壓安裝同第一步的1~4小步


第五步:latest_x264.tar.bz2 
(1)、tar -jxvf latest_x264.tar.bz2
(2)、./configure
(3)、make
(4)、make install


第六步:libdca-0.0.5.tar.bz2
解壓安裝同第五步的1~4小步


第七步:a52dec-0.7.4.tar.gz  
解壓安裝同第一步的1~4小步


第八步:faad2-2.7.tar.gz
解壓安裝同第一步的1~4小步


第九步:faac-1.28.tar.gz
解壓安裝同第一步的1~4小步


第十步:amrnb-10.0.0.0.tar.bz2
解壓安裝同第五步的1~4小步


第十一步:amrwb-7.0.0.1.tar.bz2
解壓安裝同第五步的1~4小步


第十二步:最關鍵的一步,安裝ffmepg
(1)、./configure --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --  enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
(2)、make
  (3)、make install


如果在./configure的時候會報錯, 提示說沒有libopencore-amrnb和libopencore-amrwb兩個庫.使用如下命令安裝它們:
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev


如果./configure的時候加入 --enable-shared, 編譯安裝沒有問題. 但是執行ffmpeg命令就會出錯:
relocation error: /usr/local/lib/libavfilter.so.3: symbol sws_get_class, version LIBSWSCALE_2 not defined in file libswscale.so.2 with link time reference;



最後階段:變異編譯執行ffmepg:如果顯示為下面所示即為安裝成功:版本檢測指令:ffmprg -version
                                                   
ffmpeg version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2000-2014 the Libav developers
  built on Apr  1 2016 14:24:20 with gcc 4.6.3
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
ffmpeg 0.8.17-4:0.8.17-0ubuntu0.12.04.2
libavutil    51. 22. 3 / 51. 22. 3
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0






ffmpeg的基本操作指令:




格式轉換 (將file.avi 轉換成output.flv)
C程式碼  收藏程式碼
#ffmpeg -i file.avi output.flv  
 
-i 表示輸入檔案


:現在有個視訊video.avi,有個音訊 audio.mp3,將其合併成output.avi 
兩個命令(file.avi 是中間檔案,用完可刪)
C程式碼  收藏程式碼
#ffmpeg -i video.avi -vcodec copy -an video2.avi    
#ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi  
 
-i 表示輸入檔案 
-vcodec copy 表示 force video codec (‘copy’ to copy stream) 這個不知怎麼譯 ,估計是直接copy 
-acodec copy 這個說的應該是音訊了 跟上面一樣 
-an:表示 disable audio 估計是audio no 之類的縮寫,表示去掉video.avi 原有的音訊
 
方法2 好像可以直接指定兩個輸入檔案 ,
C程式碼  收藏程式碼
#ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi  
 
兩個檔案的順序很重要
 
從視訊裡提取聲音(聲音與視訊的分離)
C程式碼  收藏程式碼
#ffmpeg -i 人生若只如初見.flv -vnr.mp3  
 
從flv 檔案中提取聲音並儲存為mp3格式
-vn : 表示忽略視訊 估計是video no 之類的縮寫
 
#ffmpeg -i 人生若只如初見.flv -an r.flv
 
只留視訊不留聲音 
-an : 表示 忽略 聲音 估計是audio no 之類的縮寫
 
從視訊裡提取圖片( )
C程式碼  收藏程式碼
#ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg     
-ss  
 
第8秒處截一圖


壓縮mp3 檔案 
如果你覺得mp3檔案有點大,想變小一點那麼可以通過-ab 選項改變音訊的位元率 (bitrate)
C程式碼  收藏程式碼
#ffmpeg -i input.mp3 -ab 128 output.mp3  
 
//這裡將位元率設為128
你可以用file 命令檢視一下原始檔 的資訊 
z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo 
其中的192 kbps 就是這個東西
 
mp3中位元率的含義是:在壓縮音訊檔案至mp3時,由壓縮軟體所確定數碼檔案在播放時每秒傳 送給播放器大小,其單位是:千位/秒;英文的含義是:kbps – = kilobits per second。現在mp3檔案的最高數位率是320 kbps。這樣的檔案體積很大,每分鐘的音樂超過兩兆位元組。如果採用可變位元率(VBR)編碼來生成mp3檔案,獲得與320 kbps相當音質,檔案的體積會縮小25~50%。請注意:播放時間相同,而歌曲不同,所獲的壓縮mp3檔案的一般不相同,這是因為VBR編碼所生成的 mp3檔案的大小不僅僅取決於播放時間的長度,還取決於源音訊檔案的其它因素。
 
錄音(要有可用的麥克風,並且如果用alsa 的話,好像得安alsa-oss,重啟)
C程式碼  收藏程式碼
#ffmpeg -f oss -i /dev/dsp out.avi  
#ffmpeg -f alsa -ac 2 -i hw:0,0 ut.avi  
#ffmpeg -f alsa -ac 2 -i pulse  
 
oss 是linux 下的聲音相關的東西,與alsa 一樣,不過oss 是商業的, 而/dev/dsp 是oss 用到的麥克的裝置吧,可以這樣理解
 
螢幕錄影
C程式碼  收藏程式碼
#ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi   
#ffmpeg -f x11grab -s 320x240  -r 10 -i :0.0+100+200 wheer.avi  
 
:0:0 表示螢幕(個人理解,因為系統變數$DISPLAY值就是:0.0) 而100,表示距左端100象素,200表示距上端200
-s 設定視窗大小 
-r 10 好像是設定頻率,不懂
C程式碼  收藏程式碼
#ffmpeg -f x11grab -s xga-qscale 5-r 10 -i :0.0+0+0 wheer.avi  
 
-qscale 8 設定畫面質量,值越小越好
 
螢幕錄影,同時錄音
C程式碼  收藏程式碼
#ffmpeg -f oss -i /dev/dsp-f x11grab -r 30 -s 1024x768 -i :0.0  output.mkv  
#ffmpeg -ac 2 -f oss -i /dev/dsp -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv  
 
看到這,你會發現這個命令有多強大, 
如果我螢幕上打開了一個視窗,我只想錄這個視窗的內容,如何確定這個視窗的座標位置呢 
可以用另外一個命令 
xwininfo 輸入這個命令後,用滑鼠點選目標視窗, 
會出現目標視窗的座標,寬高等一系列資訊 
Absolute upper-left X: 276 
Absolute upper-left Y: 57 
Relative upper-left X: 2 
Relative upper-left Y: 23 
Width: 742 
Height: 499 
Depth: 24 
Visual: 0×21 
Visual Class: TrueColor 
Border width: 0 
Class: InputOutput 
Colormap: 0×20 (installed) 
Bit Gravity State: NorthWestGravity 
Window Gravity State: NorthWestGravity 
Backing Store State: NotUseful 
Save Under State: no 
Map State: IsViewable 
Override Redirect State: no 
Corners: +276+57 -262+57 -262-244 +276-244 
-geometry 80×24+274+34 看到這一行了沒 ()
比如根據上面的資訊
#ffmpeg -f oss -i /dev/dsp -f x11grab -r 30  -s 1280x752 -i :0.0+0+23  output.avi
 
Another thing you can change is the video frame rate (FPS). In the example above we used -r 30 which means capture at 30 FPS. You can change this value to whatever frame rate you want. 
這個 -r 30 應該是每秒鐘取樣幾次,估計是一秒截三十次屏,
切頭去尾
C程式碼  收藏程式碼
#ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3 output.mp3  
 
只要從第10秒開始擷取,共擷取1:22時長的內容,視訊檔案的連線,如兩個flv 檔案 連線成一塊 
好像必須先將檔案 轉成mpg ,dv 等格式的檔案後才能進行連線 
連線複數的AVI影片檔之範例(在此範例中須一度暫時將AVI檔轉換成MPEG-1檔(MPEG-1, MPEG-2 PS, DV格式亦可連線))
 
C程式碼  收藏程式碼
#ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20  
#ffmpeg -i input2.avi -sameq inputfile_02.mpg -r 20  
#cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg  
#ffmpeg -i inputfile_all.mpg -sameq outputfile.avi  
 
上面將input1.avi input2.avi 合併成outputfile.avi 
-sameq 表示 相同的質量(可能指的是畫面,不太清楚) 
-r 指頻率 
=====================================================================
下面是wiki 上給的幾個例子
 
引數
FFmpeg可使用眾多引數,引數內容會根據ffmpeg版本而有差異,使用前建議先參考引數及編解碼器的敘述。此外,引數明細可用 ffmpeg -h 顯示;編解碼器名稱等明細可用 ffmpeg -formats 顯示。
下列為較常使用的引數。
 
主要引數
-i 設定輸入檔名。 
-f 設定輸出格式。 
-y 若輸出檔案已存在時則覆蓋檔案。 
-fs 超過指定的檔案大小時則結束轉換。 
-ss 從指定時間開始轉換。 
-title 設定標題。 
-timestamp 設定時間戳。 
-vsync 增減Frame使影音同步。
 
影像引數
-b 設定影像流量,預設為200Kbit/秒。( 單位請參照下方注意事項 ) 
-r 設定FrameRate值,預設為25。 
-s 設定畫面的寬與高。 
-aspect 設定畫面的比例。 
-vn 不處理影像,於僅針對聲音做處理時使用。 
-vcodec 設定影像影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。
 
聲音引數
-ab 設定每Channel (最近的SVN 版為所有Channel的總合)的流量。( 單位 請參照下方注意事項 ) 
-ar 設定取樣率。 
-ac 設定聲音的Channel數。 
-acodec 設定聲音編解碼器,未設定時與影像相同,使用與輸入檔案相同之編解碼器。 
-an 不處理聲音,於僅針對影像做處理時使用。 
-vol 設定音量大小,256為標準音量。(要設定成兩倍音量時則輸入512,依此類推。)
 
注意事項
以-b及ab引數設定流量時,根據使用的ffmpeg版本,須注意單位會有kbits/sec與bits/sec的不同。(可用ffmpeg -h顯示說明來確認單位。)
例如,單位為bits/sec的情況時,欲指定流量64kbps時需輸入‘ -ab 64k ’;單位為kbits/sec的情況時則需輸入‘ -ab 64 ’。
以-acodec及-vcodec所指定的編解碼器名稱,會根據使用的ffmpeg版本而有所不同。例如使用AAC編解碼器時,會有輸入aac 與 libfaac的情況。此外,編解碼器有分為僅供解碼時使用與僅供編碼時使用,因此一定要利用ffmpeg -formats 確 認輸入的編解碼器是否能運作。
 
範例
將MPEG-1影片轉換成MPEG-4格式之範例
C程式碼  收藏程式碼
#ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4  
 
將MP3聲音轉換成MPEG-4格式之範例
C程式碼  收藏程式碼
#ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4  
 
將DVD的VOB檔轉換成VideoCD格式的MPEG-1檔之範例
C程式碼  收藏程式碼
#ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg  
 
將AVI影片轉換成H.264格式的M4V檔之範例
C程式碼  收藏程式碼
#ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v  
 
將任何影片轉換成東芝REGZA可辨識的MPEG2格式之範例
C程式碼  收藏程式碼
#ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg  
 
連線複數的AVI影片檔之範例(在此範例中須一度暫時將AVI檔轉換成MPEG-1檔(MPEG-1, MPEG-2 PSDV格式亦可連線)、
C程式碼  收藏程式碼
#ffmpeg -i input1.avi -sameq inputfile_01.mpg  
#ffmpeg -i input2.avi -sameq inputfile_02.mpg  
#cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg  
#ffmpeg -i inputfile_all.mpg -sameq outputfile.avi  
=============================================================================
http://ffmpeg.org/ffmpeg-doc.html
http://ubuntuforums.org/showthread.php?t=1392026
 
同時搞明白的一些問題 
在alsa 體系中音效卡(也可能是麥克風,)叫hw:0,0 而在oss 體系中叫/dev/dsp (用詞可能不太專業) Linux在安裝了音效卡後,會有一些裝置檔案生成。


採集數字樣本的/dev/dsp檔案,針對混音器的/dev/mixer檔案,用於音序器的/dev/sequencer,/dev/audio檔案一個 基於相容性考慮的聲音裝置檔案。只要向/dev/audio中輸入wav檔案就能發出聲音。而對/dev/dsp檔案讀取就能得到WAV檔案格式的聲音文 件。
 
原文:http://www.tuicool.com/articles/FNVJ3a
 
 用ffmpeg將rmvb壓制成mp4
 
1、檢視rmvb屬性


轉換之前先檢視一下檔案屬性,將解析度等資訊看一下,如果解析度超過960*640就需要調整。順便看一下位元速率,壓制成x264的時候參考一下。
C程式碼  收藏程式碼
ffmpeg -i 檔名  
2、壓制成mp4


1.pass1編碼
C程式碼  收藏程式碼
ffmpeg -i 01.rmvb -an -vcodec libx264 -b 560k -pass 1 -f mp4 -y NUL   
-an : 不編碼音訊
-vcodec : 設定視訊的編碼,我這裡使用的是x264
-b : 這個是位元速率
-f : 強制使用格式
-y : 自動輸y確認
NUL : 因為是pass1 所以不需要輸出檔案,直接用NUL
2.pass2編碼
C程式碼  收藏程式碼
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -pass 2 -f mp4 01.mp4   
因為現在很多rmvb的音訊部分都是aac編碼的,所以可以直接用-acodec copy複製音訊部份
3、針對某些檔案的引數調整


有些rmvb或著mkv之類的解析度比較高,所以傳到itouch需要調整一下。在ffmpeg裡面可以用-s引數:
C程式碼  收藏程式碼
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -s 960x640 -f mp4 01.mp4  
960x640需要自己計算一下,按比例進行調整
按時間擷取:
C程式碼  收藏程式碼
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -ss 00:00:00 -t 00:01:00 -f mp4 01.mp4  
設定B-frame對動畫片有些好處,2pass的時候不是很明顯,1pass的比較明顯:
C程式碼  收藏程式碼
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -bf 6 -f mp4 01.mp4