LinkedIn ratios 1:1, 4:5, 9:16: Sume video-filter crop fractions

LinkedIn lists 16:9, 1:1, 4:5 and 9:16 video. Centered crop fractions for a 16:9 or 9:16 source, plus a short Python function that prints the video-filter ops.

4 min readSume
All posts

To cut a 16:9 LinkedIn master down to 1:1, send video-filter a crop with width: 0.5625 and x: 0.2188. To cut a 9:16 vertical down to 4:5, use height: 0.7031 and y: 0.1484. The Sume crop op takes fractions of the source frame, not pixels, so the numbers hold for any source size. LinkedIn's page lists four ratios for video ads: 16:9, 1:1, 4:5 and 9:16.

Fractions for a centered crop

Computed from the ratio, rounded to four decimals. The compiler rounds the final pixel box to even values for yuv420p.

Centered crop fractions by source and LinkedIn target ratio (LinkedIn page read 2026-10-08)
SourceTargetxywidthheight
16:91:10.218800.56251
16:94:50.27500.451
16:99:160.341800.31641
9:161:100.218810.5625
9:164:500.148410.7031

LinkedIn sizes to expect

LinkedIn lists recommended and maximum sizes per ratio, which matter after the crop.

  • 16:9: 1920x1080 recommended, max 1920x1080, min 640x360.
  • 1:1: min 360x360, max 1920x1920.
  • 4:5: 720x900 recommended, min 360x450, max 1080x1350.
  • 9:16: 720x1280 recommended, min 360x640, max 1080x1920.

Steps

The check call is free, so run it before you pay the $0.02 encode. Import the clip first, since video_url must be a media.sume.com URL. This script prints two crop bodies.

import json

# Centered crop fractions for a source frame, aimed at a target ratio.
def crop(src_w, src_h, tw, th):
    if src_w * th >= tw * src_h:  # source is wider than target
        w, h = tw * src_h / th / src_w, 1.0
    else:
        w, h = 1.0, th * src_w / tw / src_h
    return {"op": "crop", "x": round((1 - w) / 2, 4),
            "y": round((1 - h) / 2, 4),
            "width": round(w, 4), "height": round(h, 4)}

print(json.dumps({"ops": [crop(1920, 1080, 1, 1)]}))
print(json.dumps({"ops": [crop(1080, 1920, 4, 5)]}))

Paste each ops into a POST /v1/video-filter/check body with your video_url, then send the same body to POST /v1/video-filter with an Idempotency-Key. The filter output keeps the geometry of the source except what the crop changes, and the source clip must be 300 seconds or shorter. A 9:16 source at 1080x1920 cropped to 4:5 gives 1080x1350, which is LinkedIn's stated 4:5 maximum.

Checking a crop before you pay

The unbilled POST /v1/video-filter/check returns valid, any diagnostics, the compiled filter names and an estimate. Send your ops with the clip URL and read the diagnostics before you submit the $0.02 encode. A crop with x + width above 1 returns video_filter_crop_out_of_bounds, and a side smaller than 0.05 does too.

For a subject that is not centered, change x or y. If the product sits in the left third of a 16:9 frame and you want a 1:1 crop, x of 0.05 with width 0.5625 keeps it in view. Look at a still from video_inspect to find the subject and read its position as a fraction of the frame width.

You can chain up to eight ops in one program, so a dim plus a crop is one job. That keeps the cost at $0.02 for the encode.

Budget and detail

Remember that the table assumes a source that really is 16:9 or 9:16. If your clip is 1920x1088 or has black bars baked in, the fractions will be off by a few pixels, and the bars may land inside the crop. Inspect a still first, and trim the bars with a crop op that starts inside the picture, then chain the ratio crop in the same program if you want one job.

What Sume does not do

Crop is centered here only because I computed it that way. Sume does not find the subject for you, so choose x and y by looking at a still. Crop also does not scale. There is no dedicated resize tool, so use the Timeline output size or trim output if you need exact pixels.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume