ffmpeg-入門介紹(筆記)

jianzhui發表於2021-06-27

一、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

 

 上面的語言是經過我自己的整理寫的,如果有錯誤,歡迎糾正!

 

相關文章