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開始,跟隨U和V,U和V是Y平面一半解析度
*輸出原始的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.yuv到mpeg文件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.wav到128kbits的a.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,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測試
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
沒有留言:
張貼留言