赞
踩
你好! 这是我第一次用CSDN编写博客。该专栏博客主要来记录学习使用Opencv过程中所遇到的问题及解决方案。
这篇博客主要记录了使用Opencv打开本地摄像头录制视频,并保存为*.mp4文件格式视频所遇到的问题,以及最终成功的解决代码解决方案。
关于视频编码格式问题,主要参考了一下几篇博客:
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")
在保存视频时,会遇到只能保存不到1kb,或者保存完视频后不能正常播放,**原因是VideoCapture的FrameSize与VideoWriter设置的S不一致导致的。**参考文章:知乎-python-opencv写入视频文件无法播放?
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文件格式视频的同学们!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。