0

I spend many of hours, getting this, done, but I never succeeded:

In a video with rather small moving objects I wanted to have a "Call Out" (i.e. a text label with a line leading to the object to be tracked) to label the moving object. As IMHO the text readability will be better if it doe not move with the object, I wanted the text to be static.

Resolve has a CallOut, but it seems it's not easy to misuse it for my purpose (read later on). The exist Youtube tutorials making the whole callout follow the object, but that's not what I want.

I tried to construct my own callout, but I never got it working. So I started to examine the built-in Call Out:

I realized that the square at the line-end can be controlled via a Publish2, so I created my own simplified macro from the original Call Out. There I can move the line's end by changing a position, but when I connect that position to my tracker, the line does not move, or moves just for a short moment.

Some Details

Here is my simplified macro, showing how the line can be moved (I exaggerated the colors for clarity):

Simplified callout screenshot #1

Simplified callout screenshot #2

Finally here's the simplified macro code (Resolve adds 1s to the name for each modification, so don't ask about the name)

{
    Tools = ordered() {
        MyCallout4111 = MacroOperator {
            Inputs = ordered() {
                Input1 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "StyledText",
                },
                Input2 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Font",
                    ControlGroup = 2,
                },
                Input3 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Style",
                    ControlGroup = 2,
                },
                Input4 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Red1Clone",
                    Name = "Color",
                    ControlGroup = 3,
                    Default = 1,
                },
                Input5 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Green1Clone",
                    ControlGroup = 3,
                    Default = 1,
                },
                Input6 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Blue1Clone",
                    ControlGroup = 3,
                    Default = 1,
                },
                Input7 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Alpha1Clone",
                    ControlGroup = 3,
                    Default = 1,
                },
                Input8 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "Size",
                    Default = 0.0591,
                },
                Input9 = InstanceInput {
                    SourceOp = "Text1",
                    Source = "CharacterSpacingClone",
                    Name = "Tracking",
                    Default = 1,
                },
                Input10 = InstanceInput {
                    SourceOp = "Publish2",
                    Source = "Value",
                    Name = "Value C",
                },
                Input11 = InstanceInput {
                    SourceOp = "Line_BG",
                    Source = "TopLeftRed",
                    Name = "Color",
                    ControlGroup = 7,
                    Default = 0.535,
                },
                Input12 = InstanceInput {
                    SourceOp = "Line_BG",
                    Source = "TopLeftGreen",
                    ControlGroup = 7,
                    Default = 0.535,
                },
                Input13 = InstanceInput {
                    SourceOp = "Line_BG",
                    Source = "TopLeftBlue",
                    ControlGroup = 7,
                    Default = 0.535,
                },
                Input14 = InstanceInput {
                    SourceOp = "Line_BG",
                    Source = "TopLeftAlpha",
                    ControlGroup = 7,
                    Default = 1,
                },
            },
            Outputs = {
                Output1 = InstanceOutput {
                    SourceOp = "Text1Opacity1",
                    Source = "Value",
                },
                Output2 = InstanceOutput {
                    SourceOp = "Publish2",
                    Source = "Value",
                },
                MainOutput1 = InstanceOutput {
                    SourceOp = "KeyStretcheronForeground",
                    Source = "Result",
                }
            },
            ViewInfo = GroupInfo { Pos = { 0, 0 } },
            Tools = ordered() {
                Text1 = TextPlus {
                    ExtentSet = true,
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        Position7 = Input { Value = 1, },
                        ExtendHorizontal7 = Input { Value = 0.89, },
                        ExtendVertical7 = Input { Value = 0.053, },
                        ElementShape7 = Input { Value = 2, },
                        GlobalOut = Input { Value = 5000, },
                        Width = Input { Value = 1920, },
                        Height = Input { Value = 1080, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                        Center = Input {
                            SourceOp = "Publish1",
                            Source = "Value",
                        },
                        LineSpacing = Input { Value = 0.693, },
                        Name8 = Input { Value = "White", },
                        Opacity1 = Input {
                            SourceOp = "Text1Opacity1",
                            Source = "Value",
                        },
                        Position1 = Input { Value = 1, },
                        StyledText = Input { Value = "Sample", },
                        Font = Input { Value = "Open Sans", },
                        Style = Input { Value = "Light", },
                        Size = Input { Value = 0.0591, },
                        VerticalJustificationNew = Input { Value = 3, },
                        HorizontalJustificationNew = Input { Value = 3, },
                        ElementShape8 = Input { Value = 2, },
                        ExtendHorizontal8 = Input { Value = 0.1, },
                        ExtendVertical8 = Input { Value = 0.19, },
                        Position8 = Input { Value = 1, },
                    },
                    ViewInfo = OperatorInfo { Pos = { 45, 120.683 } },
                },
                Publish1 = PublishPoint {
                    CtrlWZoom = false,
                    CustomData = {
                        Path = {
                            Map = {
                                ["Setting:"] = "Templates:\\Templates.drfx\\Edit\\Titles\\"
                            }
                        }
                    },
                },
                Text1Opacity1 = BezierSpline {
                    SplineColor = { Red = 179, Green = 28, Blue = 244 },
                    CtrlWZoom = false,
                    KeyFrames = {
                        [4] = { 0, RH = { 6, 0 } },
                        [10] = { 1, LH = { 8, 1 } }
                    }
                },
                Polygon1 = PolylineMask {
                    DrawMode = "ModifyOnly",
                    DrawMode2 = "InsertAndModify",
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        Filter = Input { Value = FuID { "Fast Gaussian" }, },
                        BorderWidth = Input { Value = 0.0018, },
                        WriteLength = Input {
                            SourceOp = "Polygon1Length",
                            Source = "Value",
                        },
                        MaskWidth = Input { Value = 1920, },
                        MaskHeight = Input { Value = 1080, },
                        PixelAspect = Input { Value = { 1, 1 }, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ClippingMode = Input { Value = FuID { "None" }, },
                        Polyline = Input {
                            Value = Polyline {
                                Points = {
                                    { Linear = true, X = 0, Y = 0, RX = 0.0525445223067593, RY = -0.0416169894737017, PublishID = "Point1" },
                                    { Linear = true, X = 0.157633566920278, Y = -0.124850968421105, LX = -0.0525445223067593, LY = 0.0416169894737017, PublishID = "Point0" }
                                }
                            },
                        },
                        Polyline2 = Input {
                            Value = Polyline {
                            },
                            Disabled = true,
                        },
                        Point0 = Input {
                            SourceOp = "Publish2",
                            Source = "Value",
                        },
                        Point1 = Input {
                            SourceOp = "Publish1",
                            Source = "Value",
                        },
                    },
                    ViewInfo = OperatorInfo { Pos = { -97.176, 91.5131 } },
                },
                Polygon1Length = BezierSpline {
                    SplineColor = { Red = 141, Green = 167, Blue = 243 },
                    CtrlWZoom = false,
                    KeyFrames = {
                        [10] = { 0, RH = { 22.9066666666667, 0 } },
                        [32] = { 1, LH = { 19.0933333333333, 1 } }
                    }
                },
                Publish2 = PublishPoint {
                    CtrlWZoom = false,
                    CustomData = {
                        Path = {
                            Map = {
                                ["Setting:"] = "Templates:\\Templates.drfx\\Edit\\Titles\\"
                            }
                        }
                    },
                    Inputs = {
                        Value = Input { Value = { 0.657633566920278, 0.375149031578895 }, },
                    },
                },
                sRectangle1_5 = sRectangle {
                    CtrlWZoom = false,
                    CtrlWShown = false,
                    Inputs = {
                        Width = Input {
                            SourceOp = "Publish3",
                            Source = "Value",
                        },
                        Height = Input {
                            SourceOp = "Publish3",
                            Source = "Value",
                        },
                        Angle = Input { Value = 45, },
                    },
                    ViewInfo = OperatorInfo { Pos = { -225.629, 8.70111 } },
                },
                Publish3 = PublishNumber {
                    CtrlWZoom = false,
                    CustomData = {
                        Path = {
                            Map = {
                                ["Setting:"] = "Templates:\\Templates.drfx\\Edit\\Titles\\"
                            }
                        }
                    },
                    Inputs = {
                        Value = Input { Value = 0.009, },
                    },
                },
                RenderDot = sRender {
                    ExtentSet = true,
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        GlobalOut = Input { Value = 5000, },
                        Width = Input { Value = 1920, },
                        Height = Input { Value = 1080, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                        Input = Input {
                            SourceOp = "sRectangle1_5",
                            Source = "Output",
                        },
                    },
                    ViewInfo = OperatorInfo { Pos = { -225.629, 53.8624 } },
                },
                Bitmap1 = BitmapMask {
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        EffectMask = Input {
                            SourceOp = "Polygon1",
                            Source = "Mask",
                        },
                        Filter = Input { Value = FuID { "Fast Gaussian" }, },
                        MaskWidth = Input { Value = 1920, },
                        MaskHeight = Input { Value = 1080, },
                        PixelAspect = Input { Value = { 1, 1 }, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ClippingMode = Input { Value = FuID { "None" }, },
                        Image = Input {
                            SourceOp = "Transform2_5",
                            Source = "Output",
                        },
                    },
                    ViewInfo = OperatorInfo { Pos = { -97.176, 124.767 } },
                },
                Transform2_5 = Transform {
                    CtrlWShown = false,
                    Inputs = {
                        Center = Input {
                            SourceOp = "Publish2",
                            Source = "Value",
                        },
                        Size = Input {
                            SourceOp = "Transform2_5Size",
                            Source = "Value",
                        },
                        Input = Input {
                            SourceOp = "RenderDot",
                            Source = "Output",
                        },
                    },
                    ViewInfo = OperatorInfo { Pos = { -225.629, 124.767 } },
                },
                Transform2_5Size = BezierSpline {
                    SplineColor = { Red = 254, Green = 144, Blue = 123 },
                    CtrlWZoom = false,
                    KeyFrames = {
                        [32] = { 0.00100000004749745, RH = { 33.3333333333333, 0.334000000031665 }, Flags = { Linear = true } },
                        [36] = { 1, LH = { 34.6666666666667, 0.667000000015832 }, Flags = { Linear = true } }
                    }
                },
                Line_BG = Background {
                    ExtentSet = true,
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        EffectMask = Input {
                            SourceOp = "Bitmap1",
                            Source = "Mask",
                        },
                        GlobalOut = Input { Value = 5000, },
                        Width = Input { Value = 1920, },
                        Height = Input { Value = 1080, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                        TopLeftRed = Input { Value = 0.535, },
                        TopLeftGreen = Input { Value = 0.535, },
                        TopLeftBlue = Input { Value = 0.535, },
                        Line = Input { Value = 1, }
                    },
                    ViewInfo = OperatorInfo { Pos = { -97.176, 167.178 } },
                    UserControls = ordered() { Line = { INP_Integer = false, LBLC_DropDownButton = true, LINKID_DataType = "Number", LBLC_NumInputs = 6, INPID_InputControl = "LabelControl", LINKS_Name = "Line", } }
                },
                Text_Mask = TextPlus {
                    ExtentSet = true,
                    CtrlWShown = false,
                    NameSet = true,
                    SourceOp = "Text1",
                    Inputs = {
                        ShadingMapping7 = Input { },
                        Thickness7 = Input { },
                        Green7 = Input { },
                        AngleZ7 = Input { },
                        ShadingMappingSize7 = Input { },
                        SizeY7 = Input { },
                        Offset7 = Input { },
                        Pivot7 = Input { },
                        SoftnessX7 = Input { },
                        Properties7 = Input { },
                        AdaptThicknessToPerspective7 = Input { },
                        Position7 = Input { Value = 1, },
                        ImageShadingSampling7 = Input { },
                        AngleY7 = Input { },
                        Alpha7 = Input { },
                        JoinStyle7 = Input { },
                        OutsideOnly7 = Input { },
                        Round7 = Input { },
                        Type7 = Input { },
                        SizeX7 = Input { },
                        Softness7 = Input { },
                        ColorBrush7 = Input { },
                        OffsetZ7 = Input { },
                        ShearY7 = Input { },
                        PriorityBack7 = Input { },
                        ShearX7 = Input { },
                        SoftnessGlow7 = Input { },
                        SoftnessOnFillColorToo7 = Input { },
                        Opacity7 = Input { },
                        SoftnessBlend7 = Input { },
                        Red7 = Input { },
                        SoftnessY7 = Input { },
                        ImageShadingEdges7 = Input { },
                        ColorImage7 = Input { },
                        Overlap7 = Input { },
                        Blue7 = Input { },
                        Size7 = Input { },
                        Shear7 = Input { },
                        Rotation7 = Input { },
                        Level7 = Input { },
                        ShadingMappingAspect7 = Input { },
                        ShadingGradient7 = Input { },
                        PivotZ7 = Input { },
                        ColorFile7 = Input { },
                        ShadingMappingLevel7 = Input { },
                        ImageSource7 = Input { },
                        AngleX7 = Input { },
                        LineStyle7 = Input { },
                        ShadingMappingAngle7 = Input { },
                        EffectMask = Input { },
                        SettingsNest = Input { },
                        ImageNest = Input { },
                        ["Gamut.ColorSpaceNest"] = Input { },
                        ["Gamut.GammaSpaceNest"] = Input { },
                        Layout = Input { },
                        LayoutRotation = Input { },
                        Background = Input { },
                        TransformTransform = Input { },
                        TransformRotation = Input { },
                        TransformShear = Input { },
                        TransformSize = Input { },
                        Enabled1 = Input { Value = 0, },
                        Enabled7 = Input { },
                        Enabled8 = Input { Value = 1, },
                        Properties1 = Input { },
                        Softness1 = Input { },
                        Position1 = Input { },
                        Rotation1 = Input { },
                        Shear1 = Input { },
                        Size1 = Input { },
                        TextText = Input { },
                        TabSpacing = Input { },
                        AdvancedFontControls = Input { Value = 1, },
                        ClearSelectedKerning = Input { },
                        ClearAllKerning = Input { },
                        ClearSelectedPlacement = Input { },
                        ClearAllPlacement = Input { },
                        Internal = Input { },
                        CommentsNest = Input { },
                        FrameRenderScriptNest = Input { },
                        StartRenderScripts = Input { },
                        EndRenderScripts = Input { },
                        Properties8 = Input { },
                        Opacity8 = Input { },
                        Overlap8 = Input { },
                        Thickness8 = Input { },
                        AdaptThicknessToPerspective8 = Input { },
                        OutsideOnly8 = Input { },
                        JoinStyle8 = Input { },
                        LineStyle8 = Input { },
                        Level8 = Input { Value = 0, },
                        Round8 = Input { },
                        Type8 = Input { },
                        Red8 = Input { },
                        Green8 = Input { },
                        Blue8 = Input { },
                        Alpha8 = Input { },
                        ImageSource8 = Input { },
                        ColorImage8 = Input { },
                        ColorFile8 = Input { },
                        ColorBrush8 = Input { },
                        ShadingGradient8 = Input { },
                        ImageShadingSampling8 = Input { },
                        ImageShadingEdges8 = Input { },
                        ShadingMapping8 = Input { },
                        ShadingMappingAngle8 = Input { },
                        ShadingMappingSize8 = Input { },
                        ShadingMappingAspect8 = Input { },
                        ShadingMappingLevel8 = Input { },
                        Softness8 = Input { },
                        SoftnessX8 = Input { },
                        SoftnessY8 = Input { },
                        SoftnessOnFillColorToo8 = Input { },
                        SoftnessGlow8 = Input { },
                        SoftnessBlend8 = Input { },
                        Position8 = Input { Value = 1, },
                        PriorityBack8 = Input { },
                        Offset8 = Input { },
                        OffsetZ8 = Input { },
                        Pivot8 = Input { },
                        PivotZ8 = Input { },
                        Rotation8 = Input { },
                        AngleX8 = Input { },
                        AngleY8 = Input { },
                        AngleZ8 = Input { },
                        Shear8 = Input { },
                        ShearX8 = Input { },
                        ShearY8 = Input { },
                        Size8 = Input { },
                        SizeX8 = Input { },
                        SizeY8 = Input { }
                    },
                    ViewInfo = OperatorInfo { Pos = { 45, 197.671 } },
                },
                Merge1 = Merge {
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        EffectMask = Input {
                            SourceOp = "Text_Mask",
                            Source = "Output",
                        },
                        ApplyMaskInverted = Input { Value = 1, },
                        Background = Input {
                            SourceOp = "Text1",
                            Source = "Output",
                        },
                        Foreground = Input {
                            SourceOp = "Line_BG",
                            Source = "Output",
                        },
                        PerformDepthMerge = Input { Value = 0, },
                    },
                    ViewInfo = OperatorInfo { Pos = { 45, 156.036 } },
                },
                KeyStretcheronForeground = KeyStretcher {
                    CtrlWShown = false,
                    NameSet = true,
                    Inputs = {
                        Keyframes = Input {
                            SourceOp = "Merge1",
                            Source = "Output",
                        },
                        StretchStart = Input { Value = 36, },
                        StretchEnd = Input { Value = 120, },
                    },
                    ViewInfo = OperatorInfo { Pos = { 225, 167.178 } },
                }
            },
        }
    },
    ActiveTool = "MyCallout4111"
}

I have the feeling that it cannot be as hard to do as it seems, but I just don't get it.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.