Compress a video for a specific app or service

Seven pages, one compressor. Each opens at a ceiling that suits where the video is going, and each explains what that platform does to the file after you hand it over, which is usually the part that decides how it ends up looking. If you already know the number you need, the size pages are the shorter route.

Pick where it is going

The figure on each card is the ceiling the tool opens with on that page. It is a starting point, not the platform's limit — type your own number if you know it.

What all of these have in common

The platforms here split into two kinds, and it is worth knowing which one you are dealing with before you touch a setting. Discord, Slack and an email attachment keep the file you gave them and hand the same bytes back out; the limit is a hard wall and your compression is the last thing that happens to the video. X, Reddit and WhatsApp do the opposite. They decode your upload and encode it again to a budget of their own, and what anybody watches is that second encode. Telegram does either, depending on which of its two send buttons you press.

Where the platform re-encodes, the instinct to compress as hard as possible is wrong. Whatever you hand over is the ceiling on what anyone can receive and the platform will lower it from there, so compress gently, toward the top of what is allowed. A file already full of blocking gives the second encoder your artefacts to preserve instead of your picture to encode, and it preserves them faithfully.

What none of them lets you do is avoid the trade. A file size is a bitrate multiplied by a duration, and if the duration is fixed then something has to give. Compressing first is how you choose which thing gives — resolution, frame rate, length, or the fine detail in a frame — rather than letting a platform choose for you at a quality level set against its bandwidth bill.

The last thing they share is that the obvious way to solve this makes it worse. A free compression website is a stranger's server, and the videos people most need to shrink tend to be gameplay capture with a desktop behind it, a work screen recording, or something sent in a chat they chose for its privacy. Every page here runs FFmpeg compiled to WebAssembly inside the tab, on your own CPU, and transmits nothing. How that works, and how to check it.

If the destination is not the problem