天天看點

FFmpeg 讀取視訊流并儲存為BMP簡介示例

FFmpeg 讀取視訊流并儲存為BMP

在示範如何讀取視訊檔案之前,應先了解幾個關于視訊流的概念:

容器(Container): 視訊檔案本身就叫容器,容器的類型(比如AVI、MP4)決定了視訊資訊如何存儲。

流(Stream):每個容器可以包含若幹個流。比如一個視訊檔案通常包含了一個視訊流和一個音頻流。

幀(Frame):幀是流中資料的最小機關。每個流裡面包含若幹幀。

編解碼器(CODEC):流中的資料都是以編碼器編碼而成的,而不是直接存儲原始資料。在處理每一幀時,需要用CODEC來解碼才能得到原始資料。

包(Packet):FFmpeg用包來描述從流中讀到的資料,在實際處理時,将從流中不斷讀取資料到包,直到包中包含了一個整幀的内容再進行處理。

FFmpeg讀取視訊流的一般流程為:

打開視訊(音頻)檔案。

從流中讀取資料到包。

如果包不是一個整幀,則執行2。如果包是一個整幀,則:

處理幀。

繼續執行2,直到整個流處理完畢。

代碼級别的一般流程為:

注冊所有的格式和解碼器打開視訊檔案讀取視訊流資訊并找到視訊流找到并打開與流對應的編解碼器建立并初始化解碼後的幀從流中讀取幀資料到包包是一個整幀處理幀yesno

下面的程式讀取一個視訊流,将第一幀資料轉儲為BITMAP。(視訊檔案的路徑由程式的啟動參數擷取。)

繼續閱讀