Opencv-VideoWriter

参考资料:
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html?highlight=videowriter
http://blog.csdn.net/ubuntulover/article/details/6219056
https://github.com/opencv/opencv/tree/master/3rdparty/ffmpeg
https://www.zhihu.com/question/20997688

在使用opencv时,一个比较有趣的操作是使用opencv打开一个摄像机录像,然后将录像结果保存到本次。

代码

根据opencv-python给出的demo,代码如下:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

//定义视频编码器
//这里有必要提一下fourcc
//FourCC全称Four-Character Codes,代表四字符代码 (four character code), 它是一个32位的标示符,其实就是typedef unsigned int FOURCC;是一种独立标示视频数据流格式的四字符代码。
//因此cv2.VideoWriter_fourcc()函数的作用是输入四个字符代码即可得到对应的视频编码器。
fourcc = cv2.VideoWriter_fourcc(*'XVID')//使用XVID编码器
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))//出分别是:保存文件名、编码器、帧率、视频宽高

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:

        # 保存录像结果
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 释放内存
cap.release()
out.release()
cv2.destroyAllWindows()

问题

不幸的是,大多数情况下上述代码并不能正常工作。尽管非常仔细的检查代码,我们也并不能找出任何问题。那么程序不能正常工作的原因究竟是什么的?

为了解释这个问题,首先需要对视频文件格式、视频封装格式和视频编码器等等有一个基础的了解。
参考知乎答案的答案,可以发现:
视频文件格式,即视频文件的后缀,如mp4,avi等等,主要为帮助系统的程序知道应该使用何种程序打开该文件;这就是说如果你把一个视频格式的文件后缀从avi改成mp4,并不意味该文件就变成了mp4格式。
视频封装格式则是一种视频封装容器。什么意思呢?在视频文件中同时含有视频部分、音频部分等等;那么视频封装容器则一种可以把多种视频数据放在一起的一个大盒子。这个盒子就是我们常说的视频格式,例如AVI(后缀.avi)格式、MPEG(后缀.mpg .mpeg .mpe .dat .vob .asf .3gp .mp4)格式、REAL Video(后缀.rmvb)格式、Flash Video(后缀.flv)格式等等。
那么视频编码器又是什么呢?视频编码器是指能够对数字视频进行压缩存储和解压缩的程序或设备。目前场景的编码器有H.26X系列(目前最流行的是H.264和H.265)和MPEG系列(目前最流行的是MPEG-4第十部分,即H.264)。上文代码中提到的XVID(旧称为DIVX)是一个开放源代码的MPEG-4视频编解码器.

经过上述介绍想必你已经对视频有了一个基本的了解和认识,那么接下来我就说出上述程序失败的原因:
系统中不存在对应的编码器!

解决方案

后来发现很简单,严格按照Opencv官方的编译指南,把所有的依赖库都安装上,而且安装一个解码器。

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值