For this kind of thing, I frequently create a patch using a mask tool, such as Polygon, a Matte Control, a Time Stretcher, and a Tracker and/or Transform.
Draw the mask around the item you wish to remove in order to get the shape right, then select it all and move it to the windows you want to use as a patch. Connect the image to the MatteControl's Background, and the Polygon to the Garbage Matte input. The resulting image will be everything
but the bit you need, so either use the Matte Controls Invert Garbage Matte switch, or the Invert switch in the Polygon itself to reverse the selection. Remove the animation from the Time Stretcher's Source Time control and set it to whatever frame you happen to be looking at. You now have the patch you need.
Track the feature you want to cover and use whatever method you prefer to apply that motion to the patch (there are several ways to do it; I usually use the Tracker itself in Matchmove/FG Only mode). Then Merge over the original image. You may need to use an additional Transform to position the patch exactly where you want it to go.
Here's a quick example of how it would wire together. The Background is standing in for a Loader or MediaIn.
- Code: Select all
{
Tools = ordered() {
Polygon1 = PolylineMask {
DrawMode = "InsertAndModify",
DrawMode2 = "InsertAndModify",
Inputs = {
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Polyline = Input {
SourceOp = "Polygon1Polyline",
Source = "Value",
},
Polyline2 = Input {
Value = Polyline {
},
Disabled = true,
},
},
ViewInfo = OperatorInfo { Pos = { 2475, -1369.5 } },
},
Polygon1Polyline = BezierSpline {
SplineColor = { Red = 173, Green = 255, Blue = 47 },
NameSet = true,
KeyFrames = {
[29] = { 0, Flags = { Linear = true, LockedY = true }, Value = Polyline {
Closed = true,
Points = {
{ Linear = true, X = -0.139062498013178, Y = 0.0148148160289835, LX = 0.0326388877299097, LY = -0.00216049312809367, RX = -0.000173612766795691, RY = -0.0111111113410673 },
{ Linear = true, X = -0.139583336313566, Y = -0.0185185179942184, LX = 0.000173612766795691, LY = 0.0111111113410673, RX = 0.0324652788539727, RY = -0.00216049366159202 },
{ Linear = true, X = -0.0421874997516473, Y = -0.0249999989789945, LX = -0.0324652788539727, LY = 0.00216049366159202, RX = 0.000347221642732619, RY = 0.0111111118745656 },
{ Linear = true, X = -0.0411458348234495, Y = 0.00833333664470248, LX = -0.000347221642732619, LY = -0.0111111118745656, RX = -0.0326388877299097, RY = 0.00216049312809367 }
}
} }
}
},
TimeStretcher2_1 = TimeStretcher {
Inputs = {
SourceTime = Input { Value = 29, },
Input = Input {
SourceOp = "MatteControl1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 2585, -1336.5 } },
},
MatteControl1 = MatteControl {
Inputs = {
Filter = Input { Value = FuID { "Multi-box" }, },
Passes = Input { Value = 16, },
["Garbage.Matte"] = Input {
SourceOp = "Polygon1",
Source = "Mask",
},
["Garbage.MaskNest"] = Input { Value = 1, },
["Garbage.MaskInverted"] = Input { Value = 1, },
Background = Input {
SourceOp = "PipeRouter1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 2475, -1336.5 } },
},
Background1 = Background {
CtrlWZoom = false,
Inputs = {
GlobalIn = Input { Value = 1, },
GlobalOut = Input { Value = 241, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
},
ViewInfo = OperatorInfo { Pos = { 2310, -1270.5 } },
},
Merge2 = Merge {
Inputs = {
UseOpenCL = Input { Value = 0, },
Background = Input {
SourceOp = "PipeRouter1",
Source = "Output",
},
Foreground = Input {
SourceOp = "Transform1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 2695, -1270.5 } },
},
Transform1 = Transform {
Inputs = {
Center = Input { Value = { 0.452604166666667, 0.576851851851852 }, },
Input = Input {
SourceOp = "Tracker1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 2695, -1303.5 } },
},
Tracker1 = Tracker {
Trackers = {
{
PatternTime = 1,
PatternX = 0,
PatternY = 0
}
},
Inputs = {
Input = Input {
SourceOp = "PipeRouter1",
Source = "Output",
},
Foreground = Input {
SourceOp = "TimeStretcher2_1",
Source = "Output",
},
Operation = Input { Value = 1, },
Merge = Input { Value = 1, },
MatchMoveSettings = Input { Value = 1, },
Name1 = Input { Value = "Tracker 1", },
},
ViewInfo = OperatorInfo { Pos = { 2695, -1336.5 } },
UserControls = ordered() {
UpdateReferenceFrame = {
INP_Integer = false,
LINKID_DataType = "Number",
BTNCS_Execute = "RunScript([[S:\\net_exe\\BlackMagic\\fusion9\\scripts\\Tool\\updateTrackerReferenceFrame.lua]])",
ICS_ControlPage = "Operation",
INPID_InputControl = "ButtonControl",
LINKS_Name = "Update Reference Frame"
}
}
},
PipeRouter1 = PipeRouter {
Inputs = {
Input = Input {
SourceOp = "Background1",
Source = "Output",
},
},
ViewInfo = PipeRouterInfo { Pos = { 2365, -1270.5 } },
}
}
}