Question about text/image animation in a specific way

Hello everyone, beginner here and this is my first post :slight_smile:

I’m editing a video where I want to add text above people’s heads (like in online videogames where you see the names of players above their heads) which follows them around as they move. I also have a green dot as an image, which I also want to make it so it stays over people’s heads as they move. So, essentially, I want to animate an image and a piece of text in that specific way.

How can I do this? I know that a simple text preset won’t cut it, because of the way people move in the video. Thank you in advance!

I see there as being 2 basic ways to do it in Shotcut.

Option 1: Add a Motion Tracker filter on the face of the person talking by adding the filter to your video track with the people. Once the filter is added, drag the green tracking box around the talking face and click Analyze to get started. It can take some time for the Motion Track to do its work. Then the resulting data can be used to tie to various filters via keyframes. You can add a Size, Position & Rotate filter to your speech bubble image (perhaps on another video track above your talking people footage), causing its position to follow along with the talking head. You can offset it from the head using a second Size, Position & Rotate filter if one filter doesn’t do the trick.

Option 2: Use Glaxnimate to both draw and animate the speech bubble with a tail that points to the head of the person talking. This is a lot more advanced, but with Glaxnimate you can animate shapes with nodes, colors, lines, text, etc - as in your favorite vector graphics software. I don’t have experience doing this, but I get the impression a lot is possible with Glaxnimate - kinda like Flash animation back in the day or more modern equivalents.

For the speech bubble itself, you could use a transparent PNG for the bubble if you don’t want to try to learn Glaxnimate (do an image search for one or draw it yourself with an image editor), and add a text:simple filter to it to write whatever text you want. You can show and hide the bubbles when each character is talking, or if there aren’t too big of pauses, just leave the bubbles always there and change the text inside them with keyframes.

Sorry, this is quite a generic, broad answer. It would take quite some time to create a step-by-step tutorial, but maybe you can start by looking through the list of filters to imagine different possibilities - Motion Tracker, Text:Simple and more. Or maybe someone else will answer more thoroughly than I did.

1 Like

Playing around with this really quick, I’m not sure the text can be changed over time with a single Text:Simple filter. Someone else might know this for sure. If that’s the case, it might be necessary to add tons of filters for each line of dialog, which would be lame. Instead of that mess, I’d opt for putting all the text on it’s own video track using the Open:Other → Text option rather than by adding Text filters to the speech bubble. So you’d have at least 3 video tracks. 1) your talking people video, 2) your speech bubbles, 3) and your text above those 2, sized to appear inside the bubbles. The position of #2 and #3 could be controlled by a motion tracker that is connected to #1 by outlining a face with the tracker rectangle.

I’m not sure what the green dot is, but it could be positioned over the head in the same way, using the Motion Tracker filter.

1 Like

Another way to animate the speech bubble would be to form it using two PNG shapes (or drawn in Glaxnimate). The first shape is a rounded rectangle or ellipse. The second is a very long triangle or curved tail. They could move independently using Position, Size & Rotate filters on each, with keyframes over time. Also could use the Motion Tracker on one or both. I attached an example file you can use if it is helpful. The tail has a white top (no black border) so you can put it on top of the rounded rectangle, and it will appear as if they are one shape, if they overlap just right.

1 Like

Using an image for the green dot is not really necessary. You can create one in Shotcut and also add the text on the same clip.

Here’s an example of how I interpret your request:

If it looks like what you want to do, follow the instructions below. It may seem like a lot of steps, but it’s not so bad. When you get the hang of it the entire operation can be done in a couple of minutes.

Create your green Dot and the text:

  • Add you main video clip on track V1 in the Timeline.
  • Add a color clip (green) on Track V2
  • Make the duration of the color clip as long as your main video clip.
  • Add a Crop: Rectangle filter to the green clip.
  • Set the size you want for your green dot. In my case, 50 X 50 works well.
  • Set Corner radius to 100% to create a circle.
  • Click on the Transparent button.
  • Activate a 2x2 grid in the Preview panel and snap the green dot to the center of the screen.
  • Add a Text: Simple filter BELOW the Crop: Rectangle filter.
  • Edit the text, color, font and move the text next to the green dot (or wherever you want the text to be).
  • Add a Size, Position & Rotate filter, and use it to position the dot and the text above the person’s head. It will also be used to load the Tracker keyframes.
  • SAVE your project.

Add the Motion Tracker

  • Temporarily hide track V2.
  • Select your main clip on Track V1
  • Add a Motion Tracker filter.
  • You can change the Name of the tracker if you want.
  • Leave the Algorithm parameter as it is. If you don’t get the results you want, you can experiment with the other algorithms later.
  • Position and resize the tracker green rectangle over the person’s head.
  • Click the Analyze button.
  • When Analyze is done, play the video to check if the green rectangle follows the persons head throughout the length of the clip. If not, experiment with other algorithms. You might also need to cut your clip in 2 or more sections and use a tracker for each section.
  • If you are satisfied with the trajectory of the green rectangle, SAVE your project again and un-check Show preview.
  • Un-hide Track V2.
  • Select the clip on Track V2 and select the Size, Position & Rotate filter.
  • Click on the Load Keyframes from Motion Tracker button.
  • In the Motion Tracker drop-down list, choose your tracker (if you didn’t give a name to your tracker, choose Tracker 1).
  • In the Adjust drop-down list, choose Relative Position.
  • Click Apply.
  • Play the video to see the result.

Quickly made video tutorial:

EDIT: You can use multiple Trackers in the same project if you want.

Simply add more Motion Tracker to your main video, and give them different names.

Then add one color clips (for each new tracker) on tracks V3, V4 and so on.

NOTE: It is possible that when you try to Load the new trackers on your additional color clips the Load Keyframes window is empty.

If it happens, SAVE your project, then close and relaunch Shotcut and your project.

Good luck!
If anything goes wrong, don’t hesitate to come back here to ask more questions.
If everything goes well, also come back to let us know.


Thank you from the bottom of my heart! First of all, you interpreted my request perfectly, as this was exactly 100% what I wanted to do! I can’t thank you enough for walking me through the whole process, even including pictures, let alone posting an entire video to help me. Never have I been helped so thoroughly and coherently by a person on the Internet and I appreciate it tremendously.

I’ve done everything you described, it all worked flawlessly and my project is now complete! The part of my project which I needed support for was only 9 seconds long. My video’s quality was bad (to put it mildly), especially the lighting, so I had to experiment with all motion tracking algorithms. I ended up splitting my video into 3 parts, each with a different motion tracker. The Multiple Instance Learning algorithm worked best for me in all 3 instances.

For posterity, the first time I split my video and set up a second motion tracker on the second part, I noticed a bug in Shotcut. Specifically, when I loaded keyframes from motion tracker (of course from Tracker 2 this time and having disabled Tracker 1 from Filters) and applied, the dot/text was starting from the position of Tracker 1 (from the previous part of the video). To resolve this, I opened the “Load Keyframes from Motion Tracker” window again and hit the “Reset” button. Then I configured everything again and it all worked smoothly.

I have to say, even if nothing of what you said had ultimately worked for me, I would still greatly appreciate you taking all this time to help. I really wish every single person on the Internet was as friendly and supportive as you.
+++ rep!

1 Like

Thank you very much for taking the time to answer my request! The Motion Tracker was exactly what I needed for my project! I didn’t need a speech bubble for the specific project, but I’m sure that I’ll need it in future projects. In fact, you gave me a very nice idea and I downloaded Glaxnimate to experiment with what it has to offer!

Thank you for this information and especially for taking the time off your schedule to make something that I can use! Even though the speech bubble was not what I was going for in the specific project I needed support for, it will definitely be helpful in future projects!

You’re welcome @Riverspoke.
Glad I could help.
And thanks for the nice feedback. It’s appreciated.

1 Like