1.視頻音頻格式轉(zhuǎn)換
Ffmpeg能使用任何支持的格式和協(xié)議作為輸入:
*比如你可以輸入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平面,它們是Y平面水平垂直的一半分辨率
*你能輸出原始的YUV420P文件
ffmpeg -i mydivx.avi -o hugefile.yuv
*你能設(shè)置幾個輸入文件和輸出文件
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg 上面的命令行轉(zhuǎn)換音頻文件a.wav和原始的YUV 視頻文件 a.yuv到mpeg文件a.mpeg
*你也能同時轉(zhuǎn)換音頻和視頻
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
上面的命令行轉(zhuǎn)換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
上面的命令行轉(zhuǎn)換一個64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在輸出流的順序上定義了那一路輸入流是用于每一個輸出流的,
轉(zhuǎn)碼解密的VOB:
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
上面的命令行將vob的文件轉(zhuǎn)化成avi文件,mpeg4的視頻和mp3的音頻。注意命令中使用了B幀,所以mpeg4流是divx5兼容的。GOP大小是300意味著29.97幀頻下每10秒就有INTRA幀。該映射在音頻語言的DVD轉(zhuǎn)碼時候尤其有用
2. Ffmpeg使用語法
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
如果沒有輸入文件,那么視音頻捕捉就會起作用。
作為通用的規(guī)則,選項一般用于下一個特定的文件。如果你給 –b 64選項,改選會設(shè)置下一個視頻速率。對于原始輸入文件,格式選項可能是需要的。
缺省情況下,ffmpeg試圖盡可能的無損轉(zhuǎn)換,采用與輸入同樣的音頻視頻參數(shù)來輸出。
3.選項
a) 通用選項
-L license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協(xié)議的。。。
-f fmt 強(qiáng)迫采用格式fmt
-I filename 輸入文件
-y 覆蓋輸出文件
-t duration 設(shè)置紀(jì)錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持
-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持
-title string 設(shè)置標(biāo)題
-author string 設(shè)置作者
-copyright string 設(shè)置版權(quán)
-comment string 設(shè)置評論
-target type 設(shè)置目標(biāo)文件類型(vcd,svcd,dvd) 所有的格式選項(比特率,編解碼以及緩沖區(qū)大?。┳詣釉O(shè)置 ,只需要輸入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高質(zhì)量設(shè)置
-itsoffset offset 設(shè)置以秒為基準(zhǔn)的時間偏移,該選項影響所有后面的輸入文件。該偏移被加到輸入文件的時戳,定義一個正偏移意味著相應(yīng)的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
b) 視頻選項
-b bitrate 設(shè)置比特率,缺省200kb/s
-r fps 設(shè)置幀頻 缺省25
-s size 設(shè)置幀大小 格式為WXH 缺省160X128.下面的簡寫也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 設(shè)置橫縱比 4:3 16:9 或 1.3333 1.7777
-croptop size 設(shè)置頂部切除帶大小 像素單位
-cropbottom size –cropleft size –cropright size
-padtop size 設(shè)置頂部補(bǔ)齊的大小 像素單位
-padbottom size –padleft size –padright size –padcolor color 設(shè)置補(bǔ)齊條顏色(hex,6個16進(jìn)制的數(shù),紅:綠:蘭排列,比如 000000代表黑色)
-vn 不做視頻記錄
-bt tolerance 設(shè)置視頻碼率容忍度kbit/s
-maxrate bitrate設(shè)置最大視頻碼率容忍度
-minrate bitreate 設(shè)置最小視頻碼率容忍度
-bufsize size 設(shè)置碼率控制緩沖區(qū)大小
-vcodec codec 強(qiáng)制使用codec編解碼方式。 如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝。
-sameq 使用同樣視頻質(zhì)量作為源(VBR)
-pass n 選擇處理遍數(shù)(1或者2)。兩遍編碼非常有用。第一遍生成統(tǒng)計信息,第二遍生成精確的請求的碼率
-passlogfile file 選擇兩遍的紀(jì)錄文件名為file
-
c)高級視頻選項
-g gop_size 設(shè)置圖像組大小
-intra 僅適用幀內(nèi)編碼
-qscale q 使用固定的視頻量化標(biāo)度(VBR)
-qmin q 最小視頻量化標(biāo)度(VBR)
-qmax q 最大視頻量化標(biāo)度(VBR)
-qdiff q 量化標(biāo)度間最大偏差 (VBR)
-qblur blur 視頻量化標(biāo)度柔化(VBR)
-qcomp compression 視頻量化標(biāo)度壓縮(VBR)
-rc_init_cplx complexity 一遍編碼的初始復(fù)雜度
-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 設(shè)置碼率控制方程 默認(rèn)tex^qComp
-rc_override override 特定間隔下的速率控制重載
-me method 設(shè)置運(yùn)動估計的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 設(shè)置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 設(shè)置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 設(shè)置錯誤殘留為n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 設(shè)置錯誤掩蔽為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個運(yùn)動矢量 僅用于mpeg4
-part 使用數(shù)據(jù)劃分 僅用于mpeg4
-bug param 繞過沒有被自動監(jiān)測到編碼器的問題
-strict strictness 跟標(biāo)準(zhǔn)的嚴(yán)格性
-aic 使能高級幀內(nèi)編碼 h263+
-umv 使能無限運(yùn)動矢量 h263+
-deinterlace 不采用交織方法
-interlace 強(qiáng)迫交織法編碼 僅對mpeg2和mpeg4有效。當(dāng)你的輸入是交織的并且你想要保持交織以最小圖像損失的時候采用該選項。可選的方法是不交織,但是損失更大
-psnr 計算壓縮幀的psnr
-vstats 輸出視頻編碼統(tǒng)計到vstats_hhmmss.log
-vhook module 插入視頻處理模塊 module 包括了模塊名和參數(shù),用空格分開
D)音頻選項
-ab bitrate 設(shè)置音頻碼率
-ar freq 設(shè)置音頻采樣率
-ac channels 設(shè)置通道 缺省為1
-an 不使能音頻紀(jì)錄
-acodec codec 使用codec編解碼
E)音頻/視頻捕獲選項
-vd device 設(shè)置視頻捕獲設(shè)備。比如/dev/video0
-vc channel 設(shè)置視頻捕獲通道 DV1394專用
-tvstd standard 設(shè)置電視標(biāo)準(zhǔn) NTSC PAL(SECAM)
-dv1394 設(shè)置DV1394捕獲
-av device 設(shè)置音頻設(shè)備 比如/dev/dsp
F)高級選項
-map file:stream 設(shè)置輸入流映射
-debug 打印特定調(diào)試信息
-benchmark 為基準(zhǔn)測試加入時間
-hex 傾倒每一個輸入包
-bitexact 僅使用位精確算法 用于編解碼測試
-ps size 設(shè)置包大小,以bits為單位
-re 以本地幀頻讀數(shù)據(jù),主要用于模擬捕獲設(shè)備
-loop 循環(huán)輸入流。只工作于圖像流,用于ffserver測試
先從ffmpeg開始。
http://ffmpeg.sourceforge.net上有說明,音視頻的分離,轉(zhuǎn)換,解碼的完全解決方案。
其中最重要的就是libavcodec庫。它被mplayer或者xine使用作為解碼器。還有,國內(nèi)比較流行的播放器影音風(fēng)暴或MyMPC的后端ffdshow也是使用ffmpeg的解碼庫的。
ffmpeg包括一組軟件,ffmpeg用于對媒體文件進(jìn)行處理,ffserver是一個http的流媒體服務(wù)器,ffplay是一個基于SDL的簡單播放器。兩個庫文件libavcodec和libavformat。
ffmpeg作為媒體文件處理軟件,基本用法如下:
ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile
輸入輸出文件通常就是待處理的多媒體文件了??梢允羌兇獾囊纛l文件,純粹的視頻文件,或者混合的。
大部分常見的格式都能夠“通殺”。象常見的各種mpeg,AVI封裝的DIVX和Xvid等等
具體的格式支持列表可以使用ffmpeg -formats查看或直接查閱文檔。
另:由于Linux把設(shè)備視為文件,因此-i選項后可以跟設(shè)備名。比如DV,視頻卡,光驅(qū)或者其它的各類設(shè)備。
輸出的內(nèi)容通過Options調(diào)整。列出幾個主要的選項
-vcodec 視頻流編碼方式
-b 視頻流碼率(默認(rèn)只有200k,一般都需要手動設(shè)置,具體的數(shù)值視codec選擇而定)
-r 視頻流幀數(shù)(一般說來PAL制式通常用25,NTSC制式通常用29)
-s 視頻解析度(分辨率,也要視codec和你的需要而定。通常改變某個視頻流的解析度是很耗費CPU的事情。另:具體寫法使用“數(shù)字x數(shù)字”的形式。中間是小寫字母“x”,這個用過mplayer的應(yīng)該都知道)
-t 處理持續(xù)時間。
-acodec 音頻流編碼方式
-ab 音頻流碼率(默認(rèn)是同源文件碼率,也需要視codec而定)
-ar 音頻流采樣率(大多數(shù)情況下使用44100和48000,分別對應(yīng)PAL制式和NTSC制式,根據(jù)需要選擇)
還有些可能需要用到的選項如
-vn和-an分別是屏蔽視頻流和屏蔽音頻流,分別對源文件處理一次即可得到分離的音頻和視頻
-author -title分別是設(shè)置媒體文件的作者和title
-f選項是強(qiáng)制使用某種格式
-target type是使用預(yù)置的格式轉(zhuǎn)換(可以轉(zhuǎn)成dvd,vcd或svcd)
除此之外還有些更高級的選項,如設(shè)定vbr,或設(shè)定high quality,或者設(shè)定vbr的buff和max/min碼率,象一般我們自用的dvd抓軌啦,DV轉(zhuǎn)vcd或dvd啦,網(wǎng)上下載的電影轉(zhuǎn)成vcd或dvd都不一定需要用到它們。
具體的使用方法在man里面有介紹。簡單明了。
少許使用經(jīng)驗:
1:ffmpeg對于rm的處理能力實在不敢恭維。也許是因為我主要使用二進(jìn)制包安裝的緣故,對于Real媒體格式只能處理老式的RV8編碼的格式。而且效果不佳。
2:格式轉(zhuǎn)換是一件很耗費CPU資源的事情。雖說ffmpeg已經(jīng)比WinAVI啦,TmpgEnc這些win下的非專業(yè)級視頻處理軟件做的好些了。畢竟我們可以把ffmpeg運(yùn)行的時候放到后臺。
3:ffmpeg不是萬能的,雖說支持的格式很多,但是如果你不是用的最新CVS出來的版本,可能碰上某些古怪的媒體文件就要郁悶。
4:ffmpeg全部是命令行操作。哪位達(dá)人寫個GUI前端出來就可以讓不少菜鳥脫離苦海了。還有就是不能批量處理,但是這個可以用shell幫忙解決。
聯(lián)系客服