zoukankan      html  css  js  c++  java
  • 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帧是一个完整的帧。所以在电视需要帧精确 地进行剪接时会带来一的困难

     

  • 相关阅读:
    大数据分析防御威胁,中小企业安全的选择
    计算机鼻祖-Donald Knuth(高纳德) 的传奇
    [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标
    谁说技术男没有人文情怀:当旅途遇到生命赞歌
    控制器之间传值,逆传
    #include &lt;sys/socket.h&gt;找不到头文件
    怎样得到QML package的具体API接口
    Java面向对象编程(一)
    STL algorihtm算法iter_swap(29)
    jquery分页插件
  • 原文地址:https://www.cnblogs.com/Akagi201/p/2430772.html
Copyright © 2011-2022 走看看