1. 程式人生 > >ffmpeg 常用命令彙總

ffmpeg 常用命令彙總

ffmpeg非常強大,輕鬆幾條命令就可以完成你的工作。

把darkdoor.[001-100].jpg序列幀和001.mp3音訊檔案利用mpeg4編碼方式合成視訊檔案darkdoor.avi:
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi

ffmpeg還支援mov格式:
$ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov

要檢視你的ffmpeg支援哪些格式,可以用如下命令:
$ ffmpeg -formats | less



還可以把視訊檔案匯出成jpg序列幀:
$ ffmpeg -i bc-cinematic-en.avi example.%d.jpg

debian下安裝ffmpeg很簡單:
#apt-get install ffmpeg

###################################
###

下面是轉來的使用說明,慢慢研究吧,嘿嘿

######################################

ffmpeg使用語法

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

二、Ffmpeg使用語法

Ffmpeg使用語法

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

如果沒有輸入檔案,那麼視音訊捕捉(只在Linux下有效,因為Linux下把音視訊裝置當作檔案控制代碼來處理)就會起作用。作為通用的規則,選項一 般用於下一個特定的檔案。如果你給 –b 64選項,改選會設定下一個視訊速率。對於原始輸入檔案,格式選項可能是需要的。預設情況下,ffmpeg試圖儘可能的無損轉換,採用與輸入同樣的音訊視 頻引數來輸出。


ffmpeg轉換所涉及到的選項較多,可參考ffmpeg選項詳解


ffmpeg支援多種檔案格式和多種音訊、視訊編碼器,可參考ffmepg格式詳解,(附:常見視訊檔案格式詳解

視訊檔案截圖

  • 擷取一張352x240尺寸大小的,格式為jpg的圖片
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
  • 把視訊的前30幀轉換成一個Animated Gif
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
  • 擷取指定時間的縮微圖
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss後跟的時間單位為秒
  • 轉換檔案為3GP格式
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 
-acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp

視訊格式轉換

  • 如何使用 ffmpeg 編碼得到高質量的視訊
ffmpeg.exe -i "D:\Video\Fearless\Fearless.avi" -target film-dvd -s 720x352
-padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000
-trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2
-aspect 16:9 -pass 2 -passlogfile "D:\Video\ffmpegencode" -an -f mpeg2video "D:\Fearless.m2v"
  • 轉換指定格式檔案到FLV格式
ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
  • 轉碼解密的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轉碼時候尤其有用。
  • 同時編碼到幾種格式並且在輸入流和輸出流之間建立對映
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’在輸出流的順序上定義了哪一路輸入流是用於每一個輸出流的。
  • 轉換檔案為3GP格式
ffmpeg -i test.avi -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 test.3gp
注:如果要轉換為3GP格式,則ffmpeg在編譯時必須加上–enable-amr_nb –enable-amr_wb,詳細內容可參考:轉換視訊為3GPP格式

螢幕錄製

  • 使用ffmpeg錄影螢幕
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi

:其中,-vd x11:0,0 指錄製所使用的偏移為 x=0 和 y=0,-s 1024×768 指錄製視訊的大小為 1024×768。錄製的視訊檔案為 test.avi,將儲存到使用者主目錄中

如果你只想錄製一個應用程式視窗或者桌面上的一個固定區域,那麼可以指定偏移位置和區域大小。使用xwininfo -frame命令可以完成查詢上述引數。
  • 重新調整視訊尺寸大小
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi
注:ffmpeg的螢幕錄製功能只能在Linux環境下有效。

視訊採集

  • 把攝像頭的實時視訊錄製下來,儲存為檔案
ffmpeg  -f video4linux -s 320*240 -r 10 -i /dev/video0  test.asf
三、ffmepg使用

The generic syntax is:

ffmpeg [[infile options][`-i' infile]]… {[outfile options] outfile}…

As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same option on the command line multiple times. Each occurrence is then applied to the next input or output file.

* To set the video bitrate of the output file to 64kbit/s:

ffmpeg -i input.avi -b 64k output.avi

* To force the frame rate of the input and output file to 24 fps:

ffmpeg -r 24 -i input.avi output.avi

* To force the frame rate of the output file to 24 fps:

ffmpeg -i input.avi -r 24 output.avi

* To force the frame rate of input file to 1 fps and the output file to 24 fps:

ffmpeg -r 1 -i input.avi -r 24 output.avi

The format option may be needed for raw input files.

By default, FFmpeg tries to convert as losslessly as possible: It uses the same audio and video parameters for the outputs as the one specified for the inputs.

轉換檔案為3GP格式
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp

ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp

轉換指定格式檔案到FLV格式

ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
***************************************************************************
ffmpeg -i F:\tools\ffmpeg.rev10464\test.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 F:\tools\ffmpeg.rev10464\test.flv
ffmpeg -i "F:\tools\ffmpeg.rev10464\test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 "test.jpg"
 


ffmpeg.exe -i F:\閃客之家\閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv 
ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
使用-ss引數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如: 
轉換檔案格式的同時抓縮微圖: 
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
對已有flv抓圖: 
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
-ss後跟的時間單位為秒 
Ffmpeg轉換命令 
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 
-ab 24 -f 3gp test.3gp 
或者 
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp 


ffmpeg引數設定解說 
-bitexact 使用標準位元率 
-vcodec xvid 使用xvid壓縮 
-s 320x240 指定解析度 
-r 29.97 楨速率(可以改,確認非標準楨率會導致音畫不同步,所以只能設定為15或者29.97) 
畫面部分,選其一 
-b <位元率> 指定壓縮位元率,似乎ffmpeg是自動VBR的,指定了就大概是平均位元率,比如768,1500這樣的 
就是原來預設專案中有的 
-qscale <數值> 以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好 
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同樣的質量 
聲音部分 
-acodec aac 設定聲音編碼 
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質 
的DVDrip就可以用2 
-ar <取樣率> 設定聲音取樣率,PSP只認24000 
-ab <位元率> 設定聲音位元率,前面-ac設為立體聲時要以一半位元率來設定,比如192kbps的就設成96,轉換 
君預設位元率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上 
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍 
這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定位元率,而用VBR引數讓程式自己去 
判斷,而音質引數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整 


例子: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 "1.***" 

解釋:以上命令可以在Dos命令列中輸入,也可以建立到批處理檔案中執行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。 
引數: 
-y(覆蓋輸出檔案,即如果1.***檔案已經存在的話,不經提示就覆蓋掉了) 
-i "1.avi"(輸入檔案是和ffmpeg在同一目錄下的1.avi檔案,可以自己加路徑,改名字) 
-title "Test"(在PSP中顯示的影片的標題) 
-vcodec xvid(使用XVID編碼壓縮視訊,不能改的) 
-s 368x208(輸出的解析度為368x208,注意片源一定要是16:9的不然會變形) 
-r 29.97(幀數,一般就用這個吧) 
-b 1500(視訊資料流量,用-b xxxx的指令則使用固定位元速率,數字隨便改,1500以上沒效果;還可以用動態位元速率如:-qscale 4和-qscale 6,4的質量比6高) 
-acodec aac(音訊編碼用AAC) 
-ac 2(聲道數1或2) 
-ar 24000(聲音的取樣頻率,好像PSP只能支援24000Hz) 
-ab 128(音訊資料流量,一般選擇32、64、96、128) 
-vol 200(200%的音量,自己改) 
-f psp(輸出psp專用格式) 
-muxvb 768(好像是給PSP機器識別的位元速率,一般選擇384、512和768,我改成1500,PSP就說檔案損壞了) 
"1.***"(輸出檔名,也可以加路徑改檔名) 

機器強勁的話,可以多開幾個批處理檔案,讓它們並行處理。 
E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:\2.flv 
===========================================
ffmpeg.exe -i F:\閃客之家\閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss引數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如:
轉換檔案格式的同時抓縮微圖:
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
對已有flv抓圖:
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss後跟的時間單位為秒 Ffmpeg轉換命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg引數設定解說 
-bitexact 使用標準位元率 
-vcodec xvid 使用xvid壓縮 
-s 320x240 指定解析度 
-r 29.97 楨速率(可以改,確認非標準楨率會導致音畫不同步,所以只能設定為15或者29.97) 


畫面部分,選其一 
-b <位元率> 指定壓縮位元率,似乎ffmpeg是自動VBR的,指定了就大概是平均位元率,比如768,1500這樣的就是原來預設專案中有的 
-qscale <數值> 以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好 
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同樣的質量 聲音部分 
-acodec aac 設定聲音編碼 
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質的DVDrip就可以用2 
-ar <取樣率> 設定聲音取樣率,PSP只認24000 
-ab <位元率> 設定聲音位元率,前面-ac設為立體聲時要以一半位元率來設定,比如192kbps的就設成96,轉換君預設位元率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上 
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍 這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定位元率,而用VBR引數讓程式自己去判斷,而音質引數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整 例子: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 "1.***"

解釋:以上命令可以在Dos命令列中輸入,也可以建立到批處理檔案中執行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。
引數:
-y(覆蓋輸出檔案,即如果1.***檔案已經存在的話,不經提示就覆蓋掉了)
-i "1.avi"(輸入檔案是和ffmpeg在同一目錄下的1.avi檔案,可以自己加路徑,改名字)
-title "Test"(在PSP中顯示的影片的標題)
-vcodec xvid(使用XVID編碼壓縮視訊,不能改的)
-s 368x208(輸出的解析度為368x208,注意片源一定要是16:9的不然會變形)
-r 29.97(幀數,一般就用這個吧)
-b 1500(視訊資料流量,用-b xxxx的指令則使用固定位元速率,數字隨便改,1500以上沒效果;還可以用動態位元速率如:-qscale 4和-qscale 6,4的質量比6高)
-acodec aac(音訊編碼用AAC)
-ac 2(聲道數1或2)
-ar 24000(聲音的取樣頻率,好像PSP只能支援24000Hz)
-ab 128(音訊資料流量,一般選擇32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(輸出psp專用格式)
-muxvb 768(好像是給PSP機器識別的位元速率,一般選擇384、512和768,我改成1500,PSP就說檔案損壞了)
"1.***"(輸出檔名,也可以加路徑改檔名)

P.S. 版主機器強勁的話,可以多開幾個批處理檔案,讓它們並行處理。 E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac