一、FFmpeg的基本組成
目前,ffmpeg有7大庫,分別為AVFormat, AVCodec, AVFilteer, AVDecoder, AVUtil,Swresample, Swscale,AVDevice七大庫組成。
1、AVFormat模組
它實現了對檔案的封裝(muxing)解封裝(demuxing),例如:MP4,flv,ts等檔案格式,RTMP(Real Time Messaging Protocol),TRSP(Real Time Streaming Protocol),MMS等網路協議封裝格式。在實際需求中,我們可以對avforamt增加自己的封裝處理模組,進行媒體封裝格式的擴充套件,增加自己定製的封裝格式。
2、AVCodec模組
它實現了大多數常用的編解碼格式,支援編碼(encoder),也支援解碼(decoder), 例如:MPEG4,AAC,MJPEG,H.264(第三方解碼器),H.265等解碼器,同樣,也支援h264對應的x264編碼器,h265支援的x265編碼器。同理,我們也可以對AVcodec進行擴充,增添我們自己的編解碼格式。
3、AVFilter模組
它提供了一個通用的音訊,視訊,字幕等濾鏡處理框架,它的一個使用樣例如下:
在這張圖中,首先,一個輸入檔案進行分割成為兩個流,一個儲存原樣([main]),另一個傳入[tmp],經過crop濾鏡和vflip濾鏡處理後,覆蓋在[main]流上,並輸出新的視訊。
例如:ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop = iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
這行命令的刨析:
a、“,”: 用於分割兩個相同的Filter線性鏈,在這裡就是crop和vflip
b、“;”: 用於分隔不同的Filter線性鏈
c、[main][flip] 表示這兩個流進行合併,後面overflay表示flip從x = 0, y = H/2這個地方開始覆蓋掉。
4、swscale和swresample模組
這兩個模組放在一起介紹:
scale:裁剪,是對視訊影像進行縮放和畫素格式轉換。例如:將影像從1080p->720p,將影像資料從yuv420P->YUYV,YUV->RGB。
YUV:Y代表亮度,UV代表色度。用於對視訊圖形進行壓縮。
swresample:重取樣,音訊需要進行取樣,它可以操作音訊取樣,音訊通道(channel)佈局轉換和調整。
5、命令分析:
例如;ffmpeg -i input.mp4 output.avi
a、-i: input(輸入),後面接一個輸入檔案。
第二個人蔘數就是輸出檔案,在這裡是output.avi
b、在這裡,這兩個檔案不是簡單的進行字尾名的更換,而是對它的封裝格式進行了轉換,轉換過程如下圖:
先讀取輸入流,讓後通過Demuxer(呼叫libavformat的API)對音訊包進行解封裝,通過Decoder(libavcodec)解包為YUV或PCM資料,然後通過Encoder(libavcodec)對資料進行編碼,再通過muxer(libavformat)進行封裝,最後成為輸出流。
二、ffplay和ffprobe
ffplay:它提供了音視訊的顯示播放功能
ffprobe:它是一個多媒體分析工具,可用查詢你要了解的媒體資訊,比如音訊的引數,視訊的引數,時長等。
例:ffprobe -show_streams 那些年,我們一起追的女孩.mp4
上面的語言是經過我自己的整理寫的,如果有錯誤,歡迎糾正!