为什么使用 MJPEG 编解码器对视频进行编码比 MPEG-4 花费的时间更长?

为什么使用 MJPEG 编解码器对视频进行编码比 MPEG-4 花费的时间更长?

我正在测试智能相机的编码性能(MPEG-4 和 MJPEG)。我用 OpenCV/FFMPEG 编写了一个应用程序来执行编码,该应用程序从相机捕获图像并将其编码为所需的编码格式。在基准测试中,我发现 MJPEG 编码比 MPEG-4 编码花费的时间长得多。我以为情况会相反。将单帧编码为 MPEG-4 大约需要 31 毫秒,而编码为 MJPEG 大约需要 80 毫秒。与 MPEG-4 相比,MJPEG 真的需要这么长时间吗?

答案1

两种压缩算法是完全不同在其运作方式上,MPEG4 也可以使用 GPU 加速。

MPEG4 是真正的视频编解码器,而 MJPEG 只是将每一帧压缩成单独的 JPEG 图像。不同之处在于 MPEG4 使用各种技术(运动矢量补偿、I/B 帧等)来提高质量和压缩比。

为什么一个比另一个更快,实际上取决于编码器是如何实现的等等您的特定硬件的性能如何编码时。一些编码器可以使用特殊的 CPU 指令(SSE/SSE2、MMX 等...),或者使用 GPU 加速(我知道你可能没有,但我只是提一下)。JPEG 压缩在很大程度上依赖于 CPU 速度,并且实际上不使用任何指令集增强(出于兼容性/稳定性,以及这没什么帮助- 参见 2006 年 11 月 16 日的变更日志条目)。

最后,除非您有单帧视频,否则 MPEG4 永远不会真正一次编码“单帧”。它总是执行帧前瞻/后瞻来确定压缩当前帧的更好方法(MJPEG一次只处理一帧)。因此,它很大程度上依赖于帧之前/之后的数据,而不仅仅是当前帧。这也发生在单次编码中(毕竟,这就是它首先使用运动矢量的原因)。

答案2

MPEG-4 编码比 MJPEG 占用更多的 CPU。您的相机可能内置有 MPEG4 编码硬件,因此它可以更快地处理 MP4 数据。

相关内容