【Opencv基础学习】 VideoWriter打开本地摄像头并保存mp4格式视频

你好! 这是我第一次用CSDN编写博客。该专栏博客主要来记录学习使用Opencv过程中所遇到的问题及解决方案。
这篇博客主要记录了使用Opencv打开本地摄像头录制视频,并保存为*.mp4文件格式视频所遇到的问题,以及最终成功的解决代码解决方案。

1.视频编码格式fourcc设置

关于视频编码格式问题,主要参考了一下几篇博客:

1. cv2.VideoWriter()指定写入视频帧编码格式
2. Opencv CV_FOURCC 可能的四字码
3. Video Codecs by FOURCC
4. 知乎-python-opencv写入视频文件无法播放?

在项目过程中主要问题就是,所设置的视频编码格式fourcc要与保存的文件格式想对应,比如:.avi格式可以使用“DIVX”、“MPEG”、“MJPG”等fourcc;*.mp4可以使用“mp4v” …。所以要保存为mp4格式的视频,需要设置:fourcc = cv2.VideoWriter_fourcc(*"mp4v")

在参考博客【Opencv3】视频操作 读写avi、mp4、flv时,说以下四种说法等价:

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') 
fourcc = cv2.VideoWriter_fourcc(*'MP4V') 
fourcc = cv2.VideoWriter_fourcc(*'mp4v')

但是,我使用Pycharm经过测试,以下三种设置会报错误,但可以成功保存mp4视频,且可以正常播放:

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') 
fourcc = cv2.VideoWriter_fourcc(*'MP4V')

OpenCV: FFMPEG: tag 0x5634504d/‘MP4V’ is not supported with codec id 12 and format ‘mp4 / MP4 (MPEG-4 Part 14)’
OpenCV: FFMPEG: fallback to use tag 0x7634706d/‘mp4v’

所以经过上述多次不断反复尝试,最终找到正确保存mp4文件格式的fourcc的设置

fourcc = cv2.VideoWriter_fourcc(*"mp4v")

2.cv2.VideoWriter() 的FrameSize设置问题

在保存视频时,会遇到只能保存不到1kb,或者保存完视频后不能正常播放,**原因是VideoCapture的FrameSize与VideoWriter设置的S不一致导致的。**参考文章:知乎-python-opencv写入视频文件无法播放?

保存视频无法播放解决

3.成功保存为mp4格式视频,且正常播放代码

import cv2

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter('test.mp4', fourcc, 20, (width, height))

while True:
    ret, frame = cap.read()
    if ret:
        out.write(frame)
        cv2.imshow('capture', frame)
        if cv2.waitKey(25) & 0xFF == ord('q'): #按键盘Q键退出
            break
    else:
        continue
cap.release()
out.release()
cv2.destroyAllWindows()

博主第一次写博客,希望大家可以多多批评指正,互相学习。希望本篇博客可以帮助到同样需要利用Opencv保存mp4文件格式视频的同学们!!

  • 24
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值