How to make a vertical video horizontal (9:16 to 16:9)

To make a vertical video horizontal, put the 9:16 clip in a 16:9 frame and fill the sides with a blurred copy or black bars. How to do it with Sume.

5 min readSume
All posts

To make a vertical video horizontal, place the 9:16 clip in the middle of a 16:9 frame and fill the empty sides, either with black bars or with a blurred, enlarged copy of the same clip. Cropping the clip to fill the frame keeps only a thin band from the middle of the picture. With Sume, render a clip already hosted on media.sume.com into a 1920×1080 Timeline 1.0 output with fit: "blur" or fit: "contain".

The Sume facts come from the Timeline 1.0, Audio detach, and Video filter docs and the Sume API reference, and the FFmpeg syntax from the FFmpeg filters documentation, all read on 2026-09-27. Behavior read from Sume's code is described as it works today.

Can you make a vertical video horizontal without cropping?

Yes, if the picture can be smaller. By our arithmetic, a 9:16 clip fitted into a 1920×1080 frame is about 608 pixels wide, so it fills under a third of the frame's width, and bars or a blurred fill cover the rest. A slot's fit decides what happens:

What a 1080×1920 clip becomes in a 1920×1080 render. Pixel sizes are our arithmetic; behavior from Timeline 1.0, the Sume API reference, and Sume's Timeline compiler as it works today, read 2026-09-27.
`fit`What the horizontal frame shows
cover (the default)The clip scaled up to the frame's width and cropped: a band about 32% of the picture's height
containThe whole clip, about 608×1080, with black bars on both sides
blurThe whole clip over a blurred copy of the frame instead of black bars
stretchThe clip scaled to exactly 1920×1080, so everything in it looks wide and flat

How do I make a vertical video horizontal with the Sume API?

The clip must already be your workspace's media.sume.com artifact or asset, such as an earlier Sume job's output; which URLs each endpoint accepts explains the rule. Then it takes two calls:

  • Detach the sound with POST /v1/audio-detach. Today a render's sound comes from its audio spine, not from the clips in video[], and detach's default wav is what audio.url wants. Its result carries duration_seconds. A clip with no audio track fails the detach; render it with audio.mode: "silence" instead.
  • Render one slot that covers the whole output: audio.duration_seconds and the slot's duration set to the clip's length, fit: "blur" (or "contain" for black bars), and output set to 1920×1080. Leave fit out and you get cover, the crop.
  • Poll GET /v1/jobs/:id/status and GET /v1/jobs/:id/result. The kind: timeline_render result carries the new video_url.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: horizontal-blur-001" \
  -d '{
    "audio": {
      "url": "https://media.sume.com/artifacts/artf_demo/clip-audio.wav",
      "duration_seconds": 30
    },
    "video": [
      {
        "source_url": "https://media.sume.com/artifacts/artf_demo/vertical.mp4",
        "start": 0,
        "duration": 30,
        "fit": "blur"
      }
    ],
    "output": { "width": 1920, "height": 1080 }
  }'

Can I keep the clip's own sound without detaching it?

Yes, for black bars on a clip of 300 seconds or less: one POST /v1/video-filter job keeps the source's audio, using the scale-and-pad filtergraph from make a video square with 1920:1080 in place of 1080:1080 in both filters.

Why not rotate the video instead?

Rotating changes the frame's shape, but it also turns the scene on its side, so it's only the fix when the picture itself plays sideways. For that case, see rotate a video 90 degrees. The opposite conversion, landscape to 9:16, is Convert a landscape video to vertical.

What are the limits and costs?

  • Output edges are even integers from 256 to 2160, so 1920×1080 works and 3840×2160 doesn't. The default output is 1080×1920, so always set output for a horizontal render.
  • audio.duration_seconds runs 1–1800 seconds. Audio detach returns at most 900 seconds per job, so a longer track takes two detach jobs with a range each, joined in the render as audio.parts[].
  • POST /v1/timeline-1.0/plan runs the schema and URL checks and the compiler without creating a job or reserving credits.
  • The API pricing rate card lists a render at $0.10 per output minute, and a render reserves ceil(audio.duration_seconds / 60) minutes. Audio detach and the video filter are billed per job; the docs say to confirm those rates in GET /v1/catalog.
  • The video filter reads sources of up to 300 seconds; a longer one fails with output_duration_exceeded.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume