概述
ffmpeg的官方介紹如下:
a complete, cross-platform solution to record, convert and stream audio and video.輸入與輸出可以是乙個或多個。
處理流程示意圖:
以下內容主要是學習了ffmpeg基礎使用後結合自己的實踐,做的乙個記錄和梳理。其中借鑑了原文的一些內容。
基礎命令
ffmpeg [global_options] ... ...
這是官方給的命令列概述,所有的命令都是以此為模版,通過填充引數構成的。
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
-t 時間長度
-r 設定幀速率,預設為25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
音訊引數:
-ar 設定取樣率
-ac 設定聲音的channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音訊
ffmpeg -ss 02:19:15 -t 00:01:10 -i input.mp4 -vcodec copy -acodec copy output.mp4
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
相反地,比如我有乙個「曉松奇談」,可是我不想看到他的臉,只想聽聲音,咋辦?
ffmpeg -i 曉松奇談.mp4 -acodec copy -vn output.aac
上面的命令,預設mp4的audio codec是aac,如果不是會出錯,咱可以暴力一點,不管什麼音訊,都轉為最常見的aac。
ffmpeg -i 曉松奇談.mp4 -acodec aac -vn output.aac
備註:aac是一種在***基礎上開發的旨在取代***的音訊格式。
反過來也一樣
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
4. 位元速率(也叫位元率,bitrate)控制
bitrate = file size / duration
比如乙個檔案20.8m,時長1分鐘,位元速率就是:
biterate = 20.8m bit/60s = 20.8*1024*1024*8 bit/60s= 2831kbps
ffmpg控制位元速率有3種選擇,-minrate -b:v -maxrate
5. 過濾器
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
結果如下:
-r 表示每一秒幾幀這樣ffmpeg會把input.mp4,每隔一秒,存一張下來。假設有60s,那會有60張。60張?這麼多?不要不要。。。。。不要咋辦?? 可以設定開始的時間,和你想要擷取的時間。-q:v 表示儲存jpeg的影象質量,一般2是高質量
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示開始時間這樣ffmpeg會從input.mp4的第20s時間開始,往下10s,即20~30s這10秒鐘之間,每隔1s就抓一幀,總共會抓10幀-t 表示要多長時間
7. 驚喜
ffmpeg -i "" output.mp4
參考
ffmpeg官方文件
ffmpeg基礎使用
pthread的基本使用方法
今天寫了個程式,但是很鬱悶的是沒有得到預想的結果 pthread t tid int main void pthread attr t attr pthread attr init attr pthread attr setdetachstate attr,pthread create detach...
SeekBar的基本使用方法
seekbar的基本使用方法 a 什麼是 seekbar b 使用 seekbar 的步驟 i.在布局檔案當中宣告seekbar android layout width fill parent android layout height wrap content ii.實現 onseekbarch...
標籤的基本使用方法
用於執行中從opencms vfs動態包含檔案,包含的檔案被當成乙個請求的附加引數。使用一下一些屬性來標識要包含的物件檔名稱 如果這些屬性都沒有設定,標籤的標籤體將使用別的方法得到檔名稱.注意 如果不能通過上訴方法得到包含的檔名稱,就會呼叫 當前cmsrequestcontext的 geturi 方...