正文
為了最優(yōu)地使用各種FFmpeg組件,需要正確理解FFmpeg的基本屬性和特性。如果你基礎差了點瓣赂,看了不知道說的啥,您可以繼續(xù)下一章片拍,并在遇到需要了解的內容的時候再回來看煌集。
FFmpeg介紹
FFmpeg是根據(jù)GNU通用公共許可證獲得許可的多媒體處理自由軟件項目的名稱。 該項目最受歡迎的部分是用于視頻和音頻編碼/解碼的ffmpeg命令行工具捌省,其主要特點是速度快苫纤,輸出質量高和文件大小比較小。 FFmpeg中的“FF”表示 媒體播放器上的表示“快進”的控制按鈕纲缓,“mpeg”是Moving Pictures Experts Group的縮寫卷拘。 FFmpeg標志包含Z形圖案,這是圖片中以8x8塊圖示的熵編碼方案的特征祝高。
所有組件的編程語言是C語言恭金,源代碼可以在Linux/Unix、Windows褂策、Mac OS X等系統(tǒng)上編譯横腿。
本書是使用官方二進制版本在Microsoft Windows上創(chuàng)建的颓屑,但幾乎所有的指令和示例都應該在其他操作系統(tǒng)上無任何更改的情況下運行。 有關啟用的選項的詳細信息耿焊,請參閱詞匯表中的FFmpeg配置條目揪惦。
相關視頻資料分享【點擊免費報名,報名成功即可查看】
音視頻免費學習地址:FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發(fā)
C/C++罗侯,Linux器腋,F(xiàn)Fmpeg ?webRTC ?rtmp ?hls rtsp ffplay ?srs
FFmpeg開發(fā)者
該項目由Fabrice Bellard于2000年開始,F(xiàn)abrice Bellard是QEMU和Tiny C Compiler的創(chuàng)建者钩杰,也是一位出色的程序員纫塌。 現(xiàn)在該項目由FFmpeg團隊維護,開發(fā)人員來自許多國家讲弄,主要的開發(fā)人員可以參與合同工作:
參與FFmpeg開發(fā)
任何人都可以通過在網(wǎng)頁上加入特定的郵件列表來參與FFmpeg的開發(fā)和更新:
http://www.ffmpeg.org/contact.html
表中列出了可用的郵件列表:
FFmpeg郵件列表
FFmpeg 下載
主要下載來源位于如下網(wǎng)頁:
http://ffmpeg.org/download.html
Windows的用戶可以從如下網(wǎng)頁下載二進制文件(推薦使用靜態(tài)構建):
http://ffmpeg.zeranoe.com/builds
許多Linux發(fā)行版已經(jīng)安裝了FFmpeg工具措左,否則它們可以被編譯,這在OS X上也是可能的避除,或者OS X二進制文件可以從web頁面下載:
http://www.evermeet.cx/ffmpegorhttp://ffmpegmac.net
命令行語法
ffmpeg命令行工具的語法相對簡單怎披,重要的是在正確的位置鍵入所需的參數(shù),而不是在各種輸入和輸出之間混合選項瓶摆。ffmpeg命令的一般結構如下凉逛,需要注意的是全局選項影響所有輸入和輸出:
Windows命令提示符及其替代方法
Windows上的ffmpeg命令行工具是通過命令提示符來管理的,可以通過Windows ->所有程序->附件->命令提示群井。它也可以從一個快捷方式Win+R開始状飞,然后鍵入cmd,然后輸入书斜。
Windows命令提示符在關閉時不會保存所使用的命令的歷史昔瞧,因為有一些具有額外特性的免費應用程序,如文件管理菩佑、編輯自晰、宏、FTP客戶端等稍坯,建議選擇高級的FFmpeg工具程序酬荞。下一個表描述了幾種免費的替代方案。
分享一個音視頻高級開發(fā)交流群,需要學習資料的點擊788280672加入群自取,資料包括(C/C++瞧哟,Linux混巧,F(xiàn)Fmpeg ?webRTC ?rtmp ?hls rtsp ffplay ?srs 等等),免費分享勤揩。
Windows命令提示符選擇
接下來的行描述了最好的替代FAR管理器咧党,在Linux上它可以用一個類似的應用程序Midnight Commander替代,如果安裝了它陨亡,它將從控制臺的mc命令啟動傍衡。
FAR Manager是一個受歡迎的文件管理器深员、編輯器和FTP客戶端,它支持宏蛙埂、插件和其他高級特性倦畅。用戶界面是高度可定制的,并被翻譯成多種語言绣的。下一幅圖展示了它的命令歷史窗口叠赐,它在輸入新命令時顯示,因此用戶可以輕松地選擇之前使用的命令并最終編輯它屡江。
接下來的行描述了最好的替代FAR管理器芭概,在Linux上它可以用一個類似的應用程序Midnight Commander替代,如果安裝了它惩嘉,它將從控制臺的mc命令啟動罢洲。
FAR Manager是一個受歡迎的文件管理器、編輯器和FTP客戶端宏怔,它支持宏、插件和其他高級特性畴椰。用戶界面是高度可定制的臊诊,并被翻譯成多種語言。下一幅圖展示了它的命令歷史窗口斜脂,它在輸入新命令時顯示抓艳,因此用戶可以輕松地選擇之前使用的命令并最終編輯它。
對于其高級文件編輯器帚戳,在創(chuàng)建ffmpeg批處理時玷或,F(xiàn)AR Manager會很有用,這在批處理文件章節(jié)中有介紹片任。 還需要文件編輯器來將媒體文件包含在網(wǎng)頁中-“網(wǎng)絡視頻”章節(jié)的主題偏友。 界面的自定義開始于F9鍵并支持選擇選項選項卡。
路徑設置
將下載的FFmpeg命令行實用程序(ffmpeg.exe对供,ffplay.exe位他,ffprobe.exe)復制到環(huán)境變量Path部分中包含的目錄是可以實現(xiàn)的,因此可以從任何目錄調用它們而無需編寫他們完整的路徑产场。
或者鹅髓,您可以將FFmpeg程序復制到其他目錄,例如C:\ media京景,然后通過控制面板 - >系統(tǒng)和安全 - >系統(tǒng) - >高級系統(tǒng)設置將此文件夾添加到系統(tǒng)路徑窿冯。 請點擊環(huán)境變量按鈕,向下滾動系統(tǒng)變量的滾動條确徙,點擊路徑醒串,然后點擊編輯按鈕执桌。 在彈出的窗口中單擊編輯系統(tǒng)變量變量值字段,將光標移動到行尾厦凤,添加文本
;C:\media
點擊OK按鈕鼻吮。分號分隔特定的目錄,別復制较鼓。
對于命令提示符的當前會話椎木,可以使用命令設置路徑:
set path=%path%;C:\path_to_ffmpeg.exe
例如,如果文件ffmpeg.exe被復制到目錄C:\media博烂,命令是:
set path=%path%;C:\media
重命名為縮寫形式(懶人專區(qū))
命令名稱ffmpeg有6個字符香椎,如果每次用的話都輸入"ffmpeg"這六個字符就太麻煩了,想個簡單的辦法禽篱,建議將文件ffmpeg.exe重命名為f.exe(ffplay.exe至fp.exe等)或類似的簡寫形式以保存 時間并防止被誤認畜伐。 在命令提示符中,你可以使用以下命令:
ren ffmpeg.exe f.exe
為了清晰起見躺率,本書總是使用完整的命令形式ffmpeg玛界。
顯示輸出預覽
在各種視頻測試中,我們可以通過直接在屏幕上顯示命令輸出來節(jié)省大量時間悼吱,而不是將其保存到文件中慎框,也不是在媒體播放器中預覽。
FFplay媒體播放器預覽
使用簡化的命令后添,而不是使用ffmpeg工具生成一個新文件笨枯。
ffmpeg -i input_file ... test_options ... output_file
我們可以使用將顯示與ffmpeg完全相同的ffplay,使用該命令保存到文件中
ffplay -i input_file ... test_options
使用SDL輸出設備預覽遇西。
此預覽由表中描述的SDL(簡單的DirectMedia層)輸出設備生成:
輸出設備:SDL
描述設備的選擇
請注意馅精,SDL設備只能顯示具有yuv420p像素格式的輸出,并且使用其他輸入類型的選項-pix_fmt具有一個值yuv420p必須被預先處理粱檀,否則會顯示一個錯誤洲敢,例如:
可以在FFmpeg中使用的SI前綴
當指定數(shù)值各種ffmpeg選項如比特率或最大文件大小可以使用常見的SI后綴:K:千(103),M為百萬(106),G十億(10^ 9),等下一個示例指定一個新的比特率1.5 mbps的輸出文件,所有命令給相同的結果:
請注意,在FFmpeg文檔中茄蚯,SI前綴被稱為后綴沦疾,因為它們必須在數(shù)值之后立即輸入。
后綴B(字節(jié))可以在ffmpeg選項中使用數(shù)值第队,并將數(shù)值乘以8哮塞。它可以與其他前綴相結合,以表示千字節(jié)(KB)凳谦、兆字節(jié)(MB)等忆畅。例如,為輸出文件設置10兆字節(jié)的最大文件大小,可以使用下一個命令:
FFmpeg的代碼轉換
ffmpeg程序讀入內存中指定的任意數(shù)量的輸入的內容家凯,根據(jù)輸入的參數(shù)或程序的默認值對其進行處理缓醋,并將結果寫入任意數(shù)量的輸出。輸入和輸出可以是計算機文件绊诲、管道送粱、網(wǎng)絡流、抓取設備等掂之。
在代碼轉換過程中抗俄,ffmpeg在libavformat庫中調用demuxers來讀取輸入,并從數(shù)據(jù)包中獲取編碼數(shù)據(jù)世舰。如果有更多的輸入动雹,ffmpeg可以通過跟蹤任何活動輸入流的最低時間戳來保持它們的同步。然后解碼器從編碼的數(shù)據(jù)包中生成未壓縮的幀跟压,在可選的過濾后胰蝠,幀被發(fā)送到編碼器。編碼器產(chǎn)生新的編碼包震蒋,它被發(fā)送到muxer并寫入到輸出茸塞。
FFmpeg工具的重要部分是過濾器,它可以被組織成過濾鏈和filtergraphs查剖。Filtergraphs可以是簡單的或復雜的钾虐。在解碼源和編碼輸出之間實現(xiàn)濾波處理。轉碼過程在下一個圖中說明梗搅。
Filters, filterchains禾唁,filtergraphs
在多媒體處理中效览,術語過濾器是指在編碼到輸出之前修改輸入的軟件工具无切。過濾器分為音頻和視頻過濾器(請參閱詞匯表中的過濾器)。FFmpeg內置了許多多媒體過濾器丐枉,可以通過多種方式組合它們哆键。具有復雜語法的命令根據(jù)指定的參數(shù)從一個過濾器到另一個過濾器。這簡化了媒體處理瘦锹,因為有有損壓縮的媒體流的多譯碼和編碼會降低整體質量籍嘹。FFmpeg的過濾API(應用程序編程接口)是libavfilter軟件庫,它允許過濾器有多個輸入和輸出弯院。過濾器包括在輸入和輸出之間使用-vf選項的視頻過濾器和-af選項音頻過濾器辱士。例如,下一個命令生成一個測試模式順時針旋轉90°使用轉置過濾器(7中描述。章):
過濾器通常用于filterchains(逗號分隔的過濾器序列)和filtergraphs(分號分隔的filterchains序列)嘀略。如果使用了任何空格沦辙,那么filterchain必須用引號括起來棕洋。在filtergraphs中遂庄,可以使用表示所選filterchain輸出的鏈接標簽头岔,并可以在以下的filtergraphs中使用塔拳。例如,我們希望將輸入視頻與hqdn3d過濾器輸出的輸出進行比較峡竣。如果沒有filtergraphs靠抑,我們必須至少使用兩個命令,例如:
分割過濾器將輸入分為2個輸出標簽[a]和[b]适掰,然后將[a]鏈接用作第二個filterchain的輸入颂碧,它為標記[a]的比較創(chuàng)建了一個pad。[b]鏈接被用作第三個filterchain的輸入攻谁,它創(chuàng)建一個標記為[b]的輸出稚伍。最后一個filterchain使用[A]和[B]標簽作為覆蓋過濾器的輸入,從而產(chǎn)生最終的比較戚宦。另一個例子是在下一個圖中个曙。
選擇的媒體流
一些媒體容器如AVI、Matroska受楼、MP4等可以包含多種類型的流垦搬,F(xiàn)Fmpeg可以識別5種流類型:音頻(a)、附件(t)艳汽、數(shù)據(jù)(d)猴贰、字幕(s)和視頻(v)。
使用-map選項選擇流河狐,然后使用流說明符和語法:
File_number和stream_number也表示為file_index和stream_index米绕,從0開始計數(shù),這意味著第一個是0馋艺,第二個是1栅干,等等。
-map 0選擇所有類型的所有流捐祠。
-map i:v從文件中選擇所有的視頻流碱鳞,用i (index), -map i:a選擇所有的音頻流踱蛀,-map i:s選擇所有字幕流窿给,等等。
特殊選項- - -vn率拒, -sn分別排除所有音頻崩泡、視頻或字幕流。
如果輸入文件包含更多相同類型的流猬膨,而-map選項不被使用角撞,那么選擇的是每種類型的1個流。例如,如果文件包含2個視頻流靴寂,選擇的是具有較高分辨率的磷蜀,對于音頻選擇的流有更多的通道,等等百炬,細節(jié)如下圖所示:
除了特定的-map選項褐隆,流指定符還與許多其他選項一起使用:
流的形式說明符
Lavfi虛擬設備
在前面的部分中,我們使用了一個帶有l(wèi)avfi值的-f選項剖踊,其中l(wèi)avfi是在表中描述的libavfilter虛擬輸入設備的名稱:
顏色名稱
一些視頻過濾器和源有一個顏色參數(shù)庶弃,需要指定需要的顏色,并且有4種顏色規(guī)范的方法(默認值為黑色):
1.顏色被指定為W3C(萬維網(wǎng)聯(lián)盟)標準名稱德澈,以其十六進制值按字母順序排列的標準名稱的列表如下圖所示歇攻。請注意,這里有幾個同義詞:aqua = cyan, fuchsia = magenta和gray = grey梆造。
2.顏色被指定為十六進制數(shù)的形式0 xrrggbb @AA,RR紅色通道,GG是綠色通道和BB是藍色通道,例如0 x0000ff是藍色的,0 xffff00是黃色的,等等缴守。(@AA)是一個可選的alpha通道,指定有多少不透明的顏色,顏色在通道與一個@符號字符。Alpha通道值要么是從0x00到0xff的十六進制數(shù)字镇辉,要么是介于0.0和1.0之間的十進制數(shù)屡穗,其中0.0 (0x00)是完全透明的,1.0 (0xff)是完全不透明的忽肛。例如村砂,半透明度的綠色是0x00ff00@0.5。
3屹逛。和之前的方法一樣,但表示十六進制數(shù)字系統(tǒng)使用#符號而不是0 x前綴,一樣在HTML代碼中,例如# ff0000是紅色的,# ffffff是白色的,等等础废。請注意,#前綴不能使用alpha通道,這意味著# 0000 ff@0x34是好的,但沒有# 0000 ff@ # 34。
4.顏色是用一個特殊的值隨機指定的罕模,結果是由計算機產(chǎn)生的隨機顏色评腺。
原文地址:https://mp.csdn.net/mp_blog/creation/editor/123763273