Bug - Text:Simple is immune to GPU effects

Windows 10 Pro 22H2, Shotcut 23.06.14, Core i7 9700K using integrated HD 630 GPU

For many things in my videos I use a second video layer on top of the main video content. For opening and closing titles, I use Open Other - Color to create a transparent image, then put text on it, and add a video fade out to make the titles fade. For captions, I have a PNG that has a semi-transparent grey bar across the bottom, with the rest transparent; I put text over the bar, and apply Size, Position & Rotate with keyframes to raise the entire thing (grey bar and text) up from the bottom, hold for a couple of seconds, then lower it back out of the way.

In 23.06.14, with GPU processing disabled, this works the same as it did in 22.12.21, which is what I’ve been using to this point. The fade or SP&R effect affects everything on the second video layer, which is correct.

But if I do all the same steps with GPU processing enabled and using the GPU versions of these effects (video fade out for titles, Size & Position for captions), the text is unaffected (and this is consistent whether previewing the video within Shotcut or exporting it to a file). For the captions, the Size & Position filter does raise and lower the image with the semi-transparent bar - it just doesn’t move the text. And for the video fade out, the text does not fade (but any image that is part of the second video layer does fade).

I have created a sample to show both the correct and incorrect behaviours for the caption example. Both halves are made from the same project - I created the project and used the CPU SP&R filter, exported it, deleted that filter, set up the GPU S&P filter the same way, exported it, and then put the two files together. I’ve uploaded it to Youtube and you can see it here (note that this video may not stick around forever): Bottom caption comparison - Shotcut 23.06.14 - YouTube

I can’t say for certain if this only affects Text: Simple or if there are other effects that have the same problem; Text: Simple is the only one I’ve found so far that has this issue but I haven’t tried many others. Likewise, I can’t say for certain if all GPU effects show this bug; these are the only GPU effects I’ve tested for this.

This does not work because all GPU filters are supposed to be before non-GPU filters even though this can be defeated. But if you simply add filters in the order desired, you will see that Shotcut places the GPU Size & Position before the Text: Simple.


This restriction is due to the architecture. There are two workarounds: 1) Use Size, Position & Rotate instead; or 2) use the same positioning animation on both Size & Position (GPU) for the PNG and within the Simple: Text.

In order to get the Fade In/Out Video with opacity to work, I have to use the loophole to position the Fade In Video (GPU) after the text:

1 Like