Instagram Reels encoding: codecs and frame rate
Reels take MOV or MP4, H.264 or HEVC, 23 to 60fps. Stay under three minutes if you want recommendations, including from a 25fps timeline.
Most export presets labelled "Instagram" are conforming your video to a number the ingest spec never asked for. Instagram's Graph API Reel specifications accept a MOV or MP4 container, H.264 or HEVC video, a frame rate anywhere from 23 to 60fps, and recommend 9:16 to avoid cropping. AAC audio, 48kHz max, mono or stereo. Video bitrate is VBR with a 25Mbps ceiling; audio bitrate is listed at 128kbps.
Read the frame rate line carefully, because it is a range and almost everyone treats it as a target. 23 to 60 accepts 24. It accepts 25. It accepts 30, 50 and 60. There is no conversion owed to this platform unless your material sits outside those bounds, and material outside those bounds is rare.
The consumer Help Center article on Reel size and aspect ratios currently lists a minimum of 30fps. That is a recommendation on a different page, not the ingest envelope that accepts or rejects a file. The Graph API range is what a 25fps timeline has to clear.
The envelope, stated
| Parameter | Graph API value |
|---|---|
| Container | MOV or MP4 (no edit lists; moov atom at the front) |
| Video codec | H.264 or HEVC, progressive, closed GOP, 4:2:0 |
| Frame rate | 23–60fps |
| Aspect ratio | 0.01:1 to 10:1 accepted; 9:16 recommended |
| Duration | 3 seconds minimum, 15 minutes maximum |
| File size | 300MB maximum |
| Video bitrate | VBR, 25Mbps maximum |
| Audio | AAC, 48kHz max, 128kbps, 1 or 2 channels |
| Cover photo | JPEG, 8MB max; centre-cropped to 9:16 if supplied otherwise |
Four of those are ranges or either/ors. That is the useful shape of this spec: permissive, and the work is in not doing extra work. For the equivalent envelope on the other platforms you publish to, the vertical video spec reference is the cross-platform sheet.
A range is not a target
The number 30 has enormous gravity in social export presets. It arrived from NTSC broadcast heritage, phone camera defaults and a decade of preset files copied from preset files, and has almost nothing to do with what the ingest spec requires.
Here is what conforming a 25fps timeline to 30fps does. 30 ÷ 25 = 1.2. No whole-number relationship, so the encoder invents the difference: every five source frames become six. One frame in five is duplicated or interpolated.
On a static shot, invisible. On a pan, a tilt, a hand crossing frame — any camera motion at all — it produces a repeating hitch at a fifth of a second, regular enough that the eye picks up the rhythm even when it cannot name what is wrong. The video does not look broken. It looks slightly cheap, which is worse, because nobody files a bug about slightly cheap.
You paid that to satisfy a requirement that does not exist on the ingest spec. 25 is inside 23 to 60. Conforming 24fps material up to 30 is the same class of mistake: 30 ÷ 24 = 1.25, four frames become five.
Versely's default video frame rate is 25, not 24. That sits inside the Reels range with room on both sides, so your timeline rate is your export rate. No conform step. A frame rate problem can still appear earlier, on the way in: generative models publish their own output rates, and conforming 24fps clips onto a 25fps timeline is the arithmetic for that. Clip-to-timeline mismatch is a genuine problem. Timeline-to-platform mismatch usually is not. Frame interpolation is the tool for genuine rate conversion; it has real artefacts and should be a decision rather than a preset side effect.
Both codecs are accepted. H.264 is the file that will play in every editor, browser, phone, ad platform and review tool. HEVC compresses better at equivalent quality and is less universally supported outside Instagram — a HEVC master can be accepted by the platform and mishandled by a review tool the day before a launch. Use H.264 unless the file is going to Instagram and nowhere else.
On bitrate: the Graph API publishes a 25Mbps VBR ceiling, not a target. Export at a high constant quality under that ceiling and let the platform's transcode do what it is going to do anyway.
Three minutes is a discovery line, not the ingest ceiling
The Graph API accepts Reels from 3 seconds to 15 minutes. Instagram's in-app recording help currently allows clips up to 20 minutes on accounts that have the longer recorder, and states that Reels over 3 minutes will not be recommended to new audiences.
That 3-minute line is the one that matters for growth. Instagram's published ranking explanation lists watching a Reel all the way through among the top predictions for Reels ranking. A three-minute Reel already asks for three minutes of a prediction that gets harder to satisfy with every second you add. A twenty-minute Reel asks for more, and is ineligible for recommendation to strangers besides.
If you cannot say what the extra ninety seconds bought, they bought a lower completion rate. Retention curves on your own posts are the only version of this question with a real answer.
Models have their own length limits, so a long Reel is usually an assembly of several clips rather than one render.
One export recipe
| Setting | Value | Reason |
|---|---|---|
| Container | MP4, moov at front | Accepted; travels further than MOV downstream |
| Video codec | H.264, High profile | Accepted; widest compatibility outside the platform |
| Frame rate | Whatever the timeline is, if 23–60 | Inside the published range, so no conform |
| Resolution | 1080 x 1920 | 9:16, the recommended ratio |
| Duration | As short as the idea allows; keep ≤ 3 min if you want recommendations | Ingest is longer; discovery is not |
| Bitrate | High quality, under 25Mbps VBR | The published ceiling, not a target |
| Audio | AAC, 128kbps | Graph API pairing |
| Cover | Separate 1080 x 1920 JPEG under 8MB | Centre-cropped if not 9:16 |
One preset. Reuse it. The only field that changes between videos is duration.
If your source is a horizontal edit rather than a vertical one, the reframe happens on the timeline before this export, not in the export settings — generating vertically in the first place is the version with the least loss.
Iterate at preview resolution, export once
The failure mode this spec creates is re-exporting. A typo in a caption, export again. Music two seconds later, export again. Each is a full render at 1080 x 1920.
The EDL editor's answer is that the timeline is the artifact and renders come off it. Preview passes render at 480p at no credit cost — with a short per-user cooldown between them, so it is a working loop rather than an unlimited one — and a final export is charged once regardless of how many clips sit on the timeline. Forty clips with music and captions exports for the same single charge as a two-clip trim.
- Assemble everything on the timeline — clips, captions, music, overlays.
- Preview at 480p. Fix wording, timing and framing there, where fixing costs nothing.
- Run a review pass before committing — checking a video before you publish it reads on-screen text and gives per-timestamp beats.
- Export once, at the recipe above.
480p is enough to judge timing, wording and framing. It is not enough to judge compression artefacts, grain or fine detail — those only exist on the real export. The full preview-and-export cost model has the details.
FAQ
Should I export at 30fps because it is "standard for social"?
No, and the phrase is doing a lot of unexamined work. The Graph API publishes 23 to 60 as the accepted range. If your timeline is at 25, exporting at 25 is inside the range and involves no conversion; conforming to 30 forces a 1.2x rate change that duplicates one frame in five and shows up as a repeating hitch on any camera motion. The Help Center's 30fps minimum is a recommendation, not the ingest rule.
Is HEVC worth it for a Reel?
Rarely. The compression advantage is real, but at Reel durations and resolutions the file size difference is not the constraint on anything, and HEVC's narrower support outside Instagram is a live risk for any file that also goes to a client, an ad account or another platform. H.264 unless you have a specific reason.
What frame rate should generated clips be rendered at?
Whatever keeps them consistent with each other and with the timeline they are landing on — that is the constraint that actually matters, and it is decided before Instagram is involved. Versely's default timeline rate is 25. Once the sequence is coherent, export at the sequence rate; the ingest spec accepts anything from 23 to 60.
Does Instagram publish a bitrate target?
The Graph API publishes a VBR maximum of 25Mbps for video and lists AAC audio at 128kbps. That is a ceiling. Export at high constant quality under 25Mbps rather than trying to hit an invented figure. The platform runs its own transcode regardless.