在处理完一段视频后,我得到了一个大得多的文件。MJPG fourcc编解码器压缩是否正确,或者是否会发生这种情况?原始视频大小为2.51MB,结果视频文件大小为16.8MB。在这段代码中,没有经过处理的图像可供参考,它使用的是与以前相同的图像,但大小有所增加。在
这是我的密码。在
import os
import cv2
width=960
height=540
fps=25.0
#video=cv2.VideoWriter('ntest\\video.avi',-1,1,(width,height))
fourcc=cv2.VideoWriter_fourcc(*'MJPG')
video = cv2.VideoWriter('ntest\\output.avi',fourcc, fps, (width,height))
cap = cv2.VideoCapture('in.mp4')
count = 0
prename="ntest\\frame"
extension=".jpg"
while cap.isOpened():
ret,frame = cap.read()
#after processing, replace frame with processed image
cv2.imshow('window-name',frame)
name=prename+str(count)+extension
cv2.imwrite(name, frame)
a=cv2.imread(name)
video.write(a)
os.remove(name) #deletes image file, only keeps video
count = count + 1
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cap.destroyAllWindows()
cv2.destroyAllWindows()
video.release()
如果输入mp4文件使用像h264这样的现代编解码器,那么mjpeg很可能会更大。Mjpeg只是每个帧的一系列jpeg图像,它不能利用图像中帧间相同的区域,也不能利用现代视频编解码器使用的任何预测编码
在MPEG编解码器的情况下,只有I帧(关键帧)具有(有点)完整的JPEG信息。在关键帧之间有B帧或P帧,它们都是与其他帧相比的差分信息。http://www.bretl.com/mpeghtml/pixtypes.HTM
框架的典型模式
IBBPBBP...BBIBBPBBP...BBIBBPBB...
。对于压缩良好的MPEG4/divx视频,通常要经过几秒钟,直到视频流中出现一个关键帧。所有其他帧都是差分的。你可以注意到,当录制有一些颜色失真开始超过观察区域时,当伪影突然消失时,就是视频流遇到I帧时,可以清除空间。在这些完全是示例数据,基于MPEG2而不是MPEG4编码。MPEG4的压缩比这个还要大。在
http://www0.cs.ucl.ac.uk/teaching/GZ05/09-mpeg.pdf第11页:
这表明,在MPEG2视频的情况下,MJPEG大约大3倍。这意味着将一个约7.53mb的假设MJPEG视频压缩到2.51mbmpeg2视频。MPEG4可以轻松实现比MPEG2高2倍的压缩(这都取决于编解码器的设置),因此它可以将15-18MB的MJPEG压缩到2.51MB的MPEG4中。不要忘记压缩是有损的,所以有些信息会丢失。但在理想的情况下,人的眼睛和耳朵不能识别太多数据丢失的伪影(阻塞、振铃等)。在
相关问题 更多 >
编程相关推荐