720p landscape to a TikTok 9:16 ad: a 405-wide crop misses 540x960
Cropping 16:9 to 9:16 keeps 31.6% of the width. A 1080p source gives about 608x1080 and clears TikTok's 540x960 minimum; 720p gives 405x720 and does not.

Crop a 16:9 clip to 9:16 and you keep about 31.6% of its width at full height. From 1920x1080 that is about 608x1080, which clears TikTok's 540x960 minimum for 9:16 ads. From 1280x720 it is 405x720, which does not. So the source resolution decides whether a crop can be an ad, before you pick any tool.
The numbers
A 9:16 strip is 9/16 of the height wide. The table is arithmetic from the page's minimum, not output from a Sume job.
| Source | 9:16 strip | Clears 540x960? |
|---|---|---|
| 1280x720 | 405x720 | No |
| 1600x900 | 506x900 | No |
| 1920x1080 | about 608x1080 | Yes |
| 2560x1440 | 810x1440 | Yes |
| 3840x2160 | about 1215x2160 | Yes |
Check the crop for free
Sume's video filter has a crop op with x, y, width and height as fractions of the source, and a /v1/video-filter/check route that validates the program without creating a job, reserving credits or using the encoder. The encode itself is $0.02 per job in the doc. The check returns valid, any diagnostics and an estimate. The source must be a media.sume.com clip of up to 300 seconds, so import first.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://media.sume.com/artifacts/artf_demo/wide.mp4","ops":[{"op":"crop","x":0.3418,"y":0,"width":0.3164,"height":1}]}'Choosing the source tier first
Work backwards from the minimum. If the final ad must be at least 540x960 and you plan to crop a 16:9 source, the source needs to be at least 960 pixels tall, which in practice means 1080p. A 720p source cannot reach it by cropping alone, since the crop only removes pixels.
That changes the generation request. If you will crop later, ask the model for 1080p, and check which rows offer it: Seedance 2.5, Wan 3.0, Kling 3 and Gemini Omni Flash 1.1 list 1080p in the Video Router doc. Better still, if every Sume row you would use lists 9:16, request 9:16 directly and skip the crop.
The crop is useful for footage you did not generate, such as a recorded demo. There the source is fixed, and the table tells you quickly whether a vertical ad can come out of it at all.
When to regenerate instead
The check proves the program is valid, not that the result is big enough; compute the size yourself first, as in the table. If your source is 720p, regenerating at 9:16 with the model's own tier is cleaner than cropping and upscaling. The reframe guide compares the options, and a crop also drops 68% of the frame, so a subject at the edge may be lost.
Sources
Related posts
More in Media tools
- How to turn an AI image into an og:image link preview in Python
Ideogram 4.5 on Sume makes a 2:1 image at 1K as 1440x720. A Pillow crop to your link-preview size, plus the og:image:alt tag Open Graph asks for.
- Burn in captions from your own word timings with Sume (no STT)
Send words or cues to Sume video captions and it burns your text at your times with no speech-to-text. Send only one text input per request.
- Can a YouTube Short be square? Rendering 1080x1080 in Sume Timeline
YouTube says Shorts can be square or vertical. How to export 1080x1080 from Sume Timeline, what fit does to a 9:16 source, and the 3-minute ceiling.
- Can a YouTube Shorts episode run 4 minutes? Split with source_in
No: the Shorts series limit is 180 seconds. Split a long cut into two parts with Sume Timeline audio.source_in and video source_in, one render per part.
Written by Sume