opencv写视频无法指定编码格式

cfvmario 2014-06-05 10:01:26
win7 32位,opencv 2.4.8做视频处理
发现cvCreateVideoWriter的第二个参数必须填-1才可以,不能指定编码。做了这样一个测试:填-1,在对话框中选择x264,写视频正常。然后再用cvCreateFileCapture + cvGetCaptureProperty获取这个视频的FOURCC,得到的是H264。但是在cvCreateVideoWriter中指定CV_FOURCC('H','2','6','4')就不行,返回的是NULL。我确定那个H是大写的,而且试过462H也不行,感觉这很奇怪。我实际应用中是要先指定好的,弹对话框很不好啊。
PS:装了ffdshow,装之前更惨,即使填-1也不弹对话框而是悄无声息返回NULL,根本无法写视频了。但即使在装之前,读视频也是完全正常的,这我也不知道为什么,读和写需要的软件支持不一样?
...全文
440 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
一、问题的提出 做运动分析检测,需要有一定的素材视频,但是素材视频的编码OpenCV不能识别,无法指定视频做实验,怎么素材视频通用化使得OpenCV能正常识别? 二、解决的方法 (1)素材视频总是有配套的播放器来播放,那么使用这个播放器查看总帧数,和总播放时长,计算出帧率为25,表示一秒钟播放25帧图像。 (2)用这个配套的播放器对素材视频进行逐帧步进抓图,这个操作很辛苦,一秒钟25帧,那么抓25帧是一秒,素材视频30秒就要抓750帧,很辛苦。 (3)帧抓完后,发现一帧图1.4M,以位图格式保存,那么30秒就要达到1G的存储空间,怎么办?没办法,不知道怎么去获取解码器和安装解码器,就只能这么忍受。察看到逐帧步进抓图的存储是按序列编排文件名,那么要修改好使得每个文件名都是以规则“文件名”+“帧序列”的形式存在。 (4)编根据帧序列图生成帧率25的视频的代码 三、问题的解决: (1)解决一个字符串合并的问题: 由于字符串参数有个赋值格式化设置函数叫做Format,要实现多类型参数的字符串化,可以参照如下示例: float f = 0.0; char sz[128]; int n = 1; CString str; str.Format("%f%s%d",f,sz,n); (2)采用MJPG的编码格式依次将这些图像序列入到视频中保存起来,采用MJPG的编码格式是因为操作系统自带了Media player播放器,这种编码格式属于无压缩的,Media player可以识别播放。 (3)实现方式是使用MFC对话框窗体的按钮事件来进行视频的逐帧图,由于帧数多,那么在入器循环做这个动作的时候,整个程序是假死在那里直到入器的入操作终结。

4,447

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧