FFmpeg

 FFmpeg的名稱來自MPEG視頻編碼標準,前面的「FF」表明「Fast Forward」,FFmpeg是一套能夠用來音視頻採集、音視頻格式轉換,編碼解碼,視頻截圖,加水印等的開源計算機程序。能夠輕易地實現多種視頻格式之間的相互轉換。json

FFmpeg一共包含四個主要程序:服務器

  • 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
  • ffsever:是一個HTTP多媒體實時廣播流服務器,支持時光平移
  • ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,經過SDL顯示;
  • ffprobe:探測分析視音頻文件
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

只提取視頻ES數據

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

將輸入的1920x1080縮小到960x540輸出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 

//ps: 若是540不寫,寫成-1,即scale=960:-1, 那也是能夠的,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比。

相關文章
相關標籤/搜索