3:4 portrait clip to 9:16: crop 0.75 of the width, scale to 1080x1920

A 3:4 portrait clip is already tall. Crop 0.75 of its width (x 0.125), keep full height, scale to 1080x1920. Numbers and the video-filter request.

4 min readSume
All posts

A 3:4 portrait clip (1080x1440) is the easiest case: crop to 0.75 of the width, full height, starting at x = 0.125, and you have an exact 810x1440 9:16 frame. Then scale=1080:1920 in the same video-filter request takes it to 1080x1920 with an upscale of only 1.333x.

The numbers

9/16 of 1440 is 810, and 810 / 1080 = 0.75 exactly, so no rounding error enters the aspect. Centered, x = 0.125 and the compiled offset is 134 px (135 rounded down to even).

Crop program for a 1080x1440 source (arithmetic from the video-filter docs, read 2026-10-05)
ItemValue
Source frame1080x1440 (3:4)
crop x / y0.125 / 0.0
crop width / height0.75 / 1.0
Compiled crop (rounded down to even pixels)810x1440 at x=134, y=0
Scale to 1080x19201.333x wide, 1.333x tall
Share of the source pixels keptabout 75%

What you lose, and what you keep

You discard 12.5% of the width on each side. For a person filmed upright that is usually background. For a tall product with a label that wraps the sides, it may not be. Use the free POST /v1/video-filter/check to confirm the program is valid, then pull a still with video frames from the encoded result to see the edges before you caption it.

Because the ratio change is small, this is the case where cropping beats blur-fill: a 1080x1440 frame on a 1080x1920 canvas would leave only 240 rows of backdrop above and 240 below, and the crop loses little.

# 1) free contract check, no job, no charge
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/portrait.mp4",
    "ops": [{"op":"crop","x":0.125,"y":0.0,"width":0.75,"height":1.0}],
    "filtergraph": "scale=1080:1920,setsar=1"
  }'

# 2) same body to /v1/video-filter, with an Idempotency-Key header, to encode

Notes

At the documented public rate the encode is $0.02 per job and the check is free; confirm the live rate in GET /v1/catalog. The clip must already be a media.sume.com file of your workspace, so import it first with POST /v1/media-imports, and send an Idempotency-Key on the encode.

  • Source up to 300 seconds; longer clips need a video trim first.
  • The output keeps the source frame rate and audio.
  • If the clip plays sideways, it is a rotation problem, not a ratio problem: fix that before cropping.

Crop, cover, contain: the same clip three ways

A 1080x1440 portrait clip can reach 1080x1920 by three routes. Crop then scale: you get an exact 810x1440 window, enlarged 1.333 times, and the picture fills the frame. Timeline fit: "cover" produces essentially the same crop for you, without the explicit numbers. Timeline fit: "contain" keeps the whole 1080x1440 picture and leaves 240 empty rows above and 240 below, which look like bars. fit: "blur" fills those rows with a blurred copy.

Because the loss in this case is only 12.5% of the width on each side, cover or crop is usually the right call. Choose contain or blur when something important sits at the edges, such as a product label or a logo.

  • After the encode, the job result gives a new media.sume.com video_url (never the source), so you can pass it straight to captions or Timeline.
  • Poll GET /v1/jobs/:id/status, then GET /v1/jobs/:id/result, or send mode: "sync" to wait up to 30 seconds for a 200.

If the portrait clip is a different size

The 0.75 width fraction belongs to the 3:4 ratio, not to 1080x1440 in particular. A 1536x2048 clip uses the same fractions: 9/16 of 2048 is 1152, and 1152 / 1536 is 0.75. A 768x1024 clip also gives 0.75. Only the pixel results change: the compiler floors to even numbers, so a 1536x2048 source compiles to a 1152x2048 window at x = 192 before the scale to 1080x1920, a reduction of about 0.94 times.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume