ffmpeg-入門介紹(筆記)


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

 

 然后,這一章的后面還講了FFmpeg支持的封裝和解封裝格式,編碼器與解碼器支持,通信協議支持,這些知識后面遇到再去查。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM