Crop a 21:9 Seedance clip for TikTok: 1120x630 passes, 630x630 misses

A 720p 21:9 Seedance frame is 1470x630. Cropped to 16:9 it is 1120x630, above TikTok's 960x540 floor. Cropped to a square it is 630x630, ten pixels short.

5 min readSume
All posts

Yes for 16:9, no for a 720p square. A 21:9 Seedance frame at 720p is 1470x630. Cropping its width to 1120 pixels gives 1120x630, which is above TikTok's 960x540 minimum for 16:9 ads. A square crop is only 630x630, and TikTok's 1:1 minimum is 640x640.

What TikTok lists

The TikTok Ads Help page for in-feed video specifications lists three ratios for non-Spark ads: 9:16 at 540x960 or more, 16:9 at 960x540 or more, and 1:1 at 640x640 or more. It does not list 21:9, so an ultrawide master has to be cropped before it is uploaded. Seedance 2.5, 2.0, Fast and Mini and the MiniMax H3 models take 21:9 on Sume; Wan 3.0, Kling 3 and Omni do not, per the video catalog.

The numbers below are for non-Spark in-feed ads only. The page gives different fields for Spark Ads, so check it again if your ad is a Spark Ad.

Crop results by tier

The source sizes are Seedance's 21:9 sizes on Sume. Output width is the source height times the target ratio. The width fraction is what you send to the crop op in video filter, which takes fractions of the source frame.

Crops of a Seedance 21:9 frame against TikTok minimums (read 2026-10-07)
TierSource16:9 cropFraction1:1 cropFraction
480p992x432768x432 (misses 960x540)0.7742432x432 (misses 640x640)0.4355
720p1470x6301120x630 (meets)0.7619630x630 (misses by 10)0.4286
1080p2205x9451680x945 (meets)0.7619945x945 (meets)0.4286

The check in Python

This script has no network calls. It reproduces the table, so you can change the sizes or the minimums.

SRC = {"480p": (992, 432), "720p": (1470, 630), "1080p": (2205, 945)}
TARGETS = {"16:9": (16, 9, 960, 540), "1:1": (1, 1, 640, 640)}  # TikTok minimums

for tier, (w, h) in SRC.items():
    for name, (rw, rh, min_w, min_h) in TARGETS.items():
        out_w = round(h * rw / rh)
        frac = out_w / w
        ok = out_w >= min_w and h >= min_h
        print(f"{tier} {w}x{h} -> {name}: {out_w}x{h}, width fraction {frac:.4f}, "
              f"{'meets' if ok else 'misses'} TikTok minimum")

What the crop costs

Video filter is $0.02 per encode, and its /v1/video-filter/check endpoint is free. The doc says the compiler rounds crop values to even numbers for yuv420p, so run the check first and read the output size with video inspect before upload. A fraction of 0.7619 on 1470 pixels is 1119.99, which should land on 1120.

A 10-second Seedance 2.0 clip in 21:9 costs $1.78 at 480p, $3.80 at 720p and $8.55 at 1080p. Add $0.02 for the crop. At 720p a native 16:9 10-second clip is 1280x720 and costs $3.78, so cropping a 21:9 master is not cheaper than rendering 16:9 directly. Crop when you already have the ultrawide master, or when you want both cuts from one take.

Running the crop on Sume

  • Import the generated clip so it is on media.sume.com for your workspace. Video filter refuses off-host URLs.
  • Send the crop op to POST /v1/video-filter/check with x 0.119, y 0, width 0.7619 and height 1 for a centered 16:9 window. The check is unbilled and returns diagnostics.
  • Submit the same body to POST /v1/video-filter with an Idempotency-Key, then poll GET /v1/jobs/:id/status and read GET /v1/jobs/:id/result for the new video_url.
  • The source stays unchanged, so you can crop the same master a second time for another placement.

Rule of thumb

  • For 16:9 from 21:9, start at 720p or higher.
  • For a square from 21:9, start at 1080p. At 720p the height is 630, and that is ten pixels under TikTok's floor.
  • For 9:16 from 21:9, do not crop. The strip is 354 pixels wide at 720p.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume