What are the best export settings for Instagram Reels?
Export a 9:16 MP4 at 1080x1920, or 1440x2560 if your footage is 2K or larger. Use H.264 or HEVC, progressive scan, 4:2:0 colour and closed GOPs. Keep your source frame rate between 23 and 60 fps, encode VBR video below 25 Mbps, and use AAC audio at 128 kbps and 48 kHz.
Those limits come from Meta's Reel specifications for the Instagram content publishing API, which is the route schedulers such as Reeling use. We checked them on November 9, 2026. Meta publishes ceilings rather than a quality target, so the right-hand column shows the setting we use as a starting point within each limit.
| Setting | Meta Reel spec (checked 2026-11-09) | Export setting to start with |
|---|---|---|
| Container | MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front | MP4 with fast start (FFmpeg: -movflags +faststart -use_editlist 0) |
| Video codec | HEVC or H.264, progressive scan, closed GOP, 4:2:0 chroma subsampling | H.264 High profile, yuv420p, 2-second keyframe interval |
| Resolution | Maximum 1,920 horizontal pixels; aspect ratio 0.01:1 to 10:1, 9:16 recommended | 1080x1920, or 1440x2560 from 2K or 4K footage |
| Frame rate | 23 to 60 fps | Match the source: 24, 25, 30, 50 or 60 fps |
| Video bitrate | VBR, 25 Mbps maximum | 10 to 14 Mbps average for 1080p at 30 fps; peaks capped at or below 25 Mbps |
| Audio | AAC, 48 kHz maximum, mono or stereo, 128 kbps | AAC-LC, 128 kbps, 48 kHz, stereo |
| Duration | 3 seconds to 15 minutes | Keep it as long as the edit needs, then check the file size |
| File size | 300 MB maximum | Up to 100 MiB when you schedule the Reel through Reeling |
What is the best bitrate for Instagram Reels?
For a 1080x1920 Reel at 24 to 30 fps, export VBR video at about 10 to 14 Mbps, with peaks no higher than 25 Mbps. At 60 fps or 1440x2560, go higher, up to about 24 Mbps. Meta sets 25 Mbps as the maximum, so anything above it only makes the file bigger.
Meta publishes no target bitrate, so these ranges are our starting points, not official figures. They start from YouTube's published upload bitrates, the most detailed official guidance for the same resolutions, and add some headroom. Instagram processes every upload again and serves each viewer a version that suits their device and connection. Your export only has to give that encoder a clean master. Forum rules such as "set the bitrate to twice your frame rate" are not in Meta's documentation. Pick a rate from this table, export a short sample with motion and fine text, and compare it with the source on a phone.
| Export | YouTube's recommended upload rate (SDR) | Starting VBR average to test | Peak (maxrate) cap |
|---|---|---|---|
| 1080x1920 at 24, 25 or 30 fps | 8 Mbps | 10 to 14 Mbps | 20 Mbps |
| 1080x1920 at 50 or 60 fps | 12 Mbps | 14 to 18 Mbps | 25 Mbps |
| 1440x2560 at 24, 25 or 30 fps | 16 Mbps | 16 to 20 Mbps | 25 Mbps |
| 1440x2560 at 50 or 60 fps | 24 Mbps | 22 to 24 Mbps | 25 Mbps |
Fit the bitrate to your Reel length and upload cap
Reeling accepts Instagram Reels up to 100 MiB (104,857,600 bytes). With 128 kbps audio and 5% kept back for container overhead, a 60-second Reel can average about 13.1 Mbps of video, and a 90-second Reel about 8.7 Mbps. Reels of 30 seconds or less have more room than that, so the limit that applies is Meta's 25 Mbps ceiling.
The table shows the highest average video bitrate for each length. If you encode VBR, set the average (-b:v) at or below that number. The peak can go higher because the size depends on the average. For Reels of two minutes or more, a 100 MiB file leaves less than YouTube's 8 Mbps reference rate for 1080p. Shorten the edit, accept a lower rate after checking a sample, or post the Reel from the Instagram app instead. Meta's own 300 MB limit also has a length implication: at a full 25 Mbps, a Reel longer than about 95 seconds will not fit.
max total bps = cap_bytes x (1 - reserve) x 8 / seconds
max video bps = max total bps - audio bps
60 s Reel, 100 MiB cap, 5% reserve, 128 kbps audio:
104,857,600 x 0.95 x 8 / 60 = 13,282,000 bps total
13.282 Mbps - 0.128 Mbps = 13.15 Mbps video (round down to 13 Mbps)| Reel length | Max average video bitrate for 100 MiB | What limits the bitrate | Setting to use |
|---|---|---|---|
| 15 s | 53.0 Mbps | Meta's 25 Mbps ceiling | Up to 25 Mbps peak; 10 to 18 Mbps average is plenty for 1080p |
| 30 s | 26.4 Mbps | Meta's 25 Mbps ceiling | Up to 25 Mbps peak |
| 45 s | 17.5 Mbps | File size | 17 Mbps average or lower |
| 60 s | 13.1 Mbps | File size | 13 Mbps average, two-pass |
| 90 s | 8.7 Mbps | File size | 8.5 Mbps average, two-pass, 1080p |
| 120 s | 6.5 Mbps | File size | 6.5 Mbps at 1080p after a sample check, or shorten the edit |
| 180 s | 4.3 Mbps | File size | Below the 1080p reference; shorten the edit or post from the app |
Tested FFmpeg command for an Instagram Reels export
This FFmpeg command converts any master into a Reel that meets Meta's spec. It produces a 1080x1920 H.264 High-profile MP4 with 4:2:0 colour and keyframes every two seconds. Video averages 12 Mbps with peaks capped at 16 Mbps, audio is AAC at 128 kbps, 48 kHz stereo, and the moov atom sits at the front.
We ran it with FFmpeg 7.0.2 on November 9, 2026, using an 8-second 2160x3840 test pattern at 30 fps as the source. ffprobe reported h264 High, 1080x1920, yuv420p, 30 fps, 11.92 Mbps video and 127 kbps AAC at 48 kHz in stereo. The top-level atoms came out in the order ftyp, moov, free, mdat, so the moov atom is at the front. The scale and pad filters fit sources with a different shape into 9:16 without stretching them. There is no fps filter, so the output keeps the source frame rate. Set -g to twice your frame rate (48 for 24 fps, 120 for 60 fps). libx264 writes closed GOPs by default, which is what Meta asks for.
ffmpeg -i master.mov \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease:flags=lanczos,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,format=yuv420p" \
-c:v libx264 -profile:v high -preset slow \
-b:v 12M -maxrate 16M -bufsize 24M -g 60 \
-color_primaries bt709 -color_trc bt709 -colorspace bt709 \
-c:a aac -b:a 128k -ar 48000 -ac 2 \
-movflags +faststart -use_editlist 0 \
reel_1080x1920.mp4HEVC and two-pass variants that hit an exact size
Use HEVC for 1440x2560 Reels, because it usually needs less bitrate than H.264 for the same quality. Add open-gop=0, because x265 turns open GOP on by default and Meta requires closed GOPs. Add the hvc1 tag so Apple players recognise the file. When the file has to fit a cap, use two-pass H.264, which lands close to the target average.
We ran both commands on the same 8-second test pattern. The HEVC export came out as hevc Main, tagged hvc1, 1440x2560 at 30 fps, averaging 10.7 Mbps of video against a 10 Mbps target. The two-pass H.264 export at a 13 Mbps target averaged 13.04 Mbps, audio included. For a real 60-second Reel, 13 Mbps keeps the file under Reeling's 100 MiB cap with room to spare. A short test pattern is not a quality test, so judge picture quality on your own footage.
# HEVC, 1440x2560, closed GOP, Apple-compatible tag
ffmpeg -i master.mov -vf "scale=1440:2560:flags=lanczos,setsar=1,format=yuv420p" \
-c:v libx265 -preset medium -b:v 10M -maxrate 14M -bufsize 20M \
-x265-params "keyint=60:min-keyint=60:open-gop=0" -tag:v hvc1 \
-c:a aac -b:a 128k -ar 48000 -ac 2 -movflags +faststart -use_editlist 0 \
reel_1440x2560_hevc.mp4
# Two-pass H.264 sized for a 60 s Reel under 100 MiB
ffmpeg -y -i master.mov -vf "scale=1080:1920:flags=lanczos,setsar=1,format=yuv420p" \
-c:v libx264 -preset slow -b:v 13M -maxrate 20M -bufsize 26M -g 60 \
-pass 1 -passlogfile reel2p -an -f mp4 /dev/null
ffmpeg -i master.mov -vf "scale=1080:1920:flags=lanczos,setsar=1,format=yuv420p" \
-c:v libx264 -preset slow -b:v 13M -maxrate 20M -bufsize 26M -g 60 \
-pass 2 -passlogfile reel2p \
-c:a aac -b:a 128k -ar 48000 -ac 2 -movflags +faststart -use_editlist 0 \
reel_2pass.mp4Premiere Pro, DaVinci Resolve, CapCut and Edits settings
In any editor, use the same targets: H.264 or HEVC in MP4, 1080x1920 or 1440x2560, the source frame rate, VBR or a restricted bitrate in the ranges above, and AAC at 128 kbps and 48 kHz. Exporting at 4K adds file size but no extra detail. A 2160-pixel-wide vertical frame is also wider than the 1,920-pixel maximum in Meta's spec.
Menu names change between versions, so treat this table as a map of the settings to look for, not exact click paths. If you share straight from Instagram's Edits app, Instagram advises exporting at 2K, HDR and 60 fps. That advice is for Edits' direct-share route. Meta's API spec does not mention HDR, so for a Reel you schedule, an SDR export in Rec. 709 gives you the most predictable colour.
| App | Where to look | Settings to use |
|---|---|---|
| Adobe Premiere Pro | Export: Format H.264; Video: Bitrate Settings | 1080x1920, match the source frame rate, VBR 2 pass, target 12 Mbps, maximum 16 to 20 Mbps; AAC 128 kbps at 48 kHz |
| DaVinci Resolve | Deliver page: Format MP4, Codec H.264 or H.265 | Custom 1080x1920, Quality 'Restrict to' 12000 Kb/s (lower it for long Reels), Network Optimization on if offered; AAC audio |
| CapCut (desktop) | Export panel | Resolution 1080p or 2K, frame rate to match the source, codec H.264 or HEVC, format MP4; use a custom bit rate if your version offers one |
| Instagram Edits | Export options before sharing | Instagram recommends 2K, HDR and 60 fps when you share straight from Edits to Instagram |
Why Reels still look blurry after you upload them
Reels usually look soft for one of these reasons. The in-app upload ran at reduced quality, the source was upscaled, or the frame was wider than 1,920 pixels and got scaled down. Other causes are a frame-rate conversion, HDR footage shown as SDR, or a Reel that was downloaded and uploaded again. The bitrate setting is rarely the only cause.
Work through this list before you raise the bitrate again. Raising it above 25 Mbps does nothing, because the spec stops there. Fine text and fast motion are hardest for any encoder to keep sharp. Larger captions and steadier shots often help more than extra megabits.
[ ] Instagram app: Settings and privacy > Data usage and media quality > Upload at highest quality is on
[ ] Source is at least as sharp as the export (no 720p footage upscaled to 1080x1920)
[ ] Frame is 1,920 pixels wide or less (export 1440x2560, not 2160x3840)
[ ] Frame rate matches the source (no 30 fps footage converted to 60 fps)
[ ] SDR Rec. 709 export, unless you share HDR straight from Edits
[ ] Text sits inside the 9:16 safe area and is large enough to survive compression
[ ] Export made from the original master, not from a downloaded or screen-recorded Reel
[ ] Average bitrate within the table above for the Reel's length and upload capVerify the file before you schedule the Reel
Before you schedule, run ffprobe on the final file. Confirm the codec, a width of 1,920 pixels or less, yuv420p, a frame rate between 23 and 60 fps, AAC audio at 48 kHz, and the exact byte count against your upload cap. Then check that the moov atom comes before mdat. It takes about a minute.
In Reeling, Instagram publishing covers Reels for Business or Creator accounts you own or manage, and it currently needs tester access. Files can be MP4 or MOV up to 100 MiB, and captions can run to 2,200 characters. You can schedule the Reel from the web composer, the REST API (POST /api/v1/publish) or the MCP server (github:yomariano/reeling-mcp, tool reeling_publish_post). Check Connect Channels for what your account is cleared to publish, because platform approval applies.
# Streams and container: codec, size, pixel format, fps, bitrates, bytes
ffprobe -v error \
-show_entries stream=codec_name,profile,width,height,pix_fmt,r_frame_rate,bit_rate,sample_rate,channels \
-show_entries format=duration,size,bit_rate -of default=nw=1 reel_1080x1920.mp4
# Fast start: 'moov' must be listed before 'mdat'
ffprobe -v trace reel_1080x1920.mp4 2>&1 | grep -o "type:'[a-z]*' parent:'root'"
# 100 MiB cap check: size must be below 104857600 bytes