FFMPEG 在另一层上擦除过渡层
FFMPEG Wipe transition one layer over another
如何使用 FFMPEG 通过擦除过渡在另一层之上显示一层?
注意:这不是幻灯片切换。顶部图像保持在一个位置,但会随着时间的推移逐渐显示出来。
我想要一种技术,它可以适用于具有或不具有透明度的顶层以及图像、视频或动态创建的源,例如 showwavespic
。
我试过像这样制作遮罩动画:
但是 alphamerge
没有像我预期的那样工作,我找不到适用于这种类型面具的 blend
模式。
编辑:建议使用 xfade
过滤器,但它似乎不适用于源具有透明度的情况。它使透明区域变黑。透明源示例:
但是 xfade
呈现这个:
ffmpeg -loop 1 -t 5 -i flower.jpg -t 5 -loop 1 -i gear.png -filter_complex "[0]format=rgb24,drawbox=thickness=fill,split[black][black2];[black2]negate[white];[black][white]xfade=transition=wiperight:duration=1:offset=0[alf];[0][1]overlay=format=auto[ovr];[ovr][alf]alphamerge[fg];[0][fg]overlay=format=auto,format=yuv420p" output.mp4
format 过滤器将允许 drawbox 变成真正的黑色。否则它可能会像示例 GIF 中那样生成一个半透明的覆盖层,您几乎看不到齿轮(我最初制作它时没有注意到)。例如,如果您想要 YUV 而不是 RGB,请使用 yuv444p
而不是 rgb24
.
drawbox 用黑色覆盖 flower.jpg
。或者,您可以使用 color(以及可选的 scale2ref)过滤器。这是一种使黑色图像与输入大小相同的惰性方法。
split 滤镜复制黑色图像,negate 滤镜复制白色图像。
xfade 从黑白图像制作动画 alpha 蒙版。
alphamerge 将 alpha 掩码添加到 overlay.
的输出中
生成的带有 alpha 的叠加层覆盖在 flower.jpg
上。
另见
如何使用 FFMPEG 通过擦除过渡在另一层之上显示一层?
注意:这不是幻灯片切换。顶部图像保持在一个位置,但会随着时间的推移逐渐显示出来。
我想要一种技术,它可以适用于具有或不具有透明度的顶层以及图像、视频或动态创建的源,例如 showwavespic
。
我试过像这样制作遮罩动画:
但是 alphamerge
没有像我预期的那样工作,我找不到适用于这种类型面具的 blend
模式。
编辑:建议使用 xfade
过滤器,但它似乎不适用于源具有透明度的情况。它使透明区域变黑。透明源示例:
但是 xfade
呈现这个:
ffmpeg -loop 1 -t 5 -i flower.jpg -t 5 -loop 1 -i gear.png -filter_complex "[0]format=rgb24,drawbox=thickness=fill,split[black][black2];[black2]negate[white];[black][white]xfade=transition=wiperight:duration=1:offset=0[alf];[0][1]overlay=format=auto[ovr];[ovr][alf]alphamerge[fg];[0][fg]overlay=format=auto,format=yuv420p" output.mp4
format 过滤器将允许 drawbox 变成真正的黑色。否则它可能会像示例 GIF 中那样生成一个半透明的覆盖层,您几乎看不到齿轮(我最初制作它时没有注意到)。例如,如果您想要 YUV 而不是 RGB,请使用
yuv444p
而不是rgb24
.drawbox 用黑色覆盖
flower.jpg
。或者,您可以使用 color(以及可选的 scale2ref)过滤器。这是一种使黑色图像与输入大小相同的惰性方法。split 滤镜复制黑色图像,negate 滤镜复制白色图像。
xfade 从黑白图像制作动画 alpha 蒙版。
alphamerge 将 alpha 掩码添加到 overlay.
的输出中生成的带有 alpha 的叠加层覆盖在
flower.jpg
上。
另见