创建视频前后的帧大小差异

Posted

技术标签:

【中文标题】创建视频前后的帧大小差异【英文标题】:Frame size difference before and after creating a video 【发布时间】:2020-03-31 07:14:22 【问题描述】:

我正在使用 Opencv 从图像创建视频。

dim=(width, height)
fourcc = cv2.VideoWriter_fourcc(*'X264')
out_d = cv2.VideoWriter(save_path_depth,fourcc, fps, dim)

创建视频后,我读取视频并从该视频中提取帧

while(cap.isOpened()):
    ret, frame = cap.read()

    if ret == False:
        break
    print(frame)
    cv2.imwrite(output+"/"+ str(i).zfill(1) + ".png", frame)      
    i+=1

cap.release()

帧大小几乎是我最初用于创建视频的帧大小的两倍。除此之外,当我进行逐帧比较时,有些帧与对应的原始帧完全不同。有人能解释一下这背后的原因吗?

【问题讨论】:

您好,您的图片大小相同吗?您是否验证过 opencv 排序的图像是否与您目录中的排序相同?它们都是具有相同通道计数帧的 RGB 吗? 您的视频是 H264 编码的,因此帧间比较会产生不同的值是有道理的。帧大小是双倍是什么意思?分辨率? @lamourettejean-baptiste 帧大小相同,即 640* 360*3。我说的是框架占用的空间。原始图像每张图像大约 100 KB,而在我将它们转换为视频并提取帧之后,每帧大约 200 KB。还有哪些额外信息 @IbrahimYousuf 是的,我明白这一点,但我已经尝试在 MJPG 和 XVID 中进行编码,两者在原始帧和视频提取帧之间的差异方面都给了我相同的结果。 【参考方案1】:

这不是一个公平的比较。

您的原始输入可能适合 PNG,因此被有效压缩。

未显示您的实际编码选项,但由于使用有损格式,您很可能遇到generation loss。图像会因编码伪影而永久更改。这些编码伪影是由于有助于使视频文件变小的方法造成的。在观看视频时,它们被设计为更难以注意到。但是,从 H.264 重新编码回 PNG 必须在新图像中包含这些噪声伪影,这会增加复杂性,使压缩更难,因此会增加文件大小。 PNG 不能很好地处理噪音。

其次,正在发生 RGB 到 YUV 色彩空间的转换,这也会导致差异。

【讨论】:

以上是关于创建视频前后的帧大小差异的主要内容,如果未能解决你的问题,请参考以下文章

显示两个(几乎相同)视频文件的差异

H 264简单介绍

有啥软件可以查询视频文件的帧和码率?

视频编解码 — 帧内预测

减去和合并图像以制作视频帧

减小相同格式的视频大小并减小帧大小