一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

《FFmpeg Basics》中文版-01-FFmpeg基本介紹

 看見就非常 2021-02-01

寫在前面

如果您對音視頻技術(shù)感興趣,可以訂閱我的專題:音視頻專輯
也可以關(guān)注我的簡書賬戶: 張芳濤,我后期會(huì)發(fā)布更多的音視頻以及圖像處理方面的文章。

正文

為了最優(yōu)地使用各種FFmpeg組件,需要正確理解FFmpeg的基本屬性和特性。如果你基礎(chǔ)差了點(diǎn),看了不知道說的啥,您可以繼續(xù)下一章,并在遇到需要了解的內(nèi)容的時(shí)候再回來看。

FFmpeg介紹

FFmpeg是根據(jù)GNU通用公共許可證獲得許可的多媒體處理自由軟件項(xiàng)目的名稱。 該項(xiàng)目最受歡迎的部分是用于視頻和音頻編碼/解碼的ffmpeg命令行工具,其主要特點(diǎn)是速度快,輸出質(zhì)量高和文件大小比較小。 FFmpeg中的“FF”表示 媒體播放器上的表示“快進(jìn)”的控制按鈕,“mpeg”是Moving Pictures Experts Group的縮寫。 FFmpeg標(biāo)志包含Z形圖案,這是圖片中以8x8塊圖示的熵編碼方案的特征。

知道FFmpeg圖標(biāo)啥意思了吧

FFmpeg命令行工具

ffmpeg 快速音頻和視頻編碼器/解碼器
ffplay 媒體播放器
ffprobe 顯示媒體文件的特點(diǎn)
ffserver 使用HTTP和RTSP協(xié)議進(jìn)行多媒體流的廣播服務(wù)器

FFmpeg軟件庫

libavcodec 各種多媒體編解碼器的軟件庫
libavdevice 軟件庫的設(shè)備
libavfilter 軟件庫包含過濾器
libavformat 媒體格式的軟件庫
libavutil 包含各種實(shí)用程序的軟件庫
libpostproc 用于后期處理的軟件庫
libswresample 用于音頻重采樣的軟件庫
libswscale 用于媒體擴(kuò)展的軟件庫

所有組件的編程語言是C語言,源代碼可以在Linux/Unix、Windows、Mac OS X等系統(tǒng)上編譯。

本書是使用官方二進(jìn)制版本在Microsoft Windows上創(chuàng)建的,但幾乎所有的指令和示例都應(yīng)該在其他操作系統(tǒng)上無任何更改的情況下運(yùn)行。 有關(guān)啟用的選項(xiàng)的詳細(xì)信息,請參閱詞匯表中的FFmpeg配置條目。

FFmpeg開發(fā)者

該項(xiàng)目由Fabrice Bellard于2000年開始,F(xiàn)abrice Bellard是QEMU和Tiny C Compiler的創(chuàng)建者,也是一位出色的程序員。 現(xiàn)在該項(xiàng)目由FFmpeg團(tuán)隊(duì)維護(hù),開發(fā)人員來自許多國家,主要的開發(fā)人員可以參與合同工作:

姓名 地址 專長
Baptiste Coudurier 美國.洛杉磯 他在廣播codecs (ProRes, DNxHD, IMX/D-10, AVC-Intra),格式(MXF, GXF, MOV)和用法(Avid, FCP, Interlacing, Time Code, Metadata)中有專門的專業(yè)知識
Benjamin Larsson 斯德哥爾摩,瑞典 他的專業(yè)領(lǐng)域是音頻編解碼器
Diego Biurrun 德國亞琛 他在許可證法規(guī)遵循工程和構(gòu)建系統(tǒng)方面具有特殊的專長
Jason Garrett-Glaser 洛杉磯.美國 他是x264的主要開發(fā)人員,在H.264和其他現(xiàn)代有損視頻格式以及x86 SIMD裝配優(yōu)化方面具有特殊的專業(yè)知識
Luca Barbato 意大利都靈 他在流媒體協(xié)議方面有特殊專長
Michael Niedermayer 奧地利的維也納 他是視頻編碼和x86匯編領(lǐng)域的專家
Stefano Sabatini 卡利亞里.意大利 他在libavfilter, ff工具的使用和可用性問題上有特別的專長

參與FFmpeg開發(fā)

任何人都可以通過在網(wǎng)頁上加入特定的郵件列表來參與FFmpeg的開發(fā)和更新:
http://www./contact.html
表中列出了可用的郵件列表:
FFmpeg郵件列表

ffmpeg-user 對于常見的用戶問題,如編譯問題、命令行問題和類似的問題
ffserver-user 對于ffserver用戶的問題,比如配置和流媒體問題
libav-user 對于應(yīng)用程序開發(fā)人員有關(guān)使用FFmpeg庫開發(fā)的問題
ffmpeg-devel 對于FFmpeg本身的開發(fā),不是為了開發(fā)使用FFmpeg庫的軟件,也不是為了bug報(bào)告
ffmpeg-cvslog 對于FFmpeg源/主要git存儲(chǔ)庫的所有更改
ffmpeg-trac 對于FFmpeg Trac的所有修改

FFmpeg 下載

主要下載來源位于如下網(wǎng)頁:
http:///download.html
Windows的用戶可以從如下網(wǎng)頁下載二進(jìn)制文件(推薦使用靜態(tài)構(gòu)建):
http://ffmpeg./builds
許多Linux發(fā)行版已經(jīng)安裝了FFmpeg工具,否則它們可以被編譯,這在OS X上也是可能的,或者OS X二進(jìn)制文件可以從web頁面下載:
http://www./ffmpeg or http://

命令行語法

ffmpeg命令行工具的語法相對簡單,重要的是在正確的位置鍵入所需的參數(shù),而不是在各種輸入和輸出之間混合選項(xiàng)。ffmpeg命令的一般結(jié)構(gòu)如下,需要注意的是全局選項(xiàng)影響所有輸入和輸出:

ffmpeg [global options] [input file options] -i input_file [output file options] output_file
FFmpeg語法,大家能看懂不?看不懂的話看看Example,哪一部分是全局的設(shè)置選項(xiàng),哪一部分是第一個(gè)視頻的設(shè)置選項(xiàng),所有的結(jié)構(gòu)都是這種模式,看多了就可以了

Windows命令提示符及其替代方法

Windows上的ffmpeg命令行工具是通過命令提示符來管理的,可以通過Windows ->所有程序->附件->命令提示。它也可以從一個(gè)快捷方式Win+R開始,然后鍵入cmd,然后輸入。



Windows命令提示符在關(guān)閉時(shí)不會(huì)保存所使用的命令的歷史,因?yàn)橛幸恍┚哂蓄~外特性的免費(fèi)應(yīng)用程序,如文件管理、編輯、宏、FTP客戶端等,建議選擇高級的FFmpeg工具程序。下一個(gè)表描述了幾種免費(fèi)的替代方案。

Windows命令提示符選擇

名稱 下載 描述
FAR Manager farmanager.com - 文件管理器與shell,編輯器,ftp客戶端
- 命令行完成,快捷鍵,宏,插件
- 兩個(gè)窗口,可定制的界面
PyCmd sourceforge.net/projects/pycmd - 選項(xiàng)卡完成,持續(xù)的歷史……
Console sourceforge.net/projects/console - 多個(gè)標(biāo)簽,可配置
Gregs DOS Shell gammadyne.com/cmdline.htm#gs - 改進(jìn)編輯,命令歷史,支持Aero Glass等
TCC/LE jpsoft.com/all- downloads/downloads.html - 包括111個(gè)內(nèi)部命令,103個(gè)內(nèi)部變量,140個(gè)變量函數(shù)

接下來的行描述了最好的替代FAR管理器,在Linux上它可以用一個(gè)類似的應(yīng)用程序Midnight Commander替代,如果安裝了它,它將從控制臺(tái)的mc命令啟動(dòng)。

FAR Manager是一個(gè)受歡迎的文件管理器、編輯器和FTP客戶端,它支持宏、插件和其他高級特性。用戶界面是高度可定制的,并被翻譯成多種語言。下一幅圖展示了它的命令歷史窗口,它在輸入新命令時(shí)顯示,因此用戶可以輕松地選擇之前使用的命令并最終編輯它。


對于其高級文件編輯器,在創(chuàng)建ffmpeg批處理時(shí),F(xiàn)AR Manager會(huì)很有用,這在批處理文件章節(jié)中有介紹。 還需要文件編輯器來將媒體文件包含在網(wǎng)頁中-“網(wǎng)絡(luò)視頻”章節(jié)的主題。 界面的自定義開始于F9鍵并支持選擇選項(xiàng)選項(xiàng)卡。

路徑設(shè)置

將下載的FFmpeg命令行實(shí)用程序(ffmpeg.exe,ffplay.exe,ffprobe.exe)復(fù)制到環(huán)境變量Path部分中包含的目錄是可以實(shí)現(xiàn)的,因此可以從任何目錄調(diào)用它們而無需編寫他們完整的路徑。

或者,您可以將FFmpeg程序復(fù)制到其他目錄,例如C:\ media,然后通過控制面板 - >系統(tǒng)和安全 - >系統(tǒng) - >高級系統(tǒng)設(shè)置將此文件夾添加到系統(tǒng)路徑。 請點(diǎn)擊環(huán)境變量按鈕,向下滾動(dòng)系統(tǒng)變量的滾動(dòng)條,點(diǎn)擊路徑,然后點(diǎn)擊編輯按鈕。 在彈出的窗口中單擊編輯系統(tǒng)變量變量值字段,將光標(biāo)移動(dòng)到行尾,添加文本

;C:\media

點(diǎn)擊OK按鈕。分號分隔特定的目錄,別復(fù)制。



對于命令提示符的當(dāng)前會(huì)話,可以使用命令設(shè)置路徑:

set path=%path%;C:\path_to_ffmpeg.exe

例如,如果文件ffmpeg.exe被復(fù)制到目錄C:\media,命令是:

set path=%path%;C:\media

重命名為縮寫形式(懶人專區(qū))

命令名稱ffmpeg有6個(gè)字符,如果每次用的話都輸入"ffmpeg"這六個(gè)字符就太麻煩了,想個(gè)簡單的辦法,建議將文件ffmpeg.exe重命名為f.exe(ffplay.exe至fp.exe等)或類似的簡寫形式以保存 時(shí)間并防止被誤認(rèn)。 在命令提示符中,你可以使用以下命令:

ren ffmpeg.exe f.exe

為了清晰起見,本書總是使用完整的命令形式ffmpeg。

顯示輸出預(yù)覽

在各種視頻測試中,我們可以通過直接在屏幕上顯示命令輸出來節(jié)省大量時(shí)間,而不是將其保存到文件中,也不是在媒體播放器中預(yù)覽。

FFplay媒體播放器預(yù)覽

使用簡化的命令,而不是使用ffmpeg工具生成一個(gè)新文件。

ffmpeg -i input_file ... test_options ... output_file

我們可以使用將顯示與ffmpeg完全相同的ffplay,使用該命令保存到文件中

ffplay -i input_file ... test_options

使用SDL輸出設(shè)備預(yù)覽。

此預(yù)覽由表中描述的SDL(簡單的DirectMedia層)輸出設(shè)備生成:

輸出設(shè)備:SDL

描述 在SDL窗口中顯示視頻流,需要安裝libsdl庫
語法 [-icon_title i_title] [-window_size w_size] [-window_title w_title] -f sdl output

描述設(shè)備的選擇

icon_title 名稱為iconified SDL窗口,默認(rèn)值為window_title值
window_size SDL窗口大小,widthxheight或縮寫,默認(rèn)是輸入視頻的大小
window_title 窗口標(biāo)題,默認(rèn)為輸出設(shè)備指定的文件名

請注意,SDL設(shè)備只能顯示具有yuv420p像素格式的輸出,并且使用其他輸入類型的選項(xiàng)-pix_fmt具有一個(gè)值yuv420p必須被預(yù)先處理,否則會(huì)顯示一個(gè)錯(cuò)誤,例如:

ffmpeg -f lavfi -i rgbtestsrc -pix_fmt yuv420p -f sdl Example

可以在FFmpeg中使用的SI前綴

當(dāng)指定數(shù)值各種ffmpeg選項(xiàng)如比特率或最大文件大小可以使用常見的SI后綴:K:千(103),M為百萬(106),G十億(10^ 9),等下一個(gè)示例指定一個(gè)新的比特率1.5 mbps的輸出文件,所有命令給相同的結(jié)果:

ffmpeg -i input.avi -b:v 1500000 output.mp4
ffmpeg -i input.avi -b:v 1500K output.mp4
ffmpeg -i input.avi -b:v 1.5M output.mp4
ffmpeg -i input.avi -b:v 0.0015G output.mp4

請注意,在FFmpeg文檔中,SI前綴被稱為后綴,因?yàn)樗鼈儽仨氃跀?shù)值之后立即輸入。

后綴B(字節(jié))可以在ffmpeg選項(xiàng)中使用數(shù)值,并將數(shù)值乘以8。它可以與其他前綴相結(jié)合,以表示千字節(jié)(KB)、兆字節(jié)(MB)等。例如,為輸出文件設(shè)置10兆字節(jié)的最大文件大小,可以使用下一個(gè)命令:

  ffmpeg -i input.mpg -fs 10MB output.mp4
這種嵌套的表格類型好像在簡書上做不出來

FFmpeg的代碼轉(zhuǎn)換

ffmpeg程序讀入內(nèi)存中指定的任意數(shù)量的輸入的內(nèi)容,根據(jù)輸入的參數(shù)或程序的默認(rèn)值對其進(jìn)行處理,并將結(jié)果寫入任意數(shù)量的輸出。輸入和輸出可以是計(jì)算機(jī)文件、管道、網(wǎng)絡(luò)流、抓取設(shè)備等。

在代碼轉(zhuǎn)換過程中,ffmpeg在libavformat庫中調(diào)用demuxers來讀取輸入,并從數(shù)據(jù)包中獲取編碼數(shù)據(jù)。如果有更多的輸入,ffmpeg可以通過跟蹤任何活動(dòng)輸入流的最低時(shí)間戳來保持它們的同步。然后解碼器從編碼的數(shù)據(jù)包中生成未壓縮的幀,在可選的過濾后,幀被發(fā)送到編碼器。編碼器產(chǎn)生新的編碼包,它被發(fā)送到muxer并寫入到輸出。

FFmpeg工具的重要部分是過濾器,它可以被組織成過濾鏈和filtergraphs。Filtergraphs可以是簡單的或復(fù)雜的。在解碼源和編碼輸出之間實(shí)現(xiàn)濾波處理。轉(zhuǎn)碼過程在下一個(gè)圖中說明。


FFmpeg的代碼轉(zhuǎn)換

Filters, filterchains,filtergraphs

在多媒體處理中,術(shù)語過濾器是指在編碼到輸出之前修改輸入的軟件工具。過濾器分為音頻和視頻過濾器(請參閱詞匯表中的過濾器)。FFmpeg內(nèi)置了許多多媒體過濾器,可以通過多種方式組合它們。具有復(fù)雜語法的命令根據(jù)指定的參數(shù)從一個(gè)過濾器到另一個(gè)過濾器。這簡化了媒體處理,因?yàn)橛杏袚p壓縮的媒體流的多譯碼和編碼會(huì)降低整體質(zhì)量。FFmpeg的過濾API(應(yīng)用程序編程接口)是libavfilter軟件庫,它允許過濾器有多個(gè)輸入和輸出。過濾器包括在輸入和輸出之間使用-vf選項(xiàng)的視頻過濾器和-af選項(xiàng)音頻過濾器。例如,下一個(gè)命令生成一個(gè)測試模式順時(shí)針旋轉(zhuǎn)90°使用轉(zhuǎn)置過濾器(7中描述。章):

 ffplay -f lavfi -i testsrc -vf transpose=1

下一個(gè)示例使用atempo音頻過濾器將輸入音頻的速度降低到80%:

ffmpeg -i input.mp3 -af atempo=0.8 output.mp3

過濾器通常用于filterchains(逗號分隔的過濾器序列)和filtergraphs(分號分隔的filterchains序列)。如果使用了任何空格,那么filterchain必須用引號括起來。在filtergraphs中,可以使用表示所選filterchain輸出的鏈接標(biāo)簽,并可以在以下的filtergraphs中使用。例如,我們希望將輸入視頻與hqdn3d過濾器輸出的輸出進(jìn)行比較。如果沒有filtergraphs,我們必須至少使用兩個(gè)命令,例如:

ffmpeg -i input.mpg -vf hqdn3d,pad=2*iw output.mp4
ffmpeg -i output.mp4 -i input.mpg -filter_complex overlay=w compare.mp4

使用帶有鏈接標(biāo)簽的filtergraph,就只有一個(gè)命令:

ffplay -i i.mpg -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w

分割過濾器將輸入分為2個(gè)輸出標(biāo)簽[a]和[b],然后將[a]鏈接用作第二個(gè)filterchain的輸入,它為標(biāo)記[a]的比較創(chuàng)建了一個(gè)pad。[b]鏈接被用作第三個(gè)filterchain的輸入,它創(chuàng)建一個(gè)標(biāo)記為[b]的輸出。最后一個(gè)filterchain使用[A]和[B]標(biāo)簽作為覆蓋過濾器的輸入,從而產(chǎn)生最終的比較。另一個(gè)例子是在下一個(gè)圖中。


選擇的媒體流

一些媒體容器如AVI、Matroska、MP4等可以包含多種類型的流,F(xiàn)Fmpeg可以識別5種流類型:音頻(a)、附件(t)、數(shù)據(jù)(d)、字幕(s)和視頻(v)。

使用-map選項(xiàng)選擇流,然后使用流說明符和語法:

file_number:stream_type[:stream_number]

File_number和stream_number也表示為file_index和stream_index,從0開始計(jì)數(shù),這意味著第一個(gè)是0,第二個(gè)是1,等等。

  • -map 0選擇所有類型的所有流。
  • -map i:v從文件中選擇所有的視頻流,用i (index), -map i:a選擇所有的音頻流,-map i:s選擇所有字幕流,等等。
  • 特殊選項(xiàng)- - -vn, -sn分別排除所有音頻、視頻或字幕流。

如果輸入文件包含更多相同類型的流,而-map選項(xiàng)不被使用,那么選擇的是每種類型的1個(gè)流。例如,如果文件包含2個(gè)視頻流,選擇的是具有較高分辨率的,對于音頻選擇的流有更多的通道,等等,細(xì)節(jié)如下圖所示:



除了特定的-map選項(xiàng),流指定符還與許多其他選項(xiàng)一起使用:

流的形式說明符

說明符形式 描述
stream_index 選擇該索引的流(編號)
stream_type[:stream_index] stream_type為字母a(音頻)、d(數(shù)據(jù))、s(字幕)、t(附件)或v(視頻);如果添加了stream_index,它將選擇該類型的流并使用給定的索引,否則它將選擇該類型的所有流
p:program_id[:stream_index] 如果添加了stream_index,那么使用給定的program_id在程序中選擇帶有stream_index的流,否則將選擇該程序中的所有流
stream_id 按格式指定的ID選擇流

例如,為了設(shè)置音頻和視頻的使用-b選項(xiàng)的比特率,我們可以使用以下命令:

ffmpeg -i input.mpg -b:a 128k -b:v 1500k output.mp4

Lavfi虛擬設(shè)備

在前面的部分中,我們使用了一個(gè)帶有l(wèi)avfi值的-f選項(xiàng),其中l(wèi)avfi是在表中描述的libavfilter虛擬輸入設(shè)備的名稱:


輸入設(shè)備:lavfi
描述 從filtergraph的打開的輸出pad中處理數(shù)據(jù),對于每個(gè)輸出墊創(chuàng)建一個(gè)對應(yīng)的流,映射到編碼。filtergraph由一個(gè)-graph選項(xiàng)指定,目前只支持視頻輸出墊
語法 -f lavfi [-graph[ -graph_file]]

lavfi選項(xiàng)的描述
-graph 作為輸入的filtergraph,每個(gè)視頻的開放輸出必須用一個(gè)“outN”形式的唯一字符串標(biāo)記,其中N是一個(gè)數(shù)字,從0開始,對應(yīng)于設(shè)備生成的映射的輸入流。第一個(gè)未標(biāo)記的輸出將自動(dòng)分配給“out0”標(biāo)簽,但是其他所有的輸出都需要顯式指定。如果沒有指定,則默認(rèn)為輸入設(shè)備指定的文件名
-graph_file filtergraph的文件名被讀取并發(fā)送到其他過濾器,filtergraph的語法與選項(xiàng)-graph指定的語法相同

Lavfi通常用于顯示測試模式,例如帶有命令的SMPTE條:

ffplay -f lavfi -i smptebars

其他經(jīng)常使用的源是可以用命令顯示的顏色源:

ffplay -f lavfi -i color=c=blue

顏色名稱

一些視頻過濾器和源有一個(gè)顏色參數(shù),需要指定需要的顏色,并且有4種顏色規(guī)范的方法(默認(rèn)值為黑色):

  • 1.顏色被指定為W3C(萬維網(wǎng)聯(lián)盟)標(biāo)準(zhǔn)名稱,以其十六進(jìn)制值按字母順序排列的標(biāo)準(zhǔn)名稱的列表如下圖所示。請注意,這里有幾個(gè)同義詞:aqua = cyan, fuchsia = magenta和gray = grey。

  • 2.顏色被指定為十六進(jìn)制數(shù)的形式0 xrrggbb @AA,RR紅色通道,GG是綠色通道和BB是藍(lán)色通道,例如0 x0000ff是藍(lán)色的,0 xffff00是黃色的,等等。(@AA)是一個(gè)可選的alpha通道,指定有多少不透明的顏色,顏色在通道與一個(gè)@符號字符。Alpha通道值要么是從0x00到0xff的十六進(jìn)制數(shù)字,要么是介于0.0和1.0之間的十進(jìn)制數(shù),其中0.0 (0x00)是完全透明的,1.0 (0xff)是完全不透明的。例如,半透明度的綠色是0x00ff00@0.5。

  • 3。和之前的方法一樣,但表示十六進(jìn)制數(shù)字系統(tǒng)使用#符號而不是0 x前綴,一樣在HTML代碼中,例如# ff0000是紅色的,# ffffff是白色的,等等。請注意,#前綴不能使用alpha通道,這意味著# 0000 ff@0x34是好的,但沒有# 0000 ff@ # 34。

  • 4.顏色是用一個(gè)特殊的值隨機(jī)指定的,結(jié)果是由計(jì)算機(jī)產(chǎn)生的隨機(jī)顏色。


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    富婆又大又白又丰满又紧又硬| 色哟哟国产精品免费视频| 夜夜躁狠狠躁日日躁视频黑人| 午夜福利直播在线视频| 日本加勒比在线观看一区| 在线观看免费视频你懂的| 精品al亚洲麻豆一区| 日韩人妻欧美一区二区久久| 日韩精品成区中文字幕| 五月婷婷六月丁香亚洲| 日本免费熟女一区二区三区| 日本一本在线免费福利| 久久精品视频就在久久| 欧美一区二区不卡专区| 免费在线成人激情视频| 激情国产白嫩美女在线观看| 国产又色又粗又黄又爽| 日韩中文字幕在线不卡一区| 国产免费无遮挡精品视频| 亚洲男人天堂网在线视频| 日韩性生活视频免费在线观看 | 国产成人精品一区在线观看 | 99久久精品国产日本| 亚洲永久一区二区三区在线| 亚洲一区二区亚洲日本| 国产精品推荐在线一区| 麻豆在线观看一区二区| 国产精品内射婷婷一级二级| 精品熟女少妇av免费久久野外| 中文字幕乱子论一区二区三区| 久久99一本色道亚洲精品| 亚洲一区二区三区一区| 精品一区二区三区人妻视频| 亚洲欧美国产中文色妇| 日韩在线精品视频观看| 中文文精品字幕一区二区| 久久国产精品亚州精品毛片| 亚洲成人黄色一级大片| 日本人妻熟女一区二区三区 | 欧美日韩精品一区免费| 国产精品白丝久久av|