opencv 视频处理 |
您所在的位置:网站首页 › 分析本人教学方面的优势和劣势 › opencv 视频处理 |
若视频读取时出现问题如:[mov,mp4,m4a,3gp,3g2,mj2 @ 0x563f33f78780] moov atom not found, VIDIOC_REQBUFS Inappropriate ioctl for device ,很可能是视频文件本身有问题,条件允许的话,重新生成视频就能解决问题。 1. 读取视频,并抽帧 cap = cv2.VideoCapture(video_path) if not cap.isOpened(): print('the video does not exist.') return False h, w = 256, 256 fps = int(cap.get(cv2.CAP_PROP_FPS)) ret, frame = cap.read() while ret: img = np.array(cv2.resize(img, (w, h))) # resize ret, frame = cap.read() cap.release() print('video read ended.')
* 每隔 k 帧抽帧的逻辑 f_No = 0 ret = cap.grab() while ret: if 0 == f_No%k: # here, check the frame number that grabbed last time ret, frame = cap.retrieve() # if condition satisfied, retrieve the frame that last grabbed ... ret = cap.grab() # grab every interation f_No += 1
2. 从图片集中合成视频 # 1. 'save_path' is path to save generated video, recommond to end with '.mp4'(format); 2. set the fourcc format as 'mp4v' (suit with '.mp4') video = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height)) for img in frames: # frames is of type list; frame in frames is object that same to object read by cv2.imread(), BGR video.write(img ) video.release() frames.clear()* 这种合成方式是有损的,读取的帧数据和源图像的数据间有差别, 参考stackoverflow,或许可以用 'png '的编码格式;但更推荐使用ffmpeg合成视频,最稳当的为:图片无损保存为png格式,从png图片用ffmpeg生成无损视频,参考 可以使用的部分编码格式 ——参考博客 cv2.VideoWriter_fourcc(*'X264'), 该参数是较新的MPEG-4编码,产生的文件较小,文件扩展名应为.mp4 cv2.VideoWriter_fourcc(*'PIMI'), 该参数是较旧的MPEG-1编码,文件名后缀为.avi cv2.VideoWriter_fourcc(*'MP42'), 该参数是MPEG-2编码,产生的文件不会特别大,文件名后缀为.avi cv2.VideoWriter_fourcc(*'DIV3'), 该参数是MPEG-3编码,产生的文件不会特别大,文件名后缀为.avi cv2.VideoWriter_fourcc(*'DIVX'), 该参数是MPEG-4编码,产生的文件不会特别大,文件名后缀为.avi cv2.VideoWriter_fourcc(*'XVID'), 该参数是较旧的MPEG-4编码,产生的文件不会特别大,文件名后缀为.avi cv2.VideoWriter_fourcc(*'MP4V'), 该参数也是较旧的MPEG-4编码,产生的文件不会特别大,文件扩展名应为.m4v cv2.VideoWriter_fourcc(*'THEO'), 该参数是Ogg Vorbis,产生的文件相对较大,文件名后缀为.ogv cv2.VideoWriter_fourcc(*'FLV1'), 该参数是Flash视频,产生的文件相对较大,文件名后缀为.flv cv2.VideoWriter_fourcc(*'MJPG'), 该参数是motion-jpeg编码,产生的文件较大,文件名后缀为.avi cv2.VideoWriter_fourcc(*'I420'), 该参数是未压缩的YUV编码,4:2:0色度子采样,这种编码广泛兼容,但会产生特别大的文件,文件扩展名应为.avi
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |