Back to Blog

Instagram Reels Won't Upload? Fix Format, Size and Aspect Ratio

Stuck at 99%, missing audio, or a Reel that looks like mush after posting? Here's exactly what Instagram expects — 9:16, 1080x1920, H.264 + AAC — and how to re-export your clip with ffmpeg or an online converter.

You tap Share, the progress bar crawls to 99%, and then… nothing. Or the Reel posts but the audio is gone. Or it looks fine on your phone and like a melted watercolour in the app. Instagram almost never tells you why — there's no "unsupported codec" message, just a silent failure or a hang.

In the vast majority of cases where Instagram Reels won't upload, the file itself is the problem: it's HEVC (H.265), 10-bit HDR, an odd aspect ratio, a weird frame rate, or an audio track Instagram's transcoder won't touch. The fix is the same every time — re-export the clip as a 9:16, 1080x1920, H.264 + AAC MP4. Below is how to recognise which failure you have, and two ways to fix it: one command line, one browser.

What the symptom tells you about the file

Instagram's upload pipeline does two things: it accepts the file, then it transcodes it server-side. Different symptoms correspond to different points of failure.

  • Stuck at 99% / "Processing" forever. The upload finished but the server-side transcode choked. Classic causes: HEVC in an unusual profile, variable frame rate from a screen recorder, or a 4K60 HDR clip from a recent iPhone.
  • Posts with no sound. Your audio track isn't AAC — often it's Opus (from a WebM or a Telegram/browser download), AC-3, or PCM from a camera. Instagram keeps the video and drops the track.
  • "Couldn't post" / instant rejection. Usually a container or duration problem: MKV, MOV with unusual atoms, AVI, or a clip over the Reels length limit for your account.
  • Heavy re-compression / blocky output. The file was far outside Instagram's target (e.g. 4K 100 Mbps), so it got crushed down. Uploading at 1080x1920 with a sane bitrate gives the transcoder less to destroy.
  • Cropped or letterboxed oddly. Your aspect ratio isn't 9:16. A 16:9 landscape clip gets pillarboxed or centre-cropped, and a 4:5 feed video gets treated differently from a Reel.

If you're unsure what you actually have, run ffprobe myclip.mov — the output names the video codec (hevc vs h264), the pixel format (yuv420p10le means 10-bit) and the audio codec in one line.

Instagram video format requirements that actually matter

Instagram publishes loose guidance, but these are the safe target settings that survive upload without surprises:

  • Container: MP4 (.mp4), with the moov atom at the front (faststart).
  • Video codec: H.264, High profile, 8-bit (yuv420p). Not HEVC, not 10-bit, not HDR/HLG.
  • Resolution: 1080x1920 for Reels and Stories. 1080x1350 for 4:5 feed, 1080x1080 for square.
  • Aspect ratio: 9:16 for Reels. Feed accepts roughly 4:5 to 1.91:1.
  • Frame rate: constant 30 or 60 fps. Variable frame rate is the quiet killer for screen recordings.
  • Video bitrate: around 8–12 Mbps at 1080x1920. Higher just gets thrown away.
  • Audio: AAC-LC, stereo, 44.1 or 48 kHz, 128–192 kbps.
  • Colour: standard Rec. 709. HDR clips often look washed out or get rejected.

The two settings that cause the most silent failures are the ones your phone turns on by default: HEVC capture and HDR video. On an iPhone, Settings → Camera → Formats → Most Compatible turns both off for future recordings. That doesn't help the clip already sitting on your drive — for that, convert it.

Fix it with ffmpeg (the precise route)

Say you have beach-sunset.mov: 3840x2160, HEVC, 10-bit HLG, 240 MB, 28 seconds. Here's the one-liner that turns it into something Instagram accepts without complaint:

ffmpeg -i beach-sunset.mov \
  -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,format=yuv420p" \
  -c:v libx264 -profile:v high -preset slow -b:v 10M -maxrate 12M -bufsize 20M \
  -r 30 -g 60 \
  -c:a aac -b:a 160k -ar 48000 -ac 2 \
  -movflags +faststart \
  reel-beach-sunset.mp4

What each part is doing:

  • scale=...increase then crop=1080:1920 fills the 9:16 frame and centre-crops the overflow — no black bars.
  • format=yuv420p flattens 10-bit to 8-bit, which is what removes the HDR/HEVC problem.
  • -r 30 forces a constant frame rate, fixing VFR screen recordings.
  • -c:a aac -ar 48000 guarantees the audio track survives.
  • +faststart moves the index to the front so upload can begin immediately.

That 240 MB source typically lands around 35 MB — smaller, faster to upload, and visibly better after Instagram's own pass, because the transcoder isn't trying to rescue a 4K HDR file.

Keeping black bars instead of cropping? Swap the filter for a pad:

-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,format=yuv420p"

Audio-only problem? If the video is already H.264 8-bit and only the sound is wrong, don't re-encode the picture:

ffmpeg -i clip.mkv -c:v copy -c:a aac -b:a 160k -ar 48000 -movflags +faststart clip-fixed.mp4

Fix it in the browser (no install)

If you're on a phone, a borrowed laptop, or you just don't want to install anything, do the same job online: drop the file into the MP4 converter, which re-wraps and re-encodes to H.264 + AAC MP4 — the exact combination Instagram's pipeline expects. Upload beach-sunset.mov, download beach-sunset.mp4, post it.

A few practical notes for that route:

  • Convert first, then crop or reframe in the Instagram editor — it handles 9:16 framing on an H.264 file far more predictably than on an HEVC one.
  • If your source is a WebM screen recording with Opus audio, this conversion is what restores sound on the posted Reel.
  • Working with other sources — MKV from a capture card, AVI from an old archive, MOV from a DSLR — start at the video converter hub and pick the matching tool.

Still won't upload? Work through this order

  • Confirm the codec, not the extension. A .mp4 file can still contain HEVC. Run ffprobe or check the file's info panel.
  • Check the duration against the current Reels limit shown in your app; trim with ffmpeg -i in.mp4 -t 90 -c copy out.mp4.
  • Re-export at 1080x1920, nothing larger. 4K sources are the single most common cause of stuck processing.
  • Kill variable frame rate with an explicit -r 30.
  • Try Wi-Fi and a fresh app session. A genuine network stall looks identical to a codec failure from the user's side.
  • Upload from the desktop web app as a cross-check. If the same file fails there too, it's the file, not the phone.

The 60-second takeaway

Instagram doesn't reject files loudly — it stalls, strips audio or over-compresses. Treat every upload failure as a format mismatch first. Export or convert to MP4, H.264 High 8-bit, 1080x1920 (9:16), 30 fps CFR, ~10 Mbps, AAC 160 kbps stereo, faststart and nearly every one of these symptoms disappears. One ffmpeg command or one trip through an online MP4 converter, and the clip that hung at 99% posts in seconds.

Save the ffmpeg command as a shell alias and you'll never debug a stuck Reel again.

FAQ

Why does Instagram ruin my video quality? Because you gave it more pixels and bitrate than it keeps. A 4K 100 Mbps file is downscaled aggressively by the server. Upload 1080x1920 at roughly 10 Mbps and the transcoder has much less to discard.

Does Instagram support HEVC / H.265? Sometimes, inconsistently, and it's the leading cause of stuck processing. H.264 is the reliable choice.

Why did my Reel lose its audio? The track wasn't AAC — commonly Opus from a WebM or browser-captured file. Re-encode the audio to AAC and keep the video stream with -c:v copy.

What aspect ratio do Reels need? 9:16, i.e. 1080x1920. Anything else is cropped or padded automatically, usually not where you'd choose.

Can I upload MOV or MKV files? MOV often works if it contains H.264 + AAC; MKV generally does not. Converting to MP4 removes the guesswork.

What's the maximum file size? There's no published hard number that's useful in practice — but a 1080x1920 clip at 10 Mbps stays comfortably small, around 75 MB per minute.

Ready to Convert Your Files?

Try our free online file converter. No registration required.

Start Converting