← back to blog
InstagramVideo·October 12, 2026·6 min read

Aspect ratio is not valid for Reels ads: what Instagram actually measures

The video is vertical, the editor promised 9:16, the Reel published without a word of complaint, and then the boost button says only full-screen 9:16 videos can be promoted. This is rarely an Instagram bug. The file usually is not 9:16, and the difference is one pixel.

Maxfounder of Sndwich · @SattyEth

What Instagram counts as 9:16

Nine sixteenths is 0.5625. Exactly, with nothing left over. A 1080x1920 frame is exactly 0.5625, and that is the full-screen 9:16 the ads tools ask for. A 1079x1919 frame is 0.56227. Nobody can see the difference: on a phone the two clips are indistinguishable, and no one you show them to will guess which is which.

The check on the ads side is not "looks vertical" though. It compares numbers, and it has no tolerance wide enough for your one pixel. So a Reel that uploaded fine, looks fine and collects views fine gets refused at the boost button, and the refusal never tells you what ratio it found.

Publishing and promoting check different things. Publishing accepts a wide range of shapes, promoting demands an exact 9:16. That is why it feels absurd: the video is already live, already vertical, and still cannot be boosted.
PublishesBoosts1080x1920yesyes1079x1919yesno1080x1350yesno1920x1080yesno
Four files, one answer for publishing and four different answers for promotion. The first row differs from the second by a single pixel per side, and only the first one passes.

Where 1079x1919 comes from

If the video was assembled in a browser-based editor, it was most likely recorded off a canvas: the page draws each frame, and the recorder captures that canvas as it is. That is where the extra pixel nobody ordered appears.

The on-screen canvas is the board size multiplied by the view scale. Before recording, the scale is set to one so the capture happens at full resolution, and the usual way to do that is "current scale times its own reciprocal". In arithmetic that is one. In binary floating point, a number times its reciprocal is not always exactly one; sometimes it is 0.9999999999999998. The canvas is then asked for a width of 1079.9999999999998, and canvas.width is an integer: the fraction is dropped and the file comes out 1079 wide.

We replayed that arithmetic across every window height from 300 to 2000 pixels: on 257 of 1701 heights a 1080x1920 board recorded as 1079x1919. Not a random glitch and not "it acts up sometimes" — it depends on how tall your browser window happens to be when you export. Hence the lottery.

An odd number has a second consequence. H.264 with 4:2:0 chroma subsampling wants even sides, so that 1079 has to go somewhere: the encoder either refuses the job or quietly moves an edge. You want neither, and both happen after the file already looked finished.

How to check your own file

The check takes ten seconds and answers the question Instagram's interface will not: what shape is this file, really.

ffprobe, if you have it.ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 video.mp4 returns two numbers and nothing else.
Without ffprobe.Windows: right-click the file, Properties, Details, Frame width. macOS: Get Info in Finder. VLC: Tools, Codec Information.
Do not divide in your head.Multiply width by 16 and height by 9. The two must match: 1080x16 = 17280 and 1920x9 = 17280. For 1079x1919 you get 17264 and 17271, which is not 9:16.

How to fix the aspect ratio

If the file is not 9:16 it has to be rebuilt, and the only real choice is what you are willing to lose. Fitting keeps the whole picture and adds bars, so the subject gets smaller. Filling uses the whole frame and cuts the edges, so nothing shrinks.

Fit, with barsscale=1080:1920:force_original_aspect_ratio=decrease, then pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black. Nothing is lost, but bars appear top and bottom.
Fill, with a cropscale=1080:1920:force_original_aspect_ratio=increase, then crop=1080:1920. The frame is full, the edges are gone. From a 16:9 source that is a lot of edge.
One pass, not tenThe quality loss people blame on re-encoding comes from doing it repeatedly and from a default bitrate, not from one careful pass: -crf 18 -preset slow.
Leave the audio alone-c:a copy. Re-compressing sound to change the shape of the picture buys nothing, and every pass is audible.

The force_original_aspect_ratio option in the scale filter does the work: decrease guarantees the picture fits whole and leaves room for the bars, increase guarantees both sides reach the target so the crop never reads past the edge of the frame. The publishing requirements for Reels are in the Instagram Platform docs; the promotion rule is not there, it lives in the app and shows up only at the moment of refusal.

Why an extra re-encode breaks 9:16 by itself

The other side of it: a file that is already exactly 1080x1920 should not be touched at all. Pipelines that run everything through a normaliser "just in case" often pick their own output resolution when no size is given, so a correct 9:16 becomes an almost-9:16 after it was already made properly, and the search for the cause starts in the editor.

The rule is simple: normalise only what actually needs it. If the video is already H.264 and already the exact size, the most useful thing a service can do is hand the file over untouched. Same idea as in our piece on face and voice in generated video: every extra processing step changes something, and not always the thing you meant to change.

Exportthe editor writes 1079x1919
UploadInstagram accepts the file
Reel is livelooks fine, collects views
Boost"only full-screen 9:16"

That last step is the first place the rule is ever stated. Which is why the size is worth checking at step one: ten seconds against re-uploading a Reel that has already gathered its reach. For the other places where Instagram refuses without explaining, we wrote a separate piece.

Short checklist

9:16 means exactly 0.5625, not roughly vertical
1080x1920 passes, 1079x1919 does not
Both sides must be even: H.264 requires it
Check the file before publishing, not after the refusal
Fit means bars, fill means a crop, there is no third option
Do not re-encode a video that is already correct

How we handle it

This article grew out of our own bug: the editor handed over 1079x1919 and swore it was 9:16. The recording size now comes from the board alone and depends on neither the zoom nor the size of the window.

Exports match the board. 1080x1920 means 1080x1920, with even sides, at any zoom.
Reframing in the pipeline. Fit or fill, with the trade-off shown before you choose.
No pointless passes. An H.264 file that is already the right size goes to Instagram as it is.
Try it free →
ShareTelegramX

Read next