ffmpeg是一個開源免費跨平台的視訊和音頻流方案,屬于自由軟體,采用lgpl或 gpl許可證(依據你選擇的元件)。它提供了錄制、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音頻/視訊編解碼庫libavcodec,為了 保證高可移植性和編解碼品質,libavcodec裡很多codec都是從頭開發的。
ffmpeg在linux平台下開發,但它同樣也可以在其它作業系統環境中編譯運作,包括windows、mac os x等。
ffmpeg項目由以下幾部分組成:
ffmpeg 視訊檔案轉換指令行工具,也支援經過實時電視卡抓取和編碼成視訊檔案。
ffserver 基于http(rtsp正在開發中)用于實時廣播的多媒體伺服器,也支援時間平移.
ffplay 用sdl和ffmpeg庫開發的一個簡單的媒體播放器.
libavcodec 一個包含了所有ffmpeg音視訊編解碼器的庫.為了保證最優性能和高可複用性,大多數編解碼器從頭開發的.
libavformat 一個包含了所有的普通音視格式的解析器和産生器的庫.
例子:ffmpeg -y -i "1.avi" -title "test" -vcodec xvid -s 368x208 -r
29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb
768 "output.wmv"
解釋:以上指令可以在dos指令行中輸入,也可以建立到批處理檔案中運作。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。
輸入輸出檔案通常就是待處理的多媒體檔案了。可以是純粹的音頻檔案,純粹的視訊檔案,或者混合的。大部分常見的格式都能夠“通殺”。象常見的各種
mpeg,avi封裝的divx和xvid等等,具體的格式支援清單可以使用ffmpeg -formats檢視或直接查閱文檔。
另:由于linux把裝置視為檔案,是以-i選項後可以跟裝置名。比如dv,視訊卡,光驅或者其它的各類裝置。
參數:
-y 覆寫輸出檔案,即如果 output.wmv 檔案已經存在的話,不經提示就覆寫掉
-i "1.avi" 輸入檔案是和ffmpeg在同一目錄下的1.avi檔案,可以自己加路徑,改名字
-title "test" 在psp中顯示的影片的标題
-vcodec xvid 使用xvid編碼壓縮視訊,不能改的,對應的庫為libxvid
-s 368x208 輸出的分辨率為368x208,注意片源一定要是16:9的不然會變形
-r 29.97 幀數,一般就用這個吧
-b 1500 視訊資料流量,用-b xxxx的指令則使用固定碼率,數字随便改,1500以上沒效果;還可以用動态碼率如:-qscale 4和-qscale 6,4的品質比6高
-acodec aac 音頻編碼用aac 對應的庫為libfaac
-ac 2 聲道數1或2
-ar 24000 聲音的采樣頻率,好像psp隻能支援24000hz
-ab 128 音頻資料流量,一般選擇32、64、96、128
-vol 200 200%的音量,自己改
-muxvb 768 好像是給psp機器識别的碼率,一般選擇384、512和768,我改成1500,psp就說檔案損壞了
-f psp 輸出psp專用格式
"output.wmv" 輸出檔案名,也可以加路徑改檔案名
示例1:
截取一張352x240尺寸大小的,格式為jpg的圖檔:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
示例2:
把視訊的前30幀轉換成一個animated gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
示例3:
在視訊的第8.01秒處截取 352*240 的縮略圖
ffmpeg -i test2.asf -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg
a) 通用選項
-l license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協定的。。。
-f fmt 強迫采用格式fmt
-i filename 輸入檔案
-y 覆寫輸出檔案
-t duration 設定紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支援
-ss position 搜尋到指定的時間 [-]hh:mm:ss[.xxx]的格式也支援
-title string 設定标題
-author string 設定作者
-copyright string 設定版權
-comment string 設定評論
-target type 設定目标檔案類型(vcd,svcd,dvd) 所有的格式選項(比特率,編解碼以及緩沖區大小)自動設定 ,隻需要輸入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高品質設定
-itsoffset offset 設定以秒為基準的時間偏移,該選項影響所有後面的輸入檔案。該偏移被加到輸入檔案的時戳,定義一個正偏移意味着相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支援
b) 視訊選項
-b bitrate 設定比特率,預設200kb/s
-r fps 設定幀頻 預設25
-s size 設定幀大小 格式為wxh 預設160x128.下面的簡寫也可以直接使用:
sqcif 128x96 qcif 176x144 cif 252x288 4cif 704x576
-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編解碼方式。 如果用copy表示原始編解碼資料必須被拷貝。
-sameq 使用同樣視訊品質作為源(vbr)
-pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計資訊,第二遍生成精确的請求的碼率
-passlogfile file 選擇兩遍的紀錄檔案名為file
c)進階視訊選項
-g gop_size 設定圖像組大小
-intra 僅适用幀内編碼
-qscale q 使用固定的視訊量化标度(vbr)
-qmin q 最小視訊量化标度(vbr)
-qmax q 最大視訊量化标度(vbr)
-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
-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 包括了子產品名和參數,用空格分開
d)音頻選項
-ab bitrate 設定音頻碼率
-ar freq 設定音頻采樣率
-ac channels 設定通道 預設為1
-an 不使能音頻紀錄
-acodec codec 使用codec編解碼
e)音頻/視訊捕獲選項
-vd device 設定視訊捕獲裝置。比如/dev/video0
-vc channel 設定視訊捕獲通道 dv1394專用
-tvstd standard 設定電視标準 ntsc pal(secam)
-dv1394 設定dv1394捕獲
-av device 設定音頻裝置 比如/dev/dsp
f)進階選項
-map file:stream 設定輸入流映射
-debug 列印特定調試資訊
-benchmark 為基準測試加入時間
-hex 傾倒每一個輸入包
-bitexact 僅使用位精确算法 用于編解碼測試
-ps size 設定包大小,以bits為機關
-re 以本地幀頻讀資料,主要用于模拟捕獲裝置
-loop 循環輸入流。隻工作于圖像流,用于ffserver測試