Crop a 2:1 landscape phone recording to 9:16: width 0.28125

A 2:1 (18:9) landscape clip needs width 0.28125 for 9:16: exact at 1920x960 (540x960), 606 px at 2160x1080. The offset, the rounding and the full request.

5 min readSume
All posts

A 2:1 landscape clip (also written 18:9) becomes 9:16 with a crop width of 0.28125 and an x offset of 0.359375. The height stays at 1. At 1920x960 the strip is 540x960, exactly 9:16. At 2160x1080, a size some screen recorders write for 18:9 displays, it is 606x1080 after rounding.

The arithmetic

9:16 is 0.5625. Divide by the source ratio of 2 and you get 0.28125, which is 9/32 and has an exact binary form, so no precision is lost in the six-decimal value the compiler writes. The centred offset is (1 - 0.28125) / 2 = 0.359375. Sume rounds crop sides and offsets down to even pixels. At 2160 wide, 2160 * 0.28125 is 607.5, so the width becomes 606 and the offset (776.25) becomes 776.

2:1 sources cropped with width 0.28125, x 0.359375, height 1 (arithmetic from the Sume crop rules; read 2026-10-07)
SourceRaw widthCrop widthOutput
1920x960540540540x960
2160x1080607.5606606x1080
2400x1200675674674x1200
3840x1920108010801080x1920, no scale needed

The 3840x1920 case

A 2:1 source at 3840x1920 produces a strip of 1080x1920 directly: the crop is the delivery frame. That is the only row of the table where you can skip the scale step and save a filter. Check what your source really is before assuming it, and use video inspect with frames: false to read the probed width, height and frame rate without paying for stills.

Request

For the common 2160x1080 case, add a scale so the 606x1080 strip lands on 1080x1920. The scale is a mild enlargement, 1.78x on width and 1.78x on height; both axes grow by the same factor, so the 606-vs-607.5 trim barely shows.

{
  "video_url": "https://media.sume.com/artifacts/artf_demo/landscape-phone.mp4",
  "ops": [
    { "op": "crop", "x": 0.359375, "y": 0, "width": 0.28125, "height": 1 }
  ],
  "filtergraph": "scale=1080:1920"
}

Before you run a batch

Send the body to POST /v1/video-filter/check, which is free and returns the compiled filter names plus an estimate. Then submit one clip, pull a frame with video frames, and look at the edges. Encode jobs are $0.02 each, and the source must be 300 seconds or shorter.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume