2007年5月26日 星期六

FFMPEG簡單介紹

FFMPEG 編譯

使用msys+mingw,編譯成可以供vc調用的靜態庫

FFMPEG功能

1 視頻音頻格式轉換

Ffmpeg能使用任何支援的格式和協定作為輸入:

*比如你可以輸入YUV檔:ffmpeg -i /tmp/test%d.Y /tmp/out.mpg

使用如下檔:

/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,

/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V,等等…

*輸入原始的YUV420P檔:ffmpeg -i /tmp/test.yuv /tmp/out.avi

原始的YUV420P檔包含原始的YUV,每幀以Y開始,跟隨UVUVY平面一半解析度

*輸出原始的YUV420P

ffmpeg -i mydivx.avi -o hugefile.yuv

*設置幾個輸入檔和輸出檔

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

上面的命令轉換音頻檔a.wav和原始的YUV 視頻檔 a.yuvmpeg文件a.mpeg

*同時轉換音頻和視頻

ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

上面的命令行轉換a.wav的採樣率到22050HZ並編碼為mpeg音頻

*同時編碼到幾種格式並且在輸入流和輸出流之間建立映射

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

上面的命令行轉換一個64Kbits a.wav128kbitsa.mp2 ‘-map file:index’在輸出流的順序上定義了那一路輸入流是用於每一個輸出流的,

*轉碼解密的VOB:

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

上面的命令行將vob的文件轉化成avi檔,mpeg4的視頻和mp3的音頻。注意命令中使用了B幀,所以mpeg4流是divx5相容的。GOP大小是300意味著29.97幀頻下每10秒就有INTRA幀。該映射在音頻語言的DVD轉碼時候尤其有用

2 Ffmpeg使用語法

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果沒有輸入檔,那麼視音頻捕捉就會起作用。

作為通用的規則,選項一般用於下一個特定的檔。如果你給 –b 64選項,改選會設置下一個視頻速率。對於原始輸入檔,格式選項可能是需要的。

缺省情況下,ffmpeg試圖盡可能的無損轉換,採用與輸入同樣的音頻視頻參數來輸出。

3.選項

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,616進制的數,紅::蘭排列,比如 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 pb幀間的qp因數

-i_qfactor factor pi幀間的qp因數

-b_qoffset offset pb幀間的qp偏差

-i_qoffset offset pi幀間的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 強迫交織法編碼 僅對mpeg2mpeg4有效。當你的輸入是交織的並且你想要保持交織以最小圖像損失的時候採用該選項。可選的方法是不交織,但是損失更大

-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測試

Windows編譯:

http://www.mingw.org/ MSYS MinGW

http://www.libsdl.org SDL

./configure

make

make install

./configure –enable-shared可以創建dll

API的使用:

詳見libavcodec/apiexample.c ffplayer.c output_example.c

2007年5月3日 星期四

什麼是K-MEANS演算法?

K-MEANS演算法:

輸入:群族個數k,以及包含 n個資料物件的資料庫。

輸出:滿足方差最小標準的k個群族。

處理流程:
1 n個資料物件任意選擇 k 個物件作為初始群族中心;
2 迴圈(3)到(4)直到每個群族不再發生變化為止
3 根據每個群族物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;
4 重新計算每個(有變化)群族的均值(中心物件) k-means 演算法接受輸入量 k ;然後將n個資料物件劃分為 k個群族以便使得所獲得的群族滿足:同一群族中的物件相似度較高;而不同群族中的物件相似度較小。群族相似度是利用各群族中物件的均值所獲得一個中心對象來進行計算的。

k-means 演算法的工作過程說明如下:首先從n個資料物件任意選擇 k 個物件作為初始群族中心;而對於所剩下其他物件,則根據它們與這些群族中心的相似度(距離),分別將它們分配給與其最相似的(群族中心所代表的)群族;然 後再計算每個所獲新群族的群族中心(該群族中所有物件的均值);不斷重複這一過程直到標準測度函數開始收斂為止。一般都採用均方差作為標準測度函數. k個群族具有以下特點:各群族本身盡可能的緊湊,而各群族之間盡可能的分開。