Replicating images isn't really best practice. Images are meant to be ephemeral on the server. Dockers pattern is to repull the images if they are needed, and that only takes a few seconds. Saving the images IMO would just be a waste of space.
If you are afraid the images will be gone someday, the proper way to handle this is to use a docker registry as a proxy. So you make your own docker registry, like your.tld/registry
and then set it in proxy mode. Then when you pull your images you set docker to pull from your registry. If it's found it will use your local data otherwise it will pull through from the parent registry, and serve the docker image to your client. For backup then you backup the registry's volume.
That fits within the pattern of docker. Your clients come up, query the local registry, and it will serve your containers. Your server remains ephemeral.
You can get away with a pretty low bitrate for most. As others have said, set the egress upload limit in the app to whatever you prefer, and just be ready to transcode.
Never charge for access to your server in any way. That is officially 100% illegal. If you can't do it without charging, you can't do it