Convert 4:3 to 16:9 video: pillarbox, crop, or stretch

Convert 4:3 video to 16:9 three ways: pillarbox it, crop 12.5% off the top and bottom, or stretch it. With FFmpeg and the Sume API.

5 min readSume
All posts

To convert 4:3 video to 16:9, choose what to give up, because a 4:3 picture is narrower than a 16:9 frame. Pillarbox it to keep the whole picture with bars at the sides, crop it to fill the frame by cutting 12.5% off the top and the bottom, or stretch it to fill the frame and make everything 33% wider. FFmpeg does each with one -vf option, and Sume does them on clips hosted on media.sume.com.

The FFmpeg syntax comes from its filters and ffmpeg documentation, and the Sume facts from the Video filter and Timeline 1.0 docs and the Sume API reference, all read on 2026-09-28. Percentages and pixel sizes are our arithmetic, and anything described as current behavior is read from Sume's code.

Which method should I use?

Pillarboxing loses nothing but leaves bars. Cropping fills the frame but loses the top and bottom of every shot. Stretching fills the frame and keeps everything, but every shape comes out wider than it was.

Percentages and sizes are our arithmetic for a 1920×1080 frame. FFmpeg filters from the filters documentation; Sume options from Timeline 1.0, Video filter, the Sume API reference, and Sume's code as it runs today, read 2026-09-28.
MethodWhat the 16:9 frame showsFFmpegSume
PillarboxThe whole picture, 1440×1080, with a 240-pixel black bar on each sidepadVideo filter pad, or Timeline fit: "contain"
Blurred sidesThe whole picture over a blurred copy of itself instead of black barsSeveral filtersTimeline fit: "blur"
CropThe full width and the middle 75% of the heightcropVideo filter crop op, or Timeline fit: "cover"
StretchThe whole picture, 33% wider than it should bescale plus setsarVideo filter scale and setsar, or Timeline fit: "stretch"

How do I convert 4:3 to 16:9 with FFmpeg?

One -vf option per method. The audio is copied as it is; the video is re-encoded, since filters work on decoded frames:

  • As written, pad centers the picture on black and crop keeps the middle of the frame; How to make a video square explains their arguments.
  • The stretch needs setsar=1. FFmpeg's scale filter keeps the input's display aspect ratio by changing the sample aspect ratio, so without it the file would still declare a 4:3 shape.
  • These commands assume square pixels. For anamorphic footage, FFmpeg's pad docs divide by the sample aspect ratio: pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2".
# Pillarbox: FFmpeg's own "final w/h ratio of 16:9" example
ffmpeg -i input.mp4 -vf "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" -c:a copy pillarbox.mp4

# Crop: full width, centered 16:9 window
ffmpeg -i input.mp4 -vf "crop=iw:iw*9/16" -c:a copy crop.mp4

# Stretch: fill 1920x1080 and mark the pixels square
ffmpeg -i input.mp4 -vf "scale=1920:1080,setsar=1" -c:a copy stretch.mp4

How do I convert 4:3 to 16:9 with the Sume API?

To crop, send the clip to POST /v1/video-filter with a crop op. Its rectangle is in fractions of the source frame, so a 16:9 window of a 4:3 clip is y: 0.125 and height: 0.75 at full width. The compiler even-rounds it, and the output keeps the clip's frame rate and audio:

  • To pillarbox or stretch instead, send the matching -vf value from above as the filter's filtergraph. In current code pad, scale, and setsar are on its allowlist, and the output keeps the clip's audio.
  • The filter takes sources up to 300 seconds. For a longer clip, or blurred sides, render it in Timeline 1.0 with output set to 1920×1080 (the default is 1080×1920) and the matching fit: "contain", "blur", "cover", or "stretch". In current code a render's sound comes only from its audio spine, so detach the clip's sound first; make a vertical video horizontal shows both calls.
  • Both routes read only your workspace's media.sume.com files, such as an earlier Sume job's output (which URLs each endpoint accepts), and in current code refuse a source file over 300 MiB with source_too_large.
  • The filter is billed per job, with the rate the docs say to confirm in GET /v1/catalog; a render is listed at $0.10 per output minute on API pricing, each plus a 5.5% agent fee by default.
curl -X POST https://api.sume.com/v1/video-filter \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: crop-4x3-to-16x9-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/clip-4x3.mp4",
    "ops": [{ "op": "crop", "x": 0, "y": 0.125, "width": 1, "height": 0.75 }]
  }'

How do I convert 16:9 to 4:3?

Run the same trade-offs the other way. A full-height 4:3 crop keeps the middle 75% of the width: crop=ih*4/3:ih in FFmpeg, or a crop op with x: 0.125, y: 0, width: 0.75, and height: 1 on Sume. To keep the whole picture instead, letterbox it with bars above and below: pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2 in FFmpeg, or a 1440×1080 Timeline render with fit: "contain". To add bars on purpose, see cinematic bars size.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume