我正在尝试使用 ffmpeg 在视频中叠加透明图像。我发现
geq=g='g(X,Y)':a='0.3*alpha(X,Y)'
用于改变图像的透明度。我知道它根据小数乘以改变图像的透明度。我想知道
- 需要 g='g(X,Y)'。我得到了亮度或 RGB 表达式是必需的如果我将其删除。
- X 和 Y 的值是多少?根据文档当前样本的坐标。 https://www.ffmpeg.org/ffmpeg-all.html#geq
如果需要的话,我会使用完整命令
ffmpeg -i video1.mp4 -i img.jpg -filter_complex "[1]scale=50:50,geq=g='g(X,Y)':a='0.3*alpha(X,Y)'[unni];[0][unni]overlay=W-w-10:main_h-overlay_h-10" out.mp4
它也适用于geq=r='r(X,Y)':a='0.3*alpha(X,Y)'
答案1
X 和 Y 不指任何特定的像素坐标。geq 过滤器对视频帧的所有像素进行操作,每次一个。它们是表示当前正在评估的像素坐标的变量。
geq 过滤器可以对编码为 RGB 或 YUV 的像素进行操作。但实际使用的代码不同,因此它需要知道哪种类型。为了表示输入是 RGB,至少应设置 RG 或 B 表达式之一。对于 YUV,应设置 Y(亮度)expr。您只需将值设置为标识(p(X,Y)
)。
答案2
g='g(X,Y)'
orr='r(X,Y)'
语句不执行任何操作,但对于 RGB 颜色空间,过滤器需要它们。它们基本上将输入的所有像素的绿色/红色值设置为像素的当前绿色/红色值。
alpha(X,Y)
逐个像素地获取每个坐标的当前 alpha 值。然后将其乘以0.3
使其更加透明。