Python 如何在OpenCV中将视频分解为帧而不增加大小
我有一个478Mb大的视频,我想把它分割成png,但当我尝试时,每一帧变成2Mb左右(有39.5k帧),结果大小超过60Gb。 有没有一种方法可以在不大幅增加规模的情况下实现这一点?我的代码如下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(
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。”。显示视频压缩的有效性。你不太可能变得更好,但如果你感到惊讶,那就太好了。