Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在OpenCV中将视频分解为帧而不增加大小_Python_Python 3.x_Opencv_Opencv Python - Fatal编程技术网

Python 如何在OpenCV中将视频分解为帧而不增加大小

Python 如何在OpenCV中将视频分解为帧而不增加大小,python,python-3.x,opencv,opencv-python,Python,Python 3.x,Opencv,Opencv Python,我有一个478Mb大的视频,我想把它分割成png,但当我尝试时,每一帧变成2Mb左右(有39.5k帧),结果大小超过60Gb。 有没有一种方法可以在不大幅增加规模的情况下实现这一点?我的代码如下 vidcap = cv2.VideoCapture(filename) success = True frame = 0 while success: success, img = vidcap.read() png_name = videoname + '_frame_' + str(

我有一个478Mb大的视频,我想把它分割成png,但当我尝试时,每一帧变成2Mb左右(有39.5k帧),结果大小超过60Gb。 有没有一种方法可以在不大幅增加规模的情况下实现这一点?我的代码如下

vidcap = cv2.VideoCapture(filename)
success = True
frame = 0
while success:
    success, img = vidcap.read()
    png_name = videoname + '_frame_' + str(frame) + '.png'
    cv2.imwrite(FRAMES_FOLDER + '/' + png_name, img)
    frame += 1
vidcap.release()

只是抄袭@barny的答案。似乎最好的办法是使用JPEG


视频压缩的工作原理是发送一个完整的帧,然后在下一个完整帧之前发送若干(20、50、60?)个“差”帧——这(正如您所发现的)比编码每个完整帧要高效得多。保存为有损jpeg格式的文件可能比无损png小得多,并且由于源是m/jpeg视频,与png相比,使用jpeg不会降低多少质量


视频压缩的工作原理是发送一个完整的帧,然后在下一个完整帧之前发送若干(20、50、60?)个“差”帧——这(正如您所发现的)比编码每个完整帧要高效得多。保存为有损jpeg格式的文件可能比无损png小得多,而且由于源是m/jpeg视频,使用jpeg与png相比,质量不会受到太大影响。这确实使文件更小,但总容量仍超过10Gb。“谢谢,巴尼,你帮我将文件大小提高了1/6。”。显示视频压缩的有效性。你不太可能变得更好,但如果你感到惊讶,那就太好了。