ffmpeg的基本使用方法

2021-10-02 14:54:35 字數 2238 閱讀 2084

概述

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 表示每一秒幾幀

-q:v 表示儲存jpeg的影象質量,一般2是高質量

這樣ffmpeg會把input.mp4,每隔一秒,存一張下來。假設有60s,那會有60張。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幀

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 方...