您的位置:首页 > 运维架构

opencv VideoWriter保存视频失败原因

2014-11-11 09:42 681 查看
opencv 中,VideoWriter类 如果不能成功打开(也就是说 .isOpened()返回为false), 通常有两类主要原因。

1. 封装支持

           保存文件名需要写明保存文件的封装格式,后缀为 .avi 可以成功打开编码器,本人试用过 .mp4, 未能打开。

2.编码格式支持

          VideoWriter构造函数的第二个参数是一个代表编码格式的整数,它是通过指名编码格式的名称来转换的。例如

          如果你不能正常保存视频,也有可能是你的系统没有对应的编码库。 指的是MJPEG 编码格式,那么需要你的系统里支持MJPEG编码(光支持解码是不够的)。本人的系统里面安装了ffmpeg(本人其他博文有ffmpeg 的安装方法), 在我编译opencv库时已经配置了这一选项。因此ffmpeg支持的编解码库,我的opencv 也是支持的。

          ffmpeg -codecs  查询ffmpeg支持的编解码形式

         例如: 查询是否支持264编码

ffmpeg -codecs | grep 264
ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers
built on Nov 10 2014 20:48:19 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration:
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.102 /  2.  5.102
libswresample   0. 18.100 /  0. 18.100
D.V.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
最后一行告诉了我  H264只支持啦decoder,  没有encoder ,因此我的opencv 是不能支持264编码的。

如果我使用 CV_FOURCC('A','V','C', '1')参数,那么打开VideoWriter时会提示我无法打开,提示我安装libx264(一个开源的H264编解码库)

但是我使用 CV_FOURCC('D', 'I','V','X') CV_FOURCC(‘M’, 'J', ‘P’, 'G') 都可以正常打开

正常使用案例:

    const char* fileName = "/home/sean/Projects/office_video_3.avi";
    videoWriter = VideoWriter(fileName, CV_FOURCC('D', 'I','V','X'), 30, sizeTemp, true);

   if(!videoWriter.isOpened())
    {
 	cout<< "Error : fail to open video writer\n"<<endl;
return -1;
    }


为了采集测试样本,昨晚自己在PC上搭了一个简单的DVR(结合了运动检测,因此录了13小时,只用来 500M磁盘空间),晚上11点下班时将它打开,第二天来到办公室,采集到了各位同仁上班的风采。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: