Overlay 坐标点的计算

这张图片是从别处抄来的,但可以很形象的来描述如何计算Overlay坐标点.

根据ffmpeg官网描述, overlay只能用来叠加两个输入源。 第一个视频源(这个视频源将会被放到后面,充当背景)称之为main,第二个视频源(放在第一个视频前面,充当画中画的角色)称之为overlaidoverlay的坐标系如上图所描述,最上角为(0,0),X轴向右递增,Y轴向下递增。

Overlay坐标点的计算,重点算的是overlaid原点在main中的位置,也就是上图中,input2的原点位置在input1中的坐标点。

在计算坐标之前,先来看一下Overlay两种坐标表示方式:

第二种是第一种的简化方式。

下面来看坐标如何计算。在Overlay Filter中,每个视频源都有两个属性: 高(Height)和宽(Weight). 因此对mainoverlaid来说,其高和宽分别用main_w,main_hoverlay_woverlay_h来表示,如果不想写这么长,也可以用WHwh来简写替代。

了解表示方法之后,我们先来计算比较简单的四个位置: 左上角,左下角,右上角和右下角。

当我们期望input2出现在左上角时,此时input2的原点(左上角)坐标和input1的原点坐标是重合的,所以此时此刻input2的坐标是(0,0),如下图

当我们期望input2出现在右上角的时候,参考一下开篇的坐标系,此时,input2的原点坐标中X点坐标不固定,但Y点坐标可以确定为0。 而X点的位置则可以通过 input1的宽带 - input2的宽度来确定。也就是 main_w - overlay_w。因此input2的原点坐标此时此刻就是(main_w - overlay_w, 0),如下图:

如果为了好看,想让input2离右边有一些距离,可以让X轴再向做移动10个像素,此时原点坐标就是(main_w - overlay_w - 10, 0)

有了上面两个坐标计算过程,左下角就容易计算了。 此时input2的原点X坐标为0, Y点坐标为main_h - overlay_h,因此原点坐标就是(0, main_h - overlay_h)

右下角和左上角是互补关系, 此时的原点坐标应该是(main_w - overlay_w, main_h - overlay_h )

其它坐标位置的计算和上述四种坐标点的计算原理相同,例如要将input显示在屏幕中央,input原点坐标就是(main_w /2 - overlay_w / 2, main_h / 2 - overlay_h / 2).