How to square-crop a video for a consistent instagram grid
- Step 1Open the formatter for each grid clip — Go to instagram-feed-formatter and drop the first clip. It loads via FFmpeg.wasm — no upload. Free tier squares one file at a time; Pro lets you queue up to 5, Pro + Media up to 50.
- Step 2Keep Ratio on 1:1 for every clip — The only control is Ratio. For grid consistency, use
1:1on every clip so the whole grid is square. (Mixing 1:1 and 4:5 across posts is exactly what makes a grid look uneven.) - Step 3Standardise framing before squaring — Because the crop is centred, footage where the subject sits off-centre will be clipped differently than centred footage. For a uniform look, frame subjects centrally — or pre-crop inconsistent clips with video-cropper so the centre square lands where you want on each one.
- Step 4Run the square pass — JAD crops the centre square, scales to 1350×1350 with
flags=lanczos, and encodes H.264 CRF 20. Repeat for each clip so they all share the identical output spec. - Step 5Watch the 60-second cap on each clip — Each clip is trimmed to its first 60 seconds. For grid teasers that's usually fine; if you need a specific window from a longer clip, trim with lossless-trimmer first.
- Step 6Post them as a consistent set — Every download is a 1350×1350 H.264 MP4. Posted together (or in a planned grid), they tile uniformly because they share resolution, ratio, and codec profile.
Why the square pass yields a consistent grid
Properties that are identical across every clip you run, from runSocialFormat (Ratio = 1:1).
| Property | Value (same on every clip) | Grid effect |
|---|---|---|
| Output resolution | 1350×1350 | All thumbnails the same size — no odd one out |
| Crop position | Geometric centre ((in_w-W)/2, (in_h-H)/2) | Same source ratio → same crop, so framing is predictable |
| Scaler | scale=1350:1350:flags=lanczos | Uniform sharpness across the grid |
| Codec / quality | H.264 CRF 20, yuv420p | Consistent visual quality after Instagram re-encode |
| Audio | AAC 128k | Same audio handling on every post |
| Length | First 60 s | Predictable teaser length |
Source ratio → how the centre square lands
To keep a grid uniform, know what the centre square keeps for each common source.
| Source ratio | Centre square keeps | Plan for grid use |
|---|---|---|
| 16:9 landscape | Centre column (sides dropped) | Centre your subject before squaring; edge subjects break uniformity |
| 9:16 vertical | Middle band (top + bottom dropped) | Keep action mid-frame; bottom captions are cut |
| 1:1 square source | Whole frame (re-encode only) | Cleanest — already grid-ready, just re-encoded to spec |
| 4:5 portrait source | Centre square (a little off top + bottom) | Safe for centred subjects |
| 21:9 ultra-wide | Narrow centre square (heavy side crop) | Reframe first or it stands out against tighter clips |
Cookbook
Squaring a mixed batch for a uniform grid. Same centre-crop math runs on every file.
Three mixed-source clips squared to one grid spec
A grid row mixing a 16:9 landscape, a 9:16 vertical, and a 1:1 export. Running each at Ratio 1:1 yields three identical-spec squares that tile cleanly — the whole point of standardising.
Clip A: 1920x1080 → crop 1080x1080 centre → scale 1350x1350 Clip B: 1080x1920 → crop 1080x1080 centre → scale 1350x1350 Clip C: 1080x1080 → crop 1080x1080 (no edges) → scale 1350x1350 All three: libx264 -crf 20 -pix_fmt yuv420p, AAC 128k, faststart Result: 3 x 1350x1350 MP4 — uniform grid row.
Off-centre subject breaks uniformity — fix before squaring
One clip in the set frames the subject in the left third. Squared as-is, the subject is half-cut while the rest of the grid is centred — the odd one out. Pre-crop it to centre the subject, then square.
Problem clip: 1920x1080, subject in LEFT third Square as-is → centre crop cuts the subject in half Fix: 1. video-cropper → crop to a centred region around the subject 2. instagram-feed-formatter → Ratio 1:1 → now matches the centred framing of the rest of the grid
Standardising old square exports to the current spec
Older posts were 1080×1080; newer ones are 1350×1350. Re-running the legacy clips through the 1:1 pass bumps them to 1350 so the whole back-catalogue shares one resolution.
Legacy: 1080x1080 → 1:1 pass → 1350x1350 (mild Lanczos upscale) Current: already 1350x1350 Now every video post is 1350x1350 H.264 CRF 20. Note: re-encoding adds one compression generation to the legacy clips.
Vertical clip squared with action kept mid-frame
A 9:16 clip where the subject is centred vertically. The square crop trims equal bands top and bottom, keeping the action — safe for the grid.
Source: 1080x1920 (9:16), action centred vertically Ratio: 1:1 Crop: crop=1080:1080:0:(1920-1080)/2 (420px off top + bottom) Scale: 1350x1350 If there were captions in the bottom 420px they'd be lost — check each vertical clip before batching.
Squaring a 70-second clip for a grid teaser
A 70-second clip used as a grid teaser. Only the first 60 seconds are kept — usually fine for a teaser, but plan the hook to land early.
Source: 70s, 1920x1080 Ratio: 1:1 Applied: -t 60 (first minute), then centre square + scale 1350 For a teaser, front-load the hook in the first 60s, or pre-cut with lossless-trimmer for an exact window.
Edge cases and what actually happens
Off-centre subject clipped differently than the rest of the batch
By designThe crop is fixed at frame centre, so a subject placed off-centre in one clip is cut differently than centred clips — breaking grid uniformity. Pre-crop the outlier with video-cropper to put the subject where the centre square will land, then square it.
Mixing 1:1 and 4:5 across posts
InconsistentFor a uniform grid, square every video post (Ratio 1:1). The tool also offers 4:5, but mixing ratios across posts is exactly what makes a grid look uneven. Pick one ratio for the whole set — see the 4:5 portrait guide if you decide the whole grid should be portrait instead.
Legacy 1080×1080 clips upscaled to 1350
ExpectedTo match newer 1350×1350 posts, older 1080-square clips are Lanczos-upscaled. Mild upscaling is visually clean, but it is still interpolation plus a fresh compression generation. Acceptable for grid consistency; if pixel-perfect fidelity matters, keep the legacy size and accept a slightly smaller thumbnail.
Ultra-wide clip stands out in an otherwise tight grid
By designA 21:9 source squared keeps only a narrow centre column, so its composition can look very different from 16:9 clips in the same grid. Reframe ultra-wide footage with video-cropper before squaring so it matches the framing density of the rest.
Source longer than 60 seconds trimmed
By designEach clip is capped at its first 60 seconds (-t 60). For grid teasers, design the hook to land in the first minute, or cut the exact window with lossless-trimmer before squaring.
Could not determine video dimensions
ErrorIf FFmpeg.wasm can't probe a clip's dimensions, the square pass throws before encoding. Re-mux or transcode the offending file (web-optimizer or video-transcoder) so the whole batch can be standardised.
10-bit clip mixed with 8-bit clips
ExpectedOutput is always yuv420p 8-bit, so a 10-bit source is converted to 8-bit during the square pass. That actually aids grid consistency (all clips end up 8-bit SDR), but colour may shift from the original 10-bit grade. Grade before squaring if exact colour matters across the set.
Odd-pixel source
PreservedEven crop and output dimensions are enforced before encoding, so an odd-pixel screen recording squares without a libx264 dimension error. 1350×1350 is even, so the grid target is always valid.
Free tier can only square one file at a time
Tier limitFree tier processes one file per run (1 GB cap). For a grid's worth of clips, Pro queues 5, Pro + Media 50, and Developer is unbatched. You can still square a whole grid on free tier — just one clip per pass.
Already-spec clip re-encoded
ExpectedA clip already at 1350×1350 H.264 still gets re-encoded (no stream-copy path), adding a compression generation. If a clip is already grid-spec and you only want it smaller, use a compressor instead of re-squaring.
Frequently asked questions
How does this keep my grid consistent?
Every clip you run gets the identical treatment — centre crop, 1350×1350, H.264 CRF 20, yuv420p. There is no per-file randomness or auto-framing, so the same source ratio always produces the same square. Run all your video posts through the 1:1 pass and they share resolution, ratio, and codec profile, which is what makes a grid read as uniform.
Should I square everything to 1:1 or could 4:5 also be consistent?
Either works for consistency — the key is to pick one ratio for the whole set. A grid of all-1:1 squares or all-4:5 portraits both look uniform; mixing the two is what looks uneven. This tool does both ratios; for grid work, choose one and apply it to every clip.
Will the crop chase my subject to keep framing consistent?
No — it is a fixed centre crop with no subject tracking. That is deterministic (good for consistency) but unforgiving: a subject placed off-centre in one clip is cut while centred clips are not. Pre-frame inconsistent clips with video-cropper so the centre square lands the same way on each.
What resolution do all the squares come out?
1350×1350. Output height is fixed at 1350 and a square sets width equal to height. One resolution across all your video posts means consistent grid thumbnails — and the 1080×1080 minimum is comfortably exceeded, so Instagram's downsample starts from clean pixels.
Can I square a whole batch at once?
Free tier is one file per run; Pro queues up to 5, Pro + Media up to 50, and Developer is unbatched. For true unattended batches, Developer can drive @jadapps/runner locally — GET /api/v1/tools/instagram-feed-formatter, then POST each file to 127.0.0.1:9789/v1/tools/instagram-feed-formatter/run with { ratio: '1:1' }.
Do my clips get uploaded?
No. Squaring runs in your browser through FFmpeg.wasm; files never leave the tab. Signed-in accounts have a single processed counter recorded server-side with no content. Nothing about your grid is sent anywhere.
What about clips already exported square?
They re-encode to the current 1350×1350 spec (mild upscale from 1080) so they match newer posts. Note re-encoding adds one compression generation. If a clip is already 1350×1350 H.264 and you only want a smaller file, use a compressor rather than re-squaring.
What codec and quality is applied to every clip?
H.264 (libx264, preset medium, CRF 20), yuv420p, AAC 128k, +faststart. CRF 20 is constant-quality, so quality is uniform across the batch with no per-clip slider to drift. The only control is Ratio.
Will it watermark my videos or require an account?
No watermark, and you can square clips on the free tier without signing in. An account only raises limits (Pro 10 GB / 5 files; Pro + Media 100 GB / 50 files; Developer unlimited batch).
My grid mixes landscape and vertical sources — will they match?
They will share the same output spec (1350×1350) but the centre crop keeps different parts of each. Landscape keeps the centre column; vertical keeps the middle band. For a truly matched look, pre-frame each so the subject is centred, then square. The output resolution is always identical regardless.
How long can each grid clip be?
Each is trimmed to its first 60 seconds (Instagram's feed limit). For teasers, front-load the hook; for a precise window from a longer clip, cut it with lossless-trimmer first, then square.
Can I make a uniform 9:16 grid of Reels instead?
Not with this tool — it only does 1:1 and 4:5, the feed ratios. A Reels grid is rendered from 9:16 video produced elsewhere; standardise those with youtube-shorts-formatter (9:16, 1920 tall) or auto-reframe so they share one vertical spec.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.