ffmepg介绍
ffmepg介紹
ffmpeg是一個(gè)開放原碼的自由軟件,可以運(yùn)行音頻和視頻多種格式的錄影、轉(zhuǎn)換、流功能。
具體地,ffmpeg包括一組應(yīng)用程序和函數(shù)庫。
命令行應(yīng)用程序
- ffmpeg:用于對(duì)視頻文檔或音頻檔案轉(zhuǎn)換格式
- ffplay:一個(gè)簡單的播放器,基于SDL與FFmpeg庫
- ffprobe:用于顯示媒體文件的信息
函數(shù)庫 - libswresample
- libavresample
- libavcodec:包含全部FFmpeg音頻/視頻編解碼庫
- libavformat:包含demuxers和muxer庫
- libavutil:包含一些工具庫
- libpostproc:對(duì)于視頻做前處理的庫
- libswscale:對(duì)于影像作縮放的庫
- libavfilter
基本語法
這里介紹ffmpeg應(yīng)用程序的使用語法
ffmpeg [global_options] {[input_file_options] -i input_url} … {[output_file_options] output_url} …
ffmepg的輸入文件可以是多個(gè)(比如將視頻和音頻文件合成為一個(gè)帶有聲音的視頻),輸出文件也可以是多個(gè)(比如從視頻中截取多幀圖片)。輸入文件地址用命令-i接地址指定,沒有命令指定的地址是輸出文件地址。
ffmpeg對(duì)選項(xiàng)的順序敏感,選項(xiàng)作用于下一個(gè)指定的文件。所以,在一個(gè)命令中,可以出現(xiàn)多次相同的選項(xiàng)。例外是全局選項(xiàng)(global_options)必須在最前面指定。
例如,下面的命令包含兩個(gè)-r,令輸入文件的fps為1,輸出文件的fps為24。
ffmpeg -r 1 -i input.m2v -r 24 output.avi
處理流程
ffmepg的處理流程可以用下圖描述:
這里首先說明一下多媒體數(shù)據(jù)的封裝格式和編碼格式。編碼是對(duì)數(shù)據(jù)的壓縮算法,常見的編碼格式有:h264、h265、mpeg、wmv、aac 等。封裝格式也稱為容器格式,作為編碼格式的載體,將至少一個(gè)編碼格式的數(shù)據(jù)按照特定格式組織起來,并提供一些輔助功能。一個(gè)視頻文件格式可以看成一個(gè)容器,這個(gè)容器包含了如音頻軌道、視頻軌道和其他一些元數(shù)據(jù)。常見的封裝格式有mp4、mkv、avi等。
上圖中demuxer是解封裝器,muxer是封裝器,decoder是解碼器,encoder是編碼器。ffmpeg首先讀取輸入源,然后通過demuxer將音視頻包進(jìn)行解封裝,這個(gè)動(dòng)作通過調(diào)用libavformat中的接口即可實(shí)現(xiàn);接著通過decoder進(jìn)行解碼,將音視頻通過decoder解包為YUV或者PCM這樣的數(shù)據(jù),decoder通過libavcodec中的接口即可實(shí)現(xiàn);然后通過encoder將對(duì)應(yīng)的數(shù)據(jù)進(jìn)行編碼,編碼可以通過libavcodec中的接口實(shí)現(xiàn);接下來將編碼后的音視頻數(shù)據(jù)包通過muxer進(jìn)行封裝,muxer封裝通過libavformat中的接口即可實(shí)現(xiàn),輸出成為輸出流。
過濾器filter
對(duì)于解碼得到的原始數(shù)據(jù),ffmpeg可以對(duì)其進(jìn)行操作,并將這些操作稱之為過濾。ffmpeg通過libavfilter中的接口進(jìn)行過濾。
過濾分為兩種,簡單過濾和復(fù)雜過濾。
簡單過濾如下圖只有一個(gè)輸入輸出,可以用線性的過程來表示。
復(fù)雜過濾如下圖,不能用一個(gè)線性的過程來表示。
例子
提取帶音頻的視頻文件中的視頻流,屏蔽音頻
ffmpeg -i input.mp4 -an output.mp4
提取帶音頻的視頻文件中的音頻,屏蔽視頻
ffmpeg -i input.mp4 -vn output.aac
參考資料
ffmpeg官方文檔
wiki百科ffmpeg
https://zhuanlan.zhihu.com/p/37516093
總結(jié)
- 上一篇: 分子结构的子结构查询:SMARTS语言
- 下一篇: Word中如何自动按照章节给图片编号?