ffmpeg overlay image moving is choppy
The overlay filter draws on each base or 'main' frame as given; it does not create new frames.

In your command,

ffmpeg -hide_banner -y -loop 1 -r 2 -i 'bg.png' ...


The -r 2 sets the main video's framerate to 2, hence the result.

Use

ffmpeg -hide_banner -y -loop 1 -framerate 30 -i 'bg.png' ...