One 1920x1080 master to TikTok 9:16, 1:1 and 16:9 ads: $0.04

TikTok's page lists three ratios with minimum sizes. From one 1920x1080 clip, two video-filter crops make 9:16 and 1:1 at $0.02 each. The fractions are shown.

5 min readSume
All posts

From one 1920x1080 master you need two Sume video-filter crops to cover TikTok's three non-Spark ratios: a 9:16 crop with width 0.3164 and height 1, and a 1:1 crop with width 0.5625 and height 1. The 16:9 version is the master itself. Each filter job is $0.02, so the two crops cost $0.04. TikTok's page lists 9:16 at 540x960 or larger, 1:1 at 640x640 or larger, and 16:9 at 960x540 or larger (read 2026-10-08).

The crop fractions

Video filter crop takes x, y, width and height as fractions of the source frame. Width and height must be between 0.05 and 1, and x+width and y+height cannot pass 1. The compiler rounds to even values for yuv420p, so the output may differ from the exact fraction by a pixel.

Crop of a 1920x1080 source for each TikTok ratio, computed
TargetCrop width (fraction)Crop height (fraction)Pixels before roundingTikTok minimum
9:160.31641607.5 x 1080540x960
1:10.562511080 x 1080640x640
16:91 (no crop)11920 x 1080960x540

Checking the minimums

The 9:16 crop is 607.5 wide, which rounds to 606 or 608 after the even-value rule, and 1080 tall. That clears TikTok's 540x960 minimum on both edges (606 is above 540 and 1080 is above 960). The 1:1 crop is 1080x1080, above 640x640. The 16:9 master is above 960x540.

If you want an exact 1080x1920 file for the vertical ad, a crop of the 1920x1080 frame cannot give it without scaling up, because the crop is only 1080 tall. Add a scale filter to the filtergraph, which is on the allowlist, or let Timeline do it: its default is 1080x1920 and fit: cover fills the frame.

The two filter calls

Use POST /v1/video-filter/check first, which is free, then submit with an Idempotency-Key. The source must be a media.sume.com clip of 300 seconds or less. The body for the 9:16 case:

{
  "video_url": "https://media.sume.com/artifacts/artf_demo/master.mp4",
  "ops": [
    { "op": "crop", "x": 0.3418, "y": 0, "width": 0.3164, "height": 1 }
  ]
}

Where the x offset comes from

A centered crop starts at x = (1 - 0.3164) / 2 = 0.3418. Move x left or right to follow a face; x + width must stay at or below 1, so x can range from 0 to 0.6836. For the 1:1 crop, centered x is (1 - 0.5625) / 2 = 0.21875. Related crop fraction tables are in this post.

Total cost is 2 x $0.02 = $0.04, with no charge for the check calls.

Check the program before you pay

POST /v1/video-filter/check runs the same schema, op and source checks as the encode and returns diagnostics instead of a 400. It creates no job and reserves no credits. A valid response has valid true, encode not_run, and an estimate. Run it for both crops first. A program that passes can still fail on the worker for reasons such as memory or time, in which case you get a structured job error and not a silent bad file.

The source must be a media.sume.com clip of this workspace and 300 seconds or less. Off-host URLs are rejected, so import the master with POST /v1/media-imports first. Each crop returns a new MP4 artifact and leaves the master unchanged, so the 16:9 version is the master itself and needs no job. If you need the 9:16 file at exactly 1080x1920, send the 606x1080 result through a Timeline slot with fit cover, or add a scale filter to the filtergraph, since scale is on the allowlist.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume