标题说的就是这个。我以前从未使用过 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-254
是0
(剪辑后)除255
(范围 [0, 254] 内的值)之外的所有值。
因此对于 [0, 254] 中的 val,结果是:
0*255
=0
对于 val = 255 ,结果是:
(255-254)*255
=255