ffmpeg 簡介
ffmpeg 用於轉碼的應用程序,命令格式:html
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
簡單示例:ide
ffmpeg -i test.wmv test.avi
英文手冊編碼
參數
查看詳細的參數選項能夠使用:spa
ffmpeg -h
經常使用的參數選項
主要參數: -i 設定輸入流 -f 設定輸出格式 -ss 開始時間 視頻參數: -b 設定視頻流量,默認爲200Kbit/s -r 設定幀速率,默認爲25 -s 設定畫面的寬與高 -aspect 設定畫面的比例 -vn 不處理視頻 -vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器 音頻參數: -ar 設定採樣率 -ac 設定聲音的Channel數 -acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器 -an 不處理音頻
簡單的應用
//視頻格式轉換 ffmpeg -i input.avi output.mp4 //提取音頻 ffmpeg -i input.avi -acodec copy -vn output.aac //提取視頻 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 // 視頻剪切,從時間爲00:00:15開始,截取5秒鐘的視頻。 ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 // 輸出YUV420原始數據 ffmpeg -i input.mp4 output.yuv
複雜應用
碼率控制
什麼是碼率?很簡單: bitrate = file size / duration 好比一個文件20.8M,時長1分鐘,那麼,碼率就是: biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps 通常音頻的碼率只有固定幾種,好比是128Kbps, 那麼,video的就是 video biterate = 2831Kbps -128Kbps = 2703Kbps。3d
ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate -b:v主要是控制平均碼率。 好比一個視頻源的碼率過高了,有10Mbps,文件太大,想把文件弄小一點,可是又不破壞分辨率。code
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。htm
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
視頻編碼格式轉換
好比一個視頻的編碼是MPEG4,想用H264編碼:圖片
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反也同樣:get
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
固然了,若是ffmpeg當時編譯時,添加了外部的x265或者X264,那也能夠用外部的編碼器來編碼。
ffmpeg -i input.mp4 -c:v libx265 output.mp4 ffmpeg -i input.mp4 -c:v libx264 output.mp4
將輸入的1920x1080縮小到960x540輸出:
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
若是540不寫,寫成-1,即scale=960:-1, 那也是能夠的,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比。
爲視頻添加logo:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
默認添加到左上角,要添加到其它位置: 右上角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
左下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
右下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
抓取視頻的一些幀,存爲jpeg圖片
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒幾幀 -q:v表示存儲jpeg的圖像質量,通常2是高質量。
如此,ffmpeg會把input.mp4,每隔一秒,存一張圖片下來。假設有60s,那會有60張。
能夠設置開始的時間,和你想要截取的時間呀。
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示開始時間 -t表示共要多少時間。 如此,ffmpeg會從input.mp4的第20s時間開始,往下10s,即20~30s這10秒鐘之間,每隔1s就抓一幀,總共會抓10幀。