opencv支持多种流行视频格式文件的读取

来源:互联网 发布:如何减腓肠肌 知乎 编辑:程序博客网 时间:2024/05/01 19:35

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 乃至 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帧是一个完整的帧。所以在电视需要帧精确 地进行剪接时会带来一的困难

0 2
原创粉丝点击