opencv支持多種流行視頻格式文件的讀取


    寫入應該是只支持avi,因為其他格式一般都是壓縮格式,壓縮格式一般都有幀間壓縮,也就是不能只寫一幀,可以保存為avi后,轉碼.

    以AVI結尾的視頻文件有以下幾種:

1非壓縮格式的AVI文件(或是MPEG1格式的),這個不需要裝任何插件就可以播放了。

2DIVX格式的AVI,這也是MPEG4的一種,安裝最新的DIVX 5.21(目前最新版),就可以播放了,不過缺點是在播放之初會有一個DIVX的標記顯示幾秒。

下載地址: http://gupin.fangdown.com/soft/138.htm

3XVID格式的AVI,這也是MPEG4的一種,可以說是從DIVX變種而來的,據說是XVID原作者不滿意DIVX商業化收費的行為,而開發的一個全FreeMPEG4編碼核心,安裝最新的XVID1.02版)就可以播放。

下載地址: http://gupin.fangdown.com/soft/45.htm

4ffdshow MPEG-4格式的AVI,現在越來越多的AVI都采用ffdshow MPEG-4來,集成了DIVXXVID的一種東西(好象還支持WMVAC3音頻),因此如果你裝了ffdshow MPEG-4,就可以不用裝XVIDDIVX編碼核心了。另外ffdshow MPEG-4也提供豐富的濾鏡功能比如增亮,增加銳度等,最新的ffdshow MPEG-4 Video Decoder 20041012

下載地址:http://gupin.fangdown.com/soft/383.htm

5WMV9格式的AVI微軟自己推出的MPEG4編碼標准,使用Windows Media 9.0就可以播放,如果沒有的話,也可以下載一個Windows Media Encoder 9.0,使你的系統支持WMV 9.0的格式。

下載地址:http://www.ogg.cn/Software/view-software-62.html

6VP6格式的AVI,也是一種MPEG4的編碼格式,On2 Technologies開發的編碼器,VP6號稱在同等碼率下,視頻質量超過了Windows Media 9Real 9H.264VP6視頻編碼器目前被中國的EVD所采用。說真的,現在用這個不多。最新版本是VP6 vfw Codec 6.2.6.0

下載地址:http://www.ogg.cn/Software/view-software-56.html

7其它格式的AVI,現在看來還有一些如MKVOGG等格式的視頻編碼文件也會使用AVI的結尾名。

其實AVI只是一個外殼。里面的東西可不一樣的!

問題:為什么我的電腦支持AVI或者能夠播出AVI,但為什么使用cvCreateFileCapture函數總返回NULL呢?

答案:盡管是AVI文件,但也可能使用了某種codec,例如:MJPEG Decompressor。需要把它轉換OpenCV

 

支持的AVI文件. OpenCV支持的AVI如下:

 

Container

 

FourCC

 

Name

 

Description

 

AVI

 

'DIB '

 

RGB(A)

 

Uncompressed RGB, 24 or 32 bit

 

AVI

 

'I420'

 

RAW I420

 

Uncompressed YUV, 4:2:0 chroma subsampled

 

AVI

 

'IYUV'

 

RAW I420

 

identical to I420

 

轉換格式解決方法:

 

解決方法1:下載mencoder.exe, 在window命令行下使用:

 

mencoder in.avi -ovc raw -vf format=i420 -o out.avi

 

(注:我測試了這個方法,沒有成功,原因不詳,希望有朋友們能夠詳細討論一下。)

 

解決方法2:下載VitualDub, 我使用1.9.4版本

 

a. File->Open Video File;

 

b. Video->Filters->Add->Convert format; 選擇4:2:0 Planar YCbCr (YV12)或者 32-Bit RGB

 

c. Save as AVI. 保存完畢。

 

(注:成功使用。)

 

 

 

 

(1)cvCreateVideoWriter 

創建視頻文件寫入器 

 

typedef struct CvVideoWriter CvVideoWriter;

CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, double fps, CvSize frame_size, 

int is_color=1 );

filename 

輸出視頻文件名。 

fourcc 

四個字符用來表示壓縮幀的codec 例如,CV_FOURCC('P','I','M','1')MPEG-1 codec, CV_FOURCC

('M','J','P','G')motion-jpeg codec等。 在Win32下,如果傳入參數-1,可以從一個對話框中選擇壓縮方

法和壓縮參數。 其它的編碼器代號包括:

 

 CV_FOURCC('P','I','M','1') = MPEG-1

 

codec CV_FOURCC('M','J','P','G') = motion-jpeg 

 

codec (does not work well) CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 

codec CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3

常見的有1.02.03.0三種版本,當然是基於MPEG-4技術的,其中3.0並不能用於AVI的編碼,只能用於生成支持視頻流技術的ASF文件

codec CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 

 

codec CV_FOURCC('U', '2', '6', '3') = H263 

H.263適用於局域網,不過一般機器上這種Codec是用來播放的,不能用於編碼。H.263的編碼速度快,其設計編碼延時不超過150ms;碼率低,在512 K 乃至 384K 帶寬下仍可得到相當滿意的圖像效果,十分適用於需要雙向編解碼並傳輸的場合(如:可視電話)和網絡條件不是很好的場合(如:遠程監控)。

codec CV_FOURCC('I', '2', '6', '3') = H263I 

 

codec CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec 

FLV 是FLASH VIDEO的簡稱,FLV流媒體格式是一種新的視頻格式。由於它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成為可能,它的出現有效地解決了視頻文件導入Flash后,使導出的SWF文件體積龐大,不能在網絡上很好的使用等缺點。

 

若編碼器代號為 -1,則運行時會彈出一個編碼器選擇框

fps 

被創建視頻流的幀率。 

frame_size 

視頻流的大小。 

is_color 

如果非零,編碼器將希望得到彩色幀並進行編碼;否則,是灰度幀(只有在Windows下支持這個標志)。 

函數cvCreateVideoWriter創建視頻寫入器結構。 

 

 

(2) AVIBMP

讀入avi,提取每一幀,存成BMP
CvCapture* capture = cvCreateFileCapture("filename.avi");
int i;
CString str;
IplImage* frame;
for (i=0;i<30;i++)
{
frame = cvQueryFrame(capture);
str.Format("%d.bmp",i);
cvSaveImage(str,frame);
}
cvReleaseCapture(&capture);

BMPAVI :依次讀入BMP,寫入avi

 

MPEG1

是目前實時視頻壓縮的主流,可適用於不同帶寬的設備,如CD-ROMVideo-CDCD-IM-JPEG技術相比較,在實時壓縮、每幀數據量、處理速度上均有顯著的提高。MPEG1可以滿足多達16路以上25/秒的壓縮速度,在500kbit/s的壓縮碼流和352像素×288行的清晰度下,每幀大小僅為2k。若從VCD到超級VCDDVD的不同格式來看,MPEG1352 ×288格式,MPEG2可有576×352704 ×576等,用於CDROM上存儲同步和彩色運動標視頻信號,旨在達到VCR(模擬式磁帶錄放機Video Cassette RecorderVCR)質量,其視頻壓縮率261MPEG1可使圖像在空間軸上最多壓縮1/38,在時間軸上對相對變化較小的數據最多壓縮1/5MPEG1壓縮后的數據傳輸率為1.5Mbps,壓縮后的源輸入格式SIFSource Input Format),分辨率為352像素×288行(PAL制),亮度信號的分辨率為360×240,色度信號的分辨率為180×120,每秒30幀。MPEG1對色差分量采用411的二次采樣率MPEG1MPEG2是傳送一張張不同動作的局部畫面。在實現方式上,MPEG1可以借助於現有的解碼芯片來完成,而不像M-JPEG那樣過多依賴於主機的CPU。與軟件壓縮相比,硬件壓縮可以節省計算機資源,降低系統成本。

 

M-JPEG

MPEG壓縮是根據運動圖像相鄰幀之間有一定的相似性原則,通過運動預測,參考前一幀圖像與這一幀圖像的相似情況,去掉與前一幀相似的冗余數據,而只記錄這一幀與上一幀不同的數據,從而大大提高了視頻數據的壓縮效率,這種壓縮方法也稱為幀相關壓縮。 MPEG壓縮是以圖像組(GOP)為一個單元的,由I幀B、P幀構成。一般情況下一個圖像組(GOP)由15幀組成,第一幀為一個I幀,依次為1個P幀,2個B幀,由此構成I PBB PBB PBB……結構。I幀稱為參考幀,所謂參考幀是其它幀都參考的起始幀,所以I幀是一個能夠完全記載這一幀全部圖像數據的幀。亦稱作全幀。P幀是前向預測幀,是根據與前一幀圖像的比較,去掉與前幀相似的數據而構成的幀。B幀是雙向預測幀,是根據與前后一幀圖像的比較而得到的幀。P、B幀是一個不完全幀,它需要依靠I幀而成立。可見MPEG有二大特點:

· 第一、 因為采用運動預 測幀壓縮方式,針對視頻壓縮有很好的效果,在獲得廣播級數字視頻質量的前提下,可以實現20:1的壓縮效率,數據率可降至1M Byte/s(8M bit/s),一小時視頻節目占用3.6GB空間。數據存儲空間利用率高,網絡傳輸效率是M-JPEG系統的5倍以上。 

· 第二、 由於MPEG-II格式只有I幀是一個完整的幀。所以在電視需要幀精確 地進行剪接時會帶來一的困難

 


免責聲明!

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



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