FFMPEG使用參數詳解
目前又開始測MPEG1和MPEG2的解碼,在準備編碼好的測試序列過程中,需要通過編碼器來進行原始視頻序列的編碼操作,以生成我們需要的測試數據。由于IPP example提供的Encoder不支持MPEG1,經過查詢,決定MPEG1的編碼使用FFMPEG。FFMEPG是個啥子東西呢,這里簡單說一下:FFmpeg是用于錄制、轉換和流化音頻和視頻的完整解決方案,一套領先的音/視頻編解碼類庫。
FFmpeg的官方網址是 http://ffmpeg.mplayerhq.hu/ 。
中文Wiki是 http://www.ffmpeg.com.cn/ ?,資料很多。
??? 由于其免費開源性,遂決定就用它來進行視頻格式的壓縮轉換啦。首先再來啰嗦一點兒基本的FFmpeg主主要組成部分:
??? 1). libavcodec: 一個包含了所有FFmpeg音視頻編解碼器的庫。
??? 2). libavformat: 一個包含了所有的普通音視格式的解析器和產生器的庫。
三個實例程序(這三個實例基本可以作為API使用手冊):
ffmpeg:命令行的視頻格式轉換程序。
ffplay:視頻播放程序。(需要SDL支持)
ffserver:多媒體服務器
了解了它的大體組織結構,就明確了ffmpeg當然是我在尋找視頻格式壓縮轉換的第一選擇!
??? 由于FFmpeg 在Linux上開發的開源項目,把它放在windows下進行編譯實在是比較復雜啊,這個過程往往弄得新手很是頭大!!!,比如鄙人。好了,今天的重點不在于ffmpeg的編譯,因而就不在此一一記錄了,網上去找,關于ffmpeg編譯的方法何其之多,這里給大家幾個不錯的參考鏈接:
?? 對于Linux上的用戶,可以參考
http://www.ffmpeg.com.cn/index.php/Ffmpeg%E7%BC%96%E8%AF%91%E8%AF%A6%E8%A7%A3
?? 對于Windows用戶,可參考
http://bbs.chinavideo.org/viewthread.php?tid=1897&extra=page%3D1? 或
http://blog.sina.com.cn/s/blog_4673bfa501008xie.html??
?? 總之編譯是個很復雜的過程,我們還是加快速度,來領略ffmpeg的風采。
?? 在命令行下,鍵入ffmepg.exe -h ,以看其幫助,好家伙,其參數之多,還真是覺得無從下手啊,這么多參數,又該如何正確的設置呢?
?? 于是連Google帶使用摸索,將ffmpeg的參數在這里做一簡要整理和記錄,以備日后使用時查看方便。
?? 基本使用方式:ffmpeg [[options][`-i' input_file]] {[options] output_file}
??a) 通用選項
????? -L license
???? ?-h 幫助
????? -fromats 顯示可用的格式,編解碼的,協議的。。。
????? -f fmt 強迫采用格式fmt
????? -i filename 輸入文件
????? -y 覆蓋輸出文件(即如果test.***文件已經存在的話,不經提示就覆蓋掉了)
????? -t duration 設置紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持
????? -ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持。使用-ss參數的作用,可以從指定時間點開始轉換任務,-ss后的時間單位為秒
????? -title string 設置標題(比如PSP中顯示影片的標題)
????? -author string 設置作者
????? -copyright string 設置版權
????? -comment string 設置評論
????? -target type 設置目標文件類型(vcd,svcd,dvd) 所有的格式選項(比特率,編解碼以及緩沖區大小)自動設置 ,只需要輸入如下的就可以了:ffmpeg -i myfile.avi -target vcd vcd.mpg
????? -hq 激活高質量設置
????? -itsoffset offset 設置以秒為基準的時間偏移,該選項影響所有后面的輸入文件。該偏移被加到輸入文件的時戳,定義一個正偏移意味著相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持。
????? b) 視頻選項
????? -b bitrate 設置比特率,缺省200kb/s
????? -vb bitrate?? set bitrate (in bits/s)
????? -vframes number? 設置要編碼多少幀?
????? -r fps 設置幀頻 缺省25
????? -s size 設置幀大小 格式為W*H 缺省160X128.也可以直接使用簡寫,也認:Sqcif? qcif? cif 4cif 等
????? -aspect aspect 設置橫縱比 4:3 16:9 或 1.3333 1.7777
????? -croptop size 設置頂部切除帶大小 像素單位
????? -cropbottom size -cropleft size -cropright size
????? -padtop size 設置頂部補齊的大小 像素單位
????? -padbottom size -padleft size -padright size -padcolor color 設置補齊條顏色(hex,6個16進制的數,紅:綠:蘭排列,比如 000000代表黑色)
????? -vn 不做視頻記錄
????? -bt tolerance 設置視頻碼率容忍度kbit/s (固定誤差)
????? -maxrate bitrate設置最大視頻碼率容忍度 (可變誤差)
????? -minrate bitreate 設置最小視頻碼率容忍度(可變誤差)
????? -bufsize size 設置碼率控制緩沖區大小
????? -vcodec codec 強制使用codec編解碼方式,如-vcodec xvid 使用xvid壓縮 如果用copy表示原始編解碼數據必須被拷貝。
????? -sameq 使用同樣視頻質量作為源(VBR)
????? -pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計信息,第二遍生成精確的請求的碼率
????? -passlogfile file 選擇兩遍的紀錄文件名為file
c)高級視頻選項
-g gop_size 設置圖像組大小 這里設置GOP大小,也表示兩個I幀之間的間隔
-intra 僅適用幀內編碼
-qscale q? 使用固定的視頻量化標度(VBR)? 以<q>質量為基礎的VBR,取值0.01-255,約小質量越好,即qscale 4和-qscale 6,4的質量比6高 。此參數使用次數較多,實際使用時發現,qscale是種固定量化因子,設置qscale之后,前面設置的-b好像就無效了,而是自動調整了比特率。
-qmin q 最小視頻量化標度(VBR) 設定最小質量,與-qmax(設定最大質量)共用
-qmax q 最大視頻量化標度(VBR) 使用了該參數,就可以不使用qscale參數
-qdiff q 量化標度間最大偏差 (VBR)
-qblur blur 視頻量化標度柔化(VBR)
-qcomp compression 視頻量化標度壓縮(VBR)
-rc_init_cplx complexity 一遍編碼的初始復雜度
-b_qfactor factor 在p和b幀間的qp因子
-i_qfactor factor 在p和i幀間的qp因子
-b_qoffset offset 在p和b幀間的qp偏差
-i_qoffset offset 在p和i幀間的qp偏差
-rc_eq equation 設置碼率控制方程 默認tex^qComp
-rc_override override 特定間隔下的速率控制重載
-me method 設置運動估計的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 設置dct的算法 可用:
0 FF_DCT_AUTO 缺省的DCT?
1 FF_DCT_FASTINT
2 FF_DCT_INT
3 FF_DCT_MMX
4 FF_DCT_MLIB
5 FF_DCT_ALTIVEC
-idct_algo algo 設置idct算法。可用的有:
?0 FF_IDCT_AUTO 缺省的IDCT
1 FF_IDCT_INT?
2 FF_IDCT_SIMPLE?
3 FF_IDCT_SIMPLEMMX?
4 FF_IDCT_LIBMPEG2MMX
5 FF_IDCT_PS2?
6 FF_IDCT_MLIB
7 FF_IDCT_ARM
8 FF_IDCT_ALTIVEC
9 FF_IDCT_SH4
10 FF_IDCT_SIMPLEARM
-er n 設置錯誤殘留為n
1 FF_ER_CAREFULL 缺省
2 FF_ER_COMPLIANT
3 FF_ER_AGGRESSIVE
4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 設置錯誤掩蔽為bit_mask,該值為如下值的位掩碼 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames個B 幀,支持mpeg1,mpeg2,mpeg4(即如果-bf 2的話,在兩個非b幀中間隔的b幀數目為2,即IBBPBBPBBP結構)
-mbd mode 宏塊決策
0 FF_MB_DECISION_SIMPLE 使用mb_cmp
1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4個運動矢量 僅用于mpeg4
-part 使用數據劃分 僅用于mpeg4
-bug param 繞過沒有被自動監測到編碼器的問題
-strict strictness 跟標準的嚴格性
-aic 使能高級幀內編碼 h263+
-umv 使能無限運動矢量 h263+
-deinterlace 不采用交織方法
-interlace 強迫交織法編碼 僅對mpeg2和mpeg4有效。當你的輸入是交織的并且你想要保持交織以最小圖像損失的時候采用該選項。可選的方法是不交織,但是損失更大
-psnr 計算壓縮幀的psnr
-vstats 輸出視頻編碼統計到vstats_hhmmss.log
-vhook module 插入視頻處理模塊 module 包括了模塊名和參數,用空格分開
-bitexact 使用標準比特率
-max_qdiff? 視頻中所有楨(包括i/b/P)的最大Q值差距
-b_qfactor 表示i/p與B的Q值比例因子,值越大B楨劣化越嚴重
-b_qoffset 表示1/p與B的Q值比例的偏移量,值越大B楨劣化越嚴重.如果大于0,那么下一個B的Q=前一個P的Q乘以b_quant_factor再加上offset,如果小于0,則B的Q=負的normal_Q乘以factor加上offset.
-i_qfactor?? p和i的Q值比例因子,越接近1則P越優化.
-i_qoffset?? p和i的Q的偏移量
?
D)音頻選項
?? -ab bitrate 設置音頻碼率
?? -ar freq 設置音頻采樣率
?? -ac channels 設置通道 缺省為1,即單通道
?? -an 不使能音頻紀錄
? ?-acodec codec 使用codec編解碼 如:-acodec AAC 使用AAC音頻編碼