How to convert a portrait video to 16:9 for twitter / x
- Step 1Decide what to keep before you reshape — A 16:9 crop of a portrait clip keeps only a horizontal centre strip. If your subject is centred vertically, the formatter alone works. If the action is at the top or bottom, pre-crop that region with the video-cropper so it sits in the centre first.
- Step 2Drop your vertical clip — Drag a
.mp4,.mov,.mkv,.webm,.avi,.m4v, or.tsportrait file in. The card shows sourcewidth×height(e.g. 1080×1920) so you can confirm it's portrait and see how much height the 16:9 crop will remove. - Step 3Run the formatter — Click Run X Format. There's no ratio or crop-position control — the crop is centred and the target is fixed at 16:9 → 1280×720. The only note confirms audio is AAC 128 kbps.
- Step 4Let it crop to a centre strip and scale — FFmpeg.wasm computes the 16:9 crop (full width, centred vertically), discards the top/bottom, scales to 1280×720, caps at 2:20, and encodes
libx264 -crf 20+aac 128kwith+faststart. - Step 5Preview the output before posting — Download the MP4 and play it. Confirm the kept strip actually contains your subject — the centre crop is unforgiving on portrait sources. If the head or captions got cut, re-do step 1 with the cropper.
- Step 6Post to X as native 16:9 — Attach the MP4. It now fills the X card with no pillarbox. For a batch of vertical clips, paid tiers process them sequentially.
What a 16:9 centre crop keeps from a portrait source
The formatter keeps full width and crops the height to 16:9, centred. The taller the source, the more is discarded. Verified against the crop math in lib/video/video-processor.ts (runSocialFormat).
| Portrait source | 16:9 crop kept | % of height kept | Output |
|---|---|---|---|
| 1080×1920 (9:16) | 1080×608 centred | ≈32% | 1280×720 |
| 1080×1350 (4:5) | 1080×608 centred | ≈45% | 1280×720 |
| 720×1280 (9:16) | 720×404 centred | ≈32% | 1280×720 |
| 1080×1080 (1:1) | 1080×608 centred | ≈56% | 1280×720 |
Your options for a vertical clip on X
The formatter is one of several routes — pick by what you want preserved. Only this formatter outputs 16:9.
| You want | Use | Result |
|---|---|---|
| 16:9 card filled, content centred | This formatter | Centre strip cropped + scaled to 1280×720 |
| A specific region of the portrait kept | video-cropper → this formatter | Pre-crop to centre, then reshape |
| Keep the whole vertical frame (9:16) | Post as-is or youtube-shorts-formatter | X pillarboxes it; Shorts formatter keeps 9:16 |
| Square or 4:5 instead of 16:9 | instagram-feed-formatter or auto-reframe | 1:1 / 4:5 output (not for X cards) |
Free-vs-paid limits for this tool
From the shared video tier family (lib/tier-limits.ts). One file per job; paid tiers batch sequentially.
| Tier | Max file size | Batch files / job |
|---|---|---|
| Free | 1 GB | 1 |
| Pro | 10 GB | 5 |
| Pro + Media | 100 GB | 50 |
| Developer | 100 GB | Unlimited |
Cookbook
Real portrait inputs and the exact 16:9 strip the formatter keeps. The crop is always the vertical centre, full width.
9:16 phone clip → centre strip only
A standard vertical phone video keeps just ~32% of its height. If the subject's face is in the upper third, it gets cropped off — pre-crop first if so.
Source : 1080x1920 (9:16)
targetAr = 16/9; sourceAr < targetAr
=> cropW = 1080 (full width)
cropH = round(1080 / (16/9)) = 608
Crop : 1080x608 centred (top/bottom 656px each gone)
Scale : -> 1280x720
Output : 1280x720 MP4Pre-crop the subject, then reshape
When the action isn't centred, crop the portrait to the region you want first. After cropping, that region sits centred, and the formatter's 16:9 crop frames it correctly.
Goal: keep the lower-third caption + speaker. 1) video-cropper: select that region of the 1080x1920 frame (e.g. 1080x720 lower band) 2) twitter-x-formatter -> centre 16:9 crop of THAT region -> 1280x720 MP4 framing the speaker
4:5 source loses less than 9:16
A 4:5 (Instagram-portrait) clip is less tall than 9:16, so the 16:9 crop keeps more of it (~45% of height) — but the top and bottom edges still go.
Source : 1080x1350 (4:5) Crop : 1080x608 centred (~371px off top, ~371 bottom) Scale : -> 1280x720 Output : 1280x720 MP4
Keep the whole vertical frame instead
If cropping loses too much, don't force 16:9. Post the vertical clip as-is (X pillarboxes it) or format it as a 9:16 Short. This formatter can't pad to keep the full frame.
Don't want to lose head/feet? - Post 9:16 directly (X adds side bars), OR - youtube-shorts-formatter (keeps 9:16, 60s cap) No letterbox/pad option exists in this formatter.
Square clip to 16:9
A 1:1 source keeps full width and crops top/bottom to 16:9 (~56% of height). Good when the subject sits in the middle band of the square.
Source : 1080x1080 (1:1) Crop : 1080x608 centred Scale : -> 1280x720 Output : 1280x720 MP4
Edge cases and what actually happens
Portrait subject's head cropped off
By designThe centre crop keeps only the vertical middle. A subject framed high (head near the top) loses their head. Pre-crop with the video-cropper to bring the head into the centre before formatting.
Burned-in captions at the bottom cropped
By designBottom-third captions sit outside the 16:9 centre strip and are removed. Crop to a region that includes them first, or re-add captions after formatting with the subtitle-burner.
You wanted letterbox/pad, not crop
Unsupported hereThis formatter never pads — it only crops. There is no fit-with-bars mode. To keep the whole vertical frame, post 9:16 (X pillarboxes) or use the youtube-shorts-formatter for a 9:16 output.
Output looks zoomed-in
ExpectedBecause a thin strip is scaled up to 720p, a tall portrait source can look 'zoomed.' That's the crop-then-upscale geometry. Less-tall sources (4:5, 1:1) look less zoomed; pre-cropping to a wider region also helps.
auto-reframe won't give 16:9
Different toolauto-reframe outputs only 9:16, 1:1, or 4:5 — not 16:9. For an X landscape card, this formatter is the tool; auto-reframe is for vertical/square targets.
Source dimensions can't be read
ErrorIf width/height can't be probed, the crop math fails with "Could not determine video dimensions." Re-mux via the video-transcoder first, then reformat.
Portrait clip over 2:20
Trimmed to 140sThe same pass caps length at 140 seconds. A long vertical clip is both truncated to 2:20 and cropped to 16:9. Pre-trim with the lossless-trimmer if you want a later section.
Already 16:9 landscape source
No cropA landscape source isn't a portrait conversion at all — no crop happens, just the downscale to 720p and re-encode. Use the standard 16:9 path; this portrait guide doesn't apply.
Very tall / unusual ratio (e.g. 9:21)
Heavy cropThe taller the source relative to 16:9, the more is discarded. An extreme vertical clip keeps a very thin band. Pre-crop is strongly recommended for anything taller than 9:16.
Batch of vertical clips
SequentialOn paid tiers, several portrait clips run one after another, each centre-cropped to 16:9 and scaled. Free tier does one at a time.
Frequently asked questions
Does it add black bars to keep my whole vertical frame?
No — it center-crops, never pads. A portrait source keeps full width but only a thin horizontal centre strip; the top and bottom are discarded. To keep the whole frame, post 9:16 (X pillarboxes it) or use the youtube-shorts-formatter.
How much of my portrait video survives the crop?
Full width, but only the 16:9-tall centre band. For a 9:16 source that's about 32% of the height; for 4:5 about 45%; for 1:1 about 56%. The rest is cropped off.
My subject's head got cut off — how do I fix it?
Pre-crop with the video-cropper to a region that centres your subject, then run the formatter. Its centre crop will then frame that region instead of the geometric middle.
Can I choose where the crop sits?
Not in this tool — the crop is always centred. Use the cropper first to position your content in the centre, then format.
Why does my converted clip look zoomed in?
A thin centre strip from a tall source is scaled up to 1280×720, which magnifies it. Less-tall sources (4:5, 1:1) look less zoomed, and pre-cropping a wider region reduces the effect.
Can auto-reframe do 16:9 for me?
No — auto-reframe only outputs 9:16, 1:1, or 4:5. For an X 16:9 card, this formatter is the right tool.
What if I want to keep it vertical for X?
You can post a 9:16 clip directly — X displays it pillarboxed in the card. Or format it as a 9:16 Short with the youtube-shorts-formatter (note: that's a 60s cap and 9:16, not X's spec).
Does it also trim to X's length limit?
Yes — the same pass caps length at 2:20 (140s). A long vertical clip is both trimmed and cropped. Pre-trim with the lossless-trimmer for a later segment.
What input formats are accepted?
MP4, MOV, MKV, WebM, AVI, M4V, and TS. Output is always 1280×720 MP4.
Is my clip uploaded anywhere?
No. The crop and encode run in-browser via FFmpeg.wasm. The file stays local; only an anonymous processed-count is logged for signed-in dashboards.
Can I convert several vertical clips at once?
Paid tiers batch: Pro 5, Pro + Media 50, Developer unlimited (sequential). Free does one at a time. Each is centre-cropped independently.
Will the colours or audio change?
Colour is converted to 8-bit yuv420p (HDR is tone-mapped to SDR); audio is re-encoded to AAC 128 kbps. Both are standard for X playback. There are no colour or audio controls in this tool.
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.