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

标签 python opencv video ffmpeg frame-size

我正在使用 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()

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

最佳答案

这不是一个公平的比较。

您的原始输入可能适用于 PNG,因此可以有效压缩。

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

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

关于python - 创建视频前后的帧大小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945194/

相关文章:

python - Django slug 和 id 作为 URL 重定向

c++ - 如何使用 C++ 接口(interface)初始化和访问 openCV 中 Mat 标量矩阵中的条目?

javascript - 来自 firefox OS 手机的视频横向播放

java - 使用Red5需要Java吗

python - 将unicode象形文字保存到mysql

python - 多个同名的外部包

python - 在 Spark RDD 和/或 Spark DataFrames 中 reshape /透视数据

python - 模块 'cv2.cv2' 没有属性 'ximgproc'

c++ - 锐化图像 - 访问邻近像素

opengl - 使用 mmap() 访问视频 RAM,了解 OpenGL 上下文和视觉 ID