我从 .mov 文件中提取的 alpha 蒙版中有一个灰度,有什么办法可以让 alpha 蒙版 .mov 仅为白色和黑色?

我从 .mov 文件中提取的 alpha 蒙版中有一个灰度,有什么办法可以让 alpha 蒙版 .mov 仅为白色和黑色?

标题说的就是这个。我以前从未使用过 ffmpeg,但我确实需要为项目提取 alpha mask。问题是灰色应该是白色的,所以当我将它与主视频合并时,出现了不应该有的透明度。

我使用了命令

ffmpeg -i angry.mov -filter:v alphaextract mask.mov

ffmpeg -i angry.mov -vf alphaextract,format=yuv420p 123.mov 

还有其他方法吗?我从 png 图像中制作了原始 mov 文件。

谢谢

答案1

我们可能会使用lutyuv过滤器,但如果你以前从未使用过 FFmpeg,它可能太复杂了。

将 Alpha 通道中的所有灰度值转换为白色的示例:

ffmpeg -i angry.mov -vf alphaextract,lutyuv="y=(val-(maxval-1))*maxval" -pix_fmt gray 123.mov


例如:
输入图像peppers_alpha.png::
在此处输入图片描述
如您所见,有半透明的像素。
(您可以下载上面的图片以执行下面的代码示例)。


使用过滤器提取 alpha 通道alphaextract

ffmpeg -y -i peppers_alpha.png -vf alphaextract -pix_fmt gray alpha.png

结果:
在此处输入图片描述
如您所见,半透明像素变成了灰度级(不透明像素为零)。


alphaextract使用和过滤器将半透明像素转换为黑色像素lutyuv

ffmpeg -y -i peppers_alpha.png -vf alphaextract,lutyuv="y=(val-(maxval-1))*maxval" -pix_fmt gray new_alpha.png

结果:
在此处输入图片描述
如您所见,半透明像素变成了黑色。

注意:maxval=255代表8位图像。


50我们可以通过减法来调整阈值1(例如):

ffmpeg -y -i peppers_alpha.png -vf alphaextract,lutyuv="y=(val-(255-50))*255" -pix_fmt gray new_alpha.png

结果:
在此处输入图片描述


为什么y=(val-254)*255将 [0, 254] 范围内的像素设置为 0?

解释:
所有数学运算均会裁剪至 [0, 255]。
低于 的值0会裁剪至0,高于 的值255会裁剪至255

val-2540(剪辑后)除255(范围 [0, 254] 内的值)之外的所有值。

因此对于 [0, 254] 中的 val,结果是:

0*255=0

对于 val = 255 ,结果是:

(255-254)*255=255

相关内容