读avi文件,用cv2.VideoCapture和video.read得到单帧,单帧的png文件比avi大很多
Reading avi file, getting single frames with cv2.VideoCapture and video.read, and the png files of the single frames are much bigger than the avi
我正在读取一个 avi 文件,大小约为 2MB,有 301 帧,20 frames/sec(15 秒长的视频),每帧大小为 1024 * 1096。
当我使用 cv2 读取单帧并将它们以原始大小重新保存为 png 时,每个 picture/frame 的大小约为 600KB。所以,我总共有 301 * 600KB = 181MB(原始 avi 有 2MB)。
知道为什么会这样吗?如何在不改变分辨率的情况下减小单帧文件的大小?想法是以某种方式从原始视频生成单帧,使用 CNN 进行检测并使用包含的检测再次重新保存原始视频,输出视频应与输入视频在某种程度上非常相似(大约相同的文件大小,不能是 avi 格式)
PNG 文件或单帧在大多数情况下总是比原始视频文件大(在大多数情况下由编解码器 https://www.fourcc.org/codecs.php 压缩)。例如,在 Linux 上使用以下命令来创建压缩的 avi:
ffmpeg -i FramePicName%d.png -vcodec libx264 -f avi aviFileName
您可以通过以下python cv2代码
获取使用的编解码器来创建原始视频文件
cap = cv2.VideoCapture(videoFile)
fourcc = cap.get(cv2.CAP_PROP_FOURCC) # or cv2.cv.CV_CAP_PROP_FOURCC
"".join([chr((int(fourcc) >> 8 * i) & 0xFF) for i in range(4)])
我正在读取一个 avi 文件,大小约为 2MB,有 301 帧,20 frames/sec(15 秒长的视频),每帧大小为 1024 * 1096。
当我使用 cv2 读取单帧并将它们以原始大小重新保存为 png 时,每个 picture/frame 的大小约为 600KB。所以,我总共有 301 * 600KB = 181MB(原始 avi 有 2MB)。
知道为什么会这样吗?如何在不改变分辨率的情况下减小单帧文件的大小?想法是以某种方式从原始视频生成单帧,使用 CNN 进行检测并使用包含的检测再次重新保存原始视频,输出视频应与输入视频在某种程度上非常相似(大约相同的文件大小,不能是 avi 格式)
PNG 文件或单帧在大多数情况下总是比原始视频文件大(在大多数情况下由编解码器 https://www.fourcc.org/codecs.php 压缩)。例如,在 Linux 上使用以下命令来创建压缩的 avi:
ffmpeg -i FramePicName%d.png -vcodec libx264 -f avi aviFileName
您可以通过以下python cv2代码
cap = cv2.VideoCapture(videoFile)
fourcc = cap.get(cv2.CAP_PROP_FOURCC) # or cv2.cv.CV_CAP_PROP_FOURCC
"".join([chr((int(fourcc) >> 8 * i) & 0xFF) for i in range(4)])