FFMPEG 命令行工具- ffmpeg


ffmpeg 簡介

ffmpeg 用於轉碼的應用程序,命令格式:

ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

簡單示例:

ffmpeg -i test.wmv test.avi

英文手冊

參數

查看詳細的參數選項可以使用:

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。

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

視頻編碼格式轉換

比如一個視頻的編碼是MPEG4,想用H264編碼:

ffmpeg -i input.mp4 -vcodec h264 output.mp4 

相反也一樣:

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會通知縮放濾鏡在輸出時保持原始的寬高比。

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幀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM