FFMPEG 运动补偿和搜索

FFMPEG 运动补偿和搜索

我正在尝试修改 FFMPEG 的运动检测部分。我想要做的是扩展搜索空间,以便每当宏块到达帧的最右边缘时,我需要它仍然将块向最左移动,就好像它们是连接的一样(在我的示例视频中,右边缘实际上是左边缘的延续)。有人能帮我指出我在 FFMPEG 源代码或 x265 或 x264 中可以修改它的具体位置吗?

在此处输入图片描述

我以 H265 为例这里。它有一个motion.c文件,很好地指定了可能的块大小,如下所示,但我找不到遍历框架的特定循环。非常感谢您的帮助。

#define SETUP_SCALE(W, H) \
    sizeScale[LUMA_ ## W ## x ## H] = (H * H) >> 4;
    SETUP_SCALE(4, 4);
    SETUP_SCALE(8, 8);
    SETUP_SCALE(8, 4);
    SETUP_SCALE(4, 8);
    SETUP_SCALE(16, 16);
    SETUP_SCALE(16, 8);
    SETUP_SCALE(8, 16);
    SETUP_SCALE(16, 12);
    SETUP_SCALE(12, 16);
    SETUP_SCALE(4, 16);
    SETUP_SCALE(16, 4);
    SETUP_SCALE(32, 32);
    SETUP_SCALE(32, 16);
    SETUP_SCALE(16, 32);
    SETUP_SCALE(32, 24);
    SETUP_SCALE(24, 32);
    SETUP_SCALE(32, 8);
    SETUP_SCALE(8, 32);
    SETUP_SCALE(64, 64);
    SETUP_SCALE(64, 32);
    SETUP_SCALE(32, 64);
    SETUP_SCALE(64, 48);
    SETUP_SCALE(48, 64);
    SETUP_SCALE(64, 16);
    SETUP_SCALE(16, 64);
#undef SETUP_SCALE

基本的伪代码应该是这样的:

block.rightX ==block.width; // a block initiates from left part of the frame
while(block.leftX <=frame.width) //until it hits the right most edge (assuming it moves from left to right for search)
for (int i=0;i<block.width();i++)
    for(int j=0;j< i<block.height();j++)
        block[i][j] = frame_pixel [(block.leftX+i) % frame.width] [block.leftY+j] //if the block's width passes frame's width, we just take the mod.

相关内容