Aspect-ratio problems

Black bars on a video: crop it, pad it or export 9:16

Updated 6 fixes4 sources

Short answer

Black bars are arithmetic, not a bug: the player has a fixed frame and your file does not fill it. A 1920 × 1080 file scaled to a 1080 px wide 9:16 frame is only 608 px tall, so 656 px of empty space sits above and below. Fix it in one of two ways: crop, which fills the frame and discards the sides, or pad, which keeps everything and adds an edge. YouTube explicitly advises against padding or black bars baked into your file, because padding interferes with the player resizing itself.

Key takeaways

  • Bars are either in your export or added by the player; check which before re-exporting.
  • A 1920 × 1080 file in a 1080 × 1920 frame is a 1080 × 608 picture with 656 px bars.
  • Crop fills the frame and loses content; pad keeps content and adds an edge.
  • YouTube says to avoid adding padding or black bars directly, since it resizes the player dynamically.
  • A 4:5 file in a 9:16 frame gets 285 px bars top and bottom, or loses 228 px per side if scaled to fill.

Where the bars come from, in pixels

A player that shows a 16:9 file in a 9:16 frame can either letterbox it (bars) or zoom it (crop). Both are the same arithmetic. A 1920 × 1080 file scaled to 1080 px wide is 1080 ÷ 16 × 9 = 608 px tall, so a 1080 × 1920 frame leaves 1920 − 608 = 1312 px of empty space, which is 656 px above and below when centered.

The same numbers decide whether padding or cropping is the right answer for you.

SourcePlaced in 1080 × 1920Padding neededPixels lost if you crop
1920 × 1080 (16:9)1080 × 608 picture656 px top and bottom608 of 1920 px of width
1080 × 1080 (1:1)1080 × 1080 picture420 px top and bottom420 px of each side
1080 × 1350 (4:5)1080 × 1350 picture285 px top and bottom228 px of each side
1080 × 1920 (9:16)1080 × 1920 pictureNoneNone

Computed: each figure is the source scaled to 1080 px wide, then the difference from 1920 px of height split evenly. A 4:5 file is the mildest case: it matches the frame width but not its height, so it gets 285 px bars, and if it is scaled to fill the height it loses 228 px per side.

Find your case

What you seeWhat it usually meansDo this
Bars in the exported file itselfYour editor padded or the source was letterboxedExport without padding (step 2)
Bars only on the platformThe player fits a different shape into its frameExport the shape the player uses (step 1)
Bars on some devices onlyDevice aspect differs from the fileExport 1080 × 1920 (step 4)
Bars are white or dark gray, not blackThe player padded the video itselfNothing to fix in your file (step 1)
Bars and a soft pictureA small file was scaled up to fillExport at the native size (step 4)
Bars you cannot remove without losing the subjectThe subject is at the frame edgeReposition, then pad (step 3)

Fix it step by step

  1. Decide where the bars are coming from

    Open the exported file. If the bars are already in it, they came from your editor or from the source. If the file is clean and the bars appear only on the platform, the player added them. YouTube documents this: for 9:16 vertical videos on computer browsers it may add more padding for optimal viewing, and that padding is white by default and dark gray when Dark theme is on.

    Source: YouTube Help: Video resolution & aspect ratios

  2. Export without padding

    A project set to a different aspect than the export adds letterbox or pillarbox bars. Set the sequence to the shape you are posting at, usually 1080 × 1920, and export with the canvas filled. YouTube says to avoid adding padding or black bars directly because padding interferes with its ability to change the player dynamically to the video size and the viewer's device.

    Source: YouTube Help: Video resolution & aspect ratios · Crop a video →

  3. Pad deliberately when content must survive

    ffmpeg -i in.mp4 -vf "scale=1080:-2,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black" -c:a copy out.mp4. FFmpeg documents that pad adds space, places the input at the x and y offsets, and centres the input when x or y is negative; here the expressions center it explicitly.

    Source: FFmpeg Documentation: Video filters (crop, pad, scale, setsar, subtitles)

  4. Fill the frame instead, when you can afford the crop

    ffmpeg -i in.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" -c:a copy out.mp4 takes a 9:16 slice out of the middle of the frame and scales it up. On a 1920 × 1080 source that slice is 608 px wide, so you keep 608 of 1920 px, about a third of the picture.

    Source: FFmpeg Documentation: Video filters (crop, pad, scale, setsar, subtitles) · 9:16 video reference →

  5. Check the display aspect ratio before blaming the player

    A file can be padded because the pixel size is right but the sample aspect ratio is wrong, which stretches the picture and leaves gaps. FFmpeg documents that DAR = width ÷ height × SAR, and setsar=1 fixes a file whose SAR does not match its pixel shape.

    Source: FFmpeg Documentation: Video filters (crop, pad, scale, setsar, subtitles) · Check the video file →

  6. Know when the platform will letterbox anyway

    Instagram accepts a Reel at an aspect ratio between 1.91:1 and 9:16, so a 4:5 or 1:1 file is legal and will be fitted rather than cropped. If your file is inside the accepted range, bars on the platform are expected, not a defect.

    Source: Instagram Help: Reel size & aspect ratios

Pad or crop: what each choice costs

Pad to 1080 × 1920Keeps 100% of the picture · adds bars by design
Crop 16:9 to 9:16Keeps 608 of 1920 px of width · about 32% of the frame
4:5 in a 9:16 frame285 px bars top and bottom · nothing cropped
9:16 nativeNothing to do · Instagram accepts 1.91:1 to 9:16
Player padding colorWhite by default, dark gray in Dark theme on YouTube

Pad or crop, and what each command does

Padding keeps every pixel and adds an edge. Cropping fills the frame and throws pixels away. FFmpeg documents both filters. pad adds space around the input at the size you ask for and centres the input if x or y is negative. crop takes out a rectangle of the size you ask for, evaluated for each frame, so expressions such as in_h and 9/16 work directly.

GoalFilterNotes from the FFmpeg documentation
Fit inside 9:16 with barsscale then padpad takes width, height, x, y and a color; negative x or y centres the input
Fill 9:16 and lose the sidescropcrop=w:h:x:y, with x and y evaluated per frame
Square crop of a vertical clipcrop=in_h:in_hdocumented example: crop the central square with crop=out_w=in_h
Fix a squashed filesetsar=1DAR = width ÷ height × SAR, so a wrong SAR is what makes a video look stretched

Free tools:Crop a video9:16 video reference

Frequently asked questions

Why does my video have black bars?

The player has a fixed frame and your file does not fill it. A 1920 × 1080 file shown in a 1080 × 1920 frame leaves 656 px above and below once it is scaled to 1080 px wide.

Should I crop or pad?

Crop when the edges hold nothing important and you want a full-screen look. Pad when the whole picture must stay visible and you accept bars.

Should I add black bars to my video before uploading?

YouTube explicitly advises against it: padding interferes with the player's ability to resize itself to your video and the viewer's device. Pad only when the format requires it, such as a 16:9 upload to a 16:9 placement.

Why are the bars white instead of black?

Because the player added them, not your file. YouTube documents that for 9:16 vertical video on computer browsers it may add more padding, which is white by default and dark gray when Dark theme is on.

Sources

Reviewed 2026-10-07. Steps not attributed to a source are general video practice or computed above.