FFmpeg的名稱來自MPEG視頻編碼標準,前面的「FF」表明「Fast Forward」,FFmpeg是一套能夠用來音視頻採集、音視頻格式轉換,編碼解碼,視頻截圖,加水印等的開源計算機程序。能夠輕易地實現多種視頻格式之間的相互轉換。json
FFmpeg一共包含四個主要程序:服務器
ffmpeg -i input.flv -c:v libx264 -c:a libfaac -b:v 800k -b:a 100k -r 25 -ar 48000 -s 1280x720 -f flv out.flv
ffprobe -i input -print_format json -show_format -show_streams -show_frames
這裏咱們主要說一說ffmpegide
ffmpeg的使用方式: 工具
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
經常使用參數說明:
主要參數: 測試
-i 設定輸入流 編碼
-f 設定輸出格式,指定輸出格式爲flv,這裏的flv能夠替換爲mp4,ts,hls等,後面接着輸出文件名spa
-ss 指定截取的開始時間命令行
-t 指定截取的結束時間,能夠用兩種方式指定時間,一種是用時分秒指定、中間用冒號分離HH:MM:SS,另外一種是直接用秒數指定code
-y 即若是文件存在,直接覆蓋寫orm
-n 永遠不會覆蓋輸出文件
視頻參數:
-b:v 指定視頻碼率,默認爲200Kbit/s 碼率:是一個肯定總體視頻/音頻質量的參數,秒爲單位處理的字節數 。
-r 設定幀速率,默認爲25 幀率:幀率也叫幀頻率,幀率是視頻文件中每一秒的幀數,肉眼想看到連續移動圖像至少須要15幀。 幀:表明一幅靜止的圖像
-s 改變視頻的分辨率 ,設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器
-c:v 指定視頻編碼格式
-c:v copy 指定音頻不轉碼
-vframes number設置要輸出的視頻幀數
-vf filter_graph 設置視頻過濾器
音頻參數:
-ar 設定採樣率
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻
-b:a 指定音頻碼率
-c:a 指定音頻編碼格式
-c:a copy 指定音頻不轉碼
-frames number設置要輸出的音頻幀數
-af filter_graph 設置音頻過濾器
(其實格式轉換說法不太準確,但你們都這麼叫,準確的說,應該是視頻容器轉換) 好比一個avi文件,想轉爲mp4,或者一個mp4想轉爲ts。 ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts
常常要測試視頻,可是隻須要測幾秒鐘,但是視頻卻有幾個G,咋辦?切啊!
下面的命令,就能夠從時間爲00:00:15開始,截取5秒鐘的視頻。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示開始切割的時間,-t表示要切多少。上面就是從開始,切5秒鐘出來。
碼率控制對於在線視頻比較重要。由於在線視頻須要考慮其能提供的帶寬。
那麼,什麼是碼率?很簡單:
bitrate = file size / duration
好比一個文件20.8M,時長1分鐘,那麼,碼率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
通常音頻的碼率只有固定幾種,好比是128Kbps,
那麼,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。
說完背景了。好了,來講ffmpeg如何控制碼率。
ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate
-b:v主要是控制平均碼率。
好比一個視頻源的碼率過高了,有10Mbps,文件太大,想把文件弄小一點,可是又不破壞分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
上面把碼率從原碼率轉成2Mbps碼率,這樣其實也間接讓文件變小了。目測接近一半。
不過,ffmpeg官方wiki比較建議,設置b:v時,同時加上 -bufsize
-bufsize 用於設置碼率控制緩衝器的大小,設置的好處是,讓總體的碼率更趨近於但願的值,減小波動。(簡單來講,好比1 2的平均值是1.5, 1.49 1.51 也是1.5, 固然是第二種比較好)
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate -maxrate就簡單了,在線視頻有時候,但願碼率波動,不要超過一個閾值,能夠設置maxrate。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//ps: 若是540不寫,寫成-1,即scale=960:-1, 那也是能夠的,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比。