我一直在研究一种视频编码器,该编码器使用block matching在以前的帧中查找相似的块。
为简单起见,我将省略大部分细节,但是我想知道是否正确地使用了块匹配算法。
为了在前一帧上找到一个块,我的编码器对YUV颜色空间中的Y通道使用了均方算法。
通过比较我们要匹配的块的每个像素与上一帧的块来工作。它采用每个像素的差异并将其平方。
比较所有像素后,选择平均差最小的块作为所需块。
现在这是我需要帮助的地方。我的编码器查看256x256区域中的每个可能的块,并使用半像素搜索。它可以使用的最小块大小为4x4。
从我在网上阅读的内容来看,这与mp4的用法相同。
但是我找不到与mp4一样多的块。
例如,这里是我要压缩的2帧。第一个是I帧,第二个是P帧:
现在,在我的编码器运行之后,它可以将第二帧缩小80%,并且无法将其匹配得足够近,可以将其保存为“差异”块。哪些是灰色块,仅记录差异。他们看起来像这样:
现在我不明白的是保存这些“差异”块,因为jpg大约需要90kb的精度。
将其乘以24(每秒24帧),即可得到2070kb /秒。这不包括实际运动矢量占用多少空间或其他任何东西。
无论如何,mp4能够以每秒700kb的速度将以上图像的视频压缩到每秒700kb,并且在更大的数据量下仍比我的编码器更好。
这是为什么?寻找方块时,我做错什么了吗?任何帮助将非常感激。