autotrack 矩形讨论
如何遮蔽视频中某块区域,并让它跟随物体(例如人脸)的运动。
请看 mlt 源码中的这个文件:mlt/src/modules/motion_est/README
该文件包含了如何使用我的运动估计(motion estimation)模块的示例。以下是相关的几行:
要在画面中自动跟踪一个物体,可以试试:
melt -filter autotrack_rectangle:X,Y:WxH debug=1 <movie_file>
(其中 X,Y 是矩形左上角为原点的坐标,WxH 是矩形的尺寸。)
要遮蔽画面中同一个物体,可以试试:
melt -filter autotrack_rectangle:X,Y:WxH obscure=1 <movie_file>
换句话说,如果你已经有一个用来放置椭圆的界面,那么做人脸运动跟踪应该非常容易。
autotrack_rectangle 会用到 motion_est 和 obscure 滤镜,随着帧的变化跟踪该区域并把它遮蔽起来。
我的 autotrack_rectangle 滤镜被调用时的初始参数,与你在 kdenlive 中已有的 obscure 滤镜非常相似。主要区别在于它只有起始几何、没有结束几何。另一个区别是 autotrack_rectangle 滤镜不会把 “averaging”(平均值)参数传给 obscure 滤镜, 不过这一点我可以替你改掉。
但这里有一些陷阱:
预览这个滤镜目前效果不会好。autotrack 滤镜假定帧是按顺序逐帧步进的。在渲染期间 这样没问题,但在预览期间,除非也是按顺序连续播放,否则不行。这可以(大体上)通过 缓存几何数据来解决。要彻底解决,还需要一次“预渲染”,在预览中随意跳转之前先把 几何数据完全缓存好。跟踪代码极其快速,所以这应该不会成为性能问题。
最后,autotrack 工作得很好,但总会有一些边缘情况,几何数据会偏离目标中心过远。
– Main.ZacharyDrew - 2007 年 10 月 26 日