How to Compress Video for WhatsApp Business API (Under 16 MB)

Your WhatsApp automation works right up until someone records a 40-second clip on a new phone. The n8n run goes red, the WhatsApp node throws a media error, and the message never sends. The culprit is almost always file size, not your workflow logic.
Quick answer: To compress video for WhatsApp, you have to get the file under the WhatsApp Business API's 16 MB media limit. Add an API compression step before your WhatsApp send node that re-encodes the video to H.264 at 720p with a target bitrate, so any user-recorded clip fits under 16 MB before it's sent.
What is the WhatsApp Business API video size limit?
The WhatsApp Business API (Cloud API) caps video uploads at 16 MB. That's a hard limit on the media endpoint, not a soft warning. Anything larger gets rejected before the message is ever queued.
For reference, here's how the Cloud API media caps break down:
| Media type | Max size |
|---|---|
| Image | 5 MB |
| Video | 16 MB |
| Audio | 16 MB |
| Document | 100 MB |
| Sticker | 100 KB (static) / 500 KB (animated) |
A modern phone shoots 1080p at 30fps around 8 to 12 Mbps. Do the math: a 20-second clip lands near 25 MB, and a minute of footage blows past 60 MB. So most real user-generated video fails the 16 MB check by default.
Why compressing "in the workflow" usually breaks
Conventional wisdom says you can just resize the file inside your automation tool. Most builders try exactly that, then hit a wall. But the problem isn't your n8n or Make setup, it's that those tools don't ship a real video encoder.
n8n's community threads are full of the same question: someone wants to shrink a recorded video before the WhatsApp node, and the only answers are "install FFmpeg on your host" or "run a separate microservice." Neither is a copy-paste step. Make and Zapier have no native FFmpeg action at all. Running FFmpeg yourself means managing binaries, versions, and a server that stays up long enough to finish long jobs, which is the same trap you hit trying to run FFmpeg on Supabase Edge Functions.
The fix isn't a bigger server. It's not running the encoder yourself at all. You call a video API that does the transcode and hand the smaller file to WhatsApp.
How to compress video for WhatsApp: the CLI vs one API call
Here's the raw FFmpeg command that gets a clip comfortably under 16 MB. It scales down to 720p, encodes H.264 at CRF 28, and drops the audio bitrate:
ffmpeg -i input.mp4 \
-vf "scale=-2:720" \
-c:v libx264 -crf 28 -preset medium \
-c:a aac -b:a 96k \
output.mp4
CRF 28 targets a quality level, not an exact size, so a long clip can still creep over 16 MB. When you need a guaranteed ceiling, calculate a target bitrate from the duration and run two-pass. For a 60-second clip aiming at 15 MB: 15 MB is 120 megabits, so roughly 2 Mbps total. Subtract audio and set video around 1900k.
That works on your laptop. It does not work as a node in a cloud workflow, because there's no FFmpeg binary sitting in n8n or Make. FFmpeg Micro is the FFmpeg API: the same transcode as one HTTP call, with no servers to run and no FFmpeg to install.
curl -X POST https://api.ffmpeg-micro.com/jobs \
-H "Authorization: Bearer $FFMPEG_MICRO_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "https://your-storage/user-video.mp4",
"operation": "transcode",
"options": {
"video_codec": "h264",
"scale": "720",
"crf": 28,
"audio_bitrate": "96k"
}
}'
You submit the job, poll or take a webhook, then download the output URL. Check the docs for the exact field names and the full option set. The point is the shape: one call in, a smaller file out, no infrastructure between them.
Wiring it into n8n or Make
The pattern is the same across n8n, Make, and Zapier:
- Trigger receives the user's video (webhook, Google Drive, S3, whatever your bot uses).
- An HTTP Request node calls the FFmpeg Micro transcode endpoint with the video URL.
- Wait for the webhook callback, or poll the job until status is done.
- Pass the returned output URL to the WhatsApp Business API send node.
Now every clip that enters the pipeline leaves under 16 MB, and the WhatsApp node stops throwing size errors.
Common pitfalls when compressing for WhatsApp
- Targeting quality instead of size. CRF gives predictable quality, not a predictable file size. If you need a hard 16 MB ceiling on unpredictable user footage, use a target bitrate, not CRF alone.
- Forgetting the audio track. A 320k audio stream eats into your byte budget. Drop voice-note audio to 96k or lower; nobody notices on a phone speaker.
- Leaving resolution at 1080p. WhatsApp video plays on a phone screen. Scaling to 720p (or 480p for talking-head clips) cuts size hard with no visible loss.
- Ignoring the format. WhatsApp expects H.264 video with AAC audio in an MP4 container. A raw
.movfrom an iPhone can pass the size check and still fail to play. Always re-encode to H.264/AAC. - Not handling the failure. When input is corrupt or the request is malformed, the API returns an error status on the job instead of a file. Branch on it so a bad upload doesn't silently drop the message.
When not to use a compression step
If your bot only ever sends the same pre-made marketing clips, compress them once by hand and store the small versions. You don't need an API call per send. And if a video genuinely can't survive the squeeze to 16 MB at watchable quality, say a 10-minute recording, don't force it. Upload it somewhere and send a link in the WhatsApp message instead. The 16 MB cap is a real constraint, not something to fight past with an unwatchable 240p file.
FAQ
What is the WhatsApp Business API video size limit?
16 MB per video on the Cloud API media endpoint. Files larger than that are rejected at upload, so you have to compress before you send.
How do I compress a video under 16 MB for WhatsApp?
Re-encode to H.264 at 720p with AAC audio and a target bitrate sized to the clip's duration. On a server you'd run FFmpeg; in an automation, call a video API that does the transcode and returns a smaller file.
Can n8n or Make compress video before the WhatsApp node?
Not on their own. Neither has a native FFmpeg action. Add an HTTP Request node that calls a video API to compress the file, then feed that output into the WhatsApp send node.
What video format does WhatsApp require?
H.264 video and AAC audio in an MP4 container. A .mov or other format may need re-encoding even when it's already under 16 MB.
How is this different from compressing video for email?
Same idea, different cap. Email providers like Gmail and Outlook enforce a 25 MB attachment limit, which we cover in compressing video for email. WhatsApp's ceiling is lower at 16 MB, so you compress harder.
Drop a real user-recorded clip into the free tier and watch it come back under 16 MB. When it fits your WhatsApp flow, sign up free and wire the same call into your n8n, Make, or Zapier pipeline.
About Javid Jamae
Founder & CEO at FFmpeg Micro
Javid is a software engineer, author, and entrepreneur with over 25 years of professional software development experience across enterprise, startup, and consulting environments. He founded FFmpeg Micro to make video processing accessible to developers through a simple, automation-first REST API.
You might also like

Auto-Process Video Uploads in Supabase Storage with FFmpeg Micro
Automate video compression and thumbnail extraction on Supabase Storage uploads using Edge Functions and the FFmpeg Micro API.

Automate Shopify Product Videos with FFmpeg Micro
Automate Shopify product video compression, format conversion, and thumbnail generation with FFmpeg Micro API and webhooks. No manual video editing.

How to Process Video in Retool with FFmpeg Micro API
Add video processing to Retool internal tools using the FFmpeg Micro REST API. Step-by-step setup for transcoding, compression, and format conversion.
Ready to process videos at scale?
Start using FFmpeg Micro's simple API today. No infrastructure required.
Get Started Free