Or CloudFlare Stream, maybe: https://www.cloudflare.com/products/cloudflare-stream/
Edit to add: Please, for the love of god, do not self-host your video as a static file. There is a LOT of thought that goes into modern video streaming, such as on-the-fly transcoding to different resolutions & bitrates, pre-caching the next few seconds, seeking support, thumbnails, auto-captions, hardware decoder support... absolutely none of that is trivial to implement, but they make a huge difference in end-user UX. You may design your video on some sort of 5k supermac, but a lot of your viewers will be watching them on cheap Androids. The video providers spend a lot of time optimizing their streams and networks for such use cases. You will not, and your users will suffer for it, if you try to self-host. Please, please don't do this.
Signed, that guy who hates it when you're expected to download a 50 meg MP4 to understand a product.
At what scale? (Netflix or a small conference with 1000 users streaming?)
Do you have expertise? (Are you a kubernetes/nixos guru with extensive colocation administration experience or do you want Cloudflare Stream ease of use?)
The closest thing to an answer for the MOST economic and scalable way assumes a lot of devops capability: be your own CDN.
Apart from that, ffmpeg can generate all the files you need and nginx can host them, but make sure you have a hosting company with generous traffic allowance. Putting this on S3 is probably a lot more expensive than renting vimeo, which is a dedicated white label video hosting service.