Video sizes and aspect ratios by platform (updated)

Contents
Contents

The short answer: render vertical 9:16 at 1080 × 1920 for TikTok, Instagram Reels and Stories, YouTube Shorts and Facebook Stories. Render 16:9 at 1920 × 1080 for regular YouTube videos and landscape posts on LinkedIn and X. For feed posts, 4:5 at 1080 × 1350 works on LinkedIn, and Meta’s Facebook Feed ad guide asks for 4:5 at 1440 × 1800. Pinterest suggests 2:3 or 9:16, with 1:1 as the fallback.

Vertical is now the default, not the exception. YouTube Shorts average more than 200 billion daily views, according to YouTube CEO Neal Mohan’s 2026 letter, and Reels took 46% of the time US users spent on Instagram in 2025, up from 37% in 2024, per Sensor Tower data reported by CNBC. Those four shapes cover almost every placement.

The details below come from each platform’s own help or developer docs, checked in October 2026. Most are ad or API specs, because those are the pages where platforms publish exact numbers. Every row cites its source.

The second half is for developers who render video with code. It shows what the Shotstack Edit API actually outputs for each resolution and aspectRatio combination, measured with ffprobe on real renders. It also covers one non-obvious result: 4:3 does not give you 1440 × 1080.

TL;DR

  • Four shapes cover nearly every placement: 9:16 (1080 × 1920), 16:9 (1920 × 1080), 4:5 (1080 × 1350) and 1:1 (1080 × 1080).
  • 1080 × 1920 is the one vertical size every platform accepts, even where Meta recommends 1440 × 2560.
  • Frame rate has a floor and a ceiling: 25 fps passes every limit we found, 15 fps and 60 fps do not.
  • In Shotstack, resolution plus aspectRatio gives you the presets; size gives you any custom shape up to 3840 px a side.
  • The 4:3 preset renders 1080 × 810, not 1440 × 1080. Use size when you need the latter.
  • One timeline can be rendered to every shape by changing only the output object.

Platform reference table

Platform and placementAspect ratioSize to renderLimits from the platform’s docs
YouTube (regular videos)16:91920 × 1080, or 3840 × 2160 for 4K”The standard aspect ratio for YouTube on a computer is 16:9.” Vertical and square uploads play in a player that adapts to them. MP4, H.264, AAC-LC audio.
YouTube Shorts9:16 (or 1:1)1080 × 1920A square or vertical upload of up to 3 minutes counts as a Short (uploads from 15 Oct 2024 on). Shorts over 1 minute with an active copyright claim are blocked.
TikTok (Content Posting API)9:161080 × 1920360 to 4096 px on each side. 23 to 60 fps. Up to 4 GB. MP4 and H.264 recommended.
TikTok ads (In-Feed, non-Spark)9:16, 1:1 or 16:91080 × 1920Minimums: 540 × 960 (9:16), 640 × 640 (1:1), 960 × 540 (16:9). At least 516 kbps. Up to 500 MB and 10 minutes.
Instagram Reels (Graph API)9:16 recommended1080 × 1920Width up to 1920 px. Any ratio from 0.01:1 to 10:1 is accepted, but 9:16 avoids cropping. 23 to 60 fps. 3 s to 15 min. 300 MB.
Instagram Stories (Graph API)9:16 recommended1080 × 1920Same codec rules as Reels. 3 to 60 s. 100 MB.
Instagram Reels ads, Instagram and Facebook Stories ads9:161440 × 2560 (Meta’s figure) or 1080 × 1920Keep 14% at the top, 35% at the bottom and 6% at each side clear of text and logos. 4 GB.
Instagram Feed ads9:161080 × 1920Meta’s current guide lists 9:16 with a 1% aspect ratio tolerance. Minimum width 250 px.
Facebook Feed ads4:51440 × 1800 (Meta’s figure) or 1080 × 1350H.264, fixed frame rate, progressive scan, stereo AAC at 128 kbps or more. Minimum 120 × 120 px.
LinkedIn (video ads)16:9, 1:1, 4:5 or 9:161920 × 1080 or 1080 × 1350Maximums: 1920 × 1080 (16:9), 1920 × 1920 (1:1), 1080 × 1350 (4:5), 1080 × 1920 (9:16). “Less than 30 FPS.” 3 s to 30 min. 75 KB to 500 MB.
X (API uploads)16:9 or 1:1 recommended1280 × 720, 720 × 1280 or 720 × 720Ratio must be between 1:3 and 3:1. 60 fps or less. Square pixels. AAC-LC audio. X’s docs say subscribed users can upload 1080p.
Pinterest (video ads)1:1, 2:3 or 9:161080 × 1620 (2:3) or 1080 × 1920MP4, MOV or M4V. H.264 or H.265. Up to 2 GB. 4 s to 15 min.

Where a platform gives a size, the table uses it. Where it gives only a ratio or a range, the “size to render” column uses the 1080-wide version of that ratio. That size is inside every limit listed for that row.

Four things the table hides

The 1:1 fallback is weaker than it used to be

Every platform above accepts square video, but none of the pages we checked names square as its first choice. Meta’s ad guide now lists 9:16 even for the Instagram Feed. Render square only when one file has to go everywhere.

Frame rate has a floor and a ceiling

TikTok’s posting API and Instagram’s Graph API both require 23 to 60 fps. LinkedIn’s ad spec says “less than 30 FPS”. A 25 fps render works on all three. A 12 or 15 fps render (fine for a GIF) is below TikTok’s and Instagram’s API minimum, and 60 fps is outside LinkedIn’s ad limit.

Meta suggests 1440 × 2560 for Reels and Stories ads, but the Instagram Graph API caps Reels width at 1920 px, and LinkedIn caps 9:16 at 1080 × 1920. If one vertical file goes to several platforms, 1080 × 1920 is the size every one of them accepts.

Safe zones matter more than pixel size

On a 1080 × 1920 frame, Meta’s 14% / 35% / 6% guidance means keeping text out of the top 269 px, the bottom 672 px and 65 px on each side. That leaves roughly the middle half of the frame for captions, prices and logos. Text placed in the center of the frame stays clear of those margins.

How to output each size with the Shotstack Edit API

In a Shotstack edit, the output object sets the frame. You can use a preset resolution with an aspectRatio, or a custom size in pixels. The API reference lists the presets: 16:9 (default), 9:16, 1:1, 4:5 and 4:3. Custom sizes must be divisible by 2 and can be up to 3840 px on each side.

The reference gives pixel sizes for the presets only in 16:9. To see what the other ratios produce, we rendered a 2-second test edit on the Stage (sandbox) API for each combination and read the output with ffprobe:

output settingsMeasured output sizeFrame rate
"resolution": "1080", "aspectRatio": "16:9"1920 × 108025 fps
"resolution": "1080", "aspectRatio": "9:16"1080 × 192025 fps
"resolution": "1080", "aspectRatio": "1:1"1080 × 108025 fps
"resolution": "1080", "aspectRatio": "4:5"1080 × 135025 fps
"resolution": "1080", "aspectRatio": "4:3"1080 × 81025 fps
"resolution": "hd", "aspectRatio": "9:16"720 × 128025 fps
"resolution": "hd", "aspectRatio": "4:5"720 × 90025 fps
"resolution": "sd", "aspectRatio": "9:16"576 × 102425 fps
"size": {"width": 1080, "height": 1350}1080 × 135025 fps
"size": {"width": 1080, "height": 1920}1080 × 192025 fps

The pattern: for every ratio we tested except 16:9, the width is the short side of the preset (1080 for 1080, 720 for hd, 576 for sd), and the height follows from the ratio. That is why 1080 with 4:3 gives 1080 × 810 and not the 1440 × 1080 many people expect. If you need 1440 × 1080, set it with size.

The default frame rate is 25 fps, which is inside every platform limit above. Set fps only if your source footage needs it.

Which output to use for each platform

TargetShotstack outputResult
TikTok, Reels, Shorts, Stories"resolution": "1080", "aspectRatio": "9:16"1080 × 1920
LinkedIn or Facebook feed, 4:5"resolution": "1080", "aspectRatio": "4:5"1080 × 1350
LinkedIn 4:5 at LinkedIn’s recommended size"resolution": "hd", "aspectRatio": "4:5"720 × 900
YouTube, landscape LinkedIn and X"resolution": "1080", "aspectRatio": "16:9"1920 × 1080
X portrait at X’s recommended size"resolution": "hd", "aspectRatio": "9:16"720 × 1280
Pinterest 2:3 (no preset)"size": {"width": 1080, "height": 1620}1080 × 1620
Meta’s 1440 × 2560"size": {"width": 1440, "height": 2560}1440 × 2560, treat as a 4K job
YouTube 4K"resolution": "4k"3840 × 2160, needs a 4K plan

For X’s recommended 1280 × 720 landscape size, the documented hd preset is 1280 × 720.

The API reference says video above 1920 × 1080 pixels needs a plan that includes 4K. Meta’s 1440 × 2560 is about 3.7 million pixels, against 2.1 million for 1080p, so plan for it as a 4K render, or use 1080 × 1920, which Meta’s own Instagram Feed spec lists. See pricing for which plans include 4K.

Render one edit to every shape

Because the shape lives in output and not in the timeline, you can send the same timeline several times with a different output each time. The script below renders one edit (a 16:9 video clip with a centered title) in five shapes. It uses Node 18 or later and the Stage environment, and needs a SHOTSTACK_API_KEY environment variable.

// Render one edit to several platform sizes with the Shotstack Edit API.
// Node 18+. Set SHOTSTACK_API_KEY first. Uses the stage (sandbox) environment.
const API = 'https://api.shotstack.io/edit/stage';
const headers = { 'x-api-key': process.env.SHOTSTACK_API_KEY, 'content-type': 'application/json' };

const timeline = {
  background: '#000000',
  tracks: [
    { clips: [{
        asset: { type: 'rich-text', text: 'Same edit, any shape',
                 font: { family: 'Open Sans', size: 64, weight: '700', color: '#ffffff' },
                 align: { horizontal: 'center', vertical: 'middle' } },
        start: 0, length: 5, width: 900, height: 300, position: 'center' }] },
    { clips: [{
        asset: { type: 'video', src: 'https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/footage/beach-overhead.mp4' },
        start: 0, length: 5, fit: 'crop' }] }
  ]
};

const outputs = {
  'vertical-9x16': { format: 'mp4', resolution: '1080', aspectRatio: '9:16' }, // TikTok, Reels, Shorts, Stories
  'feed-4x5':      { format: 'mp4', resolution: '1080', aspectRatio: '4:5' },  // feed posts
  'square-1x1':    { format: 'mp4', resolution: '1080', aspectRatio: '1:1' },
  'pin-2x3':       { format: 'mp4', size: { width: 1080, height: 1620 } },     // no 2:3 preset, so use size
  'landscape-16x9':{ format: 'mp4', resolution: '1080', aspectRatio: '16:9' }  // YouTube, LinkedIn, X
};

for (const [name, output] of Object.entries(outputs)) {
  const res = await fetch(`${API}/render`, { method: 'POST', headers, body: JSON.stringify({ timeline, output }) });
  const { response } = await res.json();
  let status;
  do {
    await new Promise(r => setTimeout(r, 5000));
    status = (await (await fetch(`${API}/render/${response.id}`, { headers })).json()).response;
  } while (!['done', 'failed'].includes(status.status));
  console.log(name, status.status, status.url ?? status.error);
}

Save it as render-sizes.mjs and run node render-sizes.mjs. We ran it as shown. All five renders finished, and ffprobe read them as 1080 × 1920, 1080 × 1350, 1080 × 1080, 1080 × 1620 and 1920 × 1080, each 5 seconds at 25 fps. Stage renders carry a Shotstack watermark. Switch the URL to the production environment for clean files.

What happens to a source that doesn’t match the frame

The fit property on each clip decides what happens when the source’s shape differs from the output. The API reference defines four options:

  • crop (the default) scales the source to fill the frame and crops whatever spills over.
  • contain fits the whole source inside the frame, which leaves empty space at the sides or top and bottom.
  • cover stretches the source to fill the frame without keeping its ratio.
  • none keeps the source’s own pixel size.

crop is usually right for social video, but check the numbers. The test clip above is 1280 × 720. To fill a 9:16 frame, crop keeps a 405 × 720 slice from the middle (about 32% of the width) and scales it up about 2.7 times to reach 1920 px tall.

Anything near the left or right edge of a landscape source disappears, and low-resolution sources go soft. If most of your output is vertical, start from vertical or higher-resolution footage.

Text and image sizes are set in pixels, so a 64 px title takes up a much larger share of a 1080-wide vertical frame than of a 1920-wide landscape one. Check the vertical render first, because that frame is the narrowest.

One timeline, every platform size: render it with Shotstack

You now have the sizes each platform asks for, the frame rate window they share, and the exact output setting that produces each one. Because the shape is an output property, not a timeline property, one edit can be rendered to every placement without touching the clips.

Sign up for a free Shotstack API key and run the script above on the sandbox. Five renders later you will have the same video in every shape your channels need.

Frequently asked questions (FAQs)

What video size should I use for TikTok, Reels and Shorts?

Render 9:16 at 1080 × 1920. It sits inside the limits published by TikTok’s posting API, Instagram’s Graph API, Meta’s ad guides and YouTube’s Shorts rules. In Shotstack that is "resolution": "1080", "aspectRatio": "9:16".

Why does the 4:3 preset not give me 1440 × 1080?

For every ratio except 16:9, the preset’s number sets the short side. 1080 with 4:3 renders 1080 × 810. To get 1440 × 1080, set "size": {"width": 1440, "height": 1080} instead of a preset.

Can I render 4K or Meta’s 1440 × 2560 size?

Yes, with "resolution": "4k" or a custom size. Any output above 1920 × 1080 pixels, including 1440 × 2560, needs a plan that includes 4K, and the maximum is 3840 × 2160 pixels in any orientation.

What happens to a landscape clip in a vertical frame?

With the default fit: "crop", Shotstack scales the clip to fill the frame and crops the sides. A 1280 × 720 source keeps about a third of its width in a 9:16 frame. Use contain to keep the whole picture with empty space, or start from vertical footage.

Sources

Platform limits in the reference table come from these pages, checked in October 2026.

Get started with Shotstack's video editing API in two steps:

  1. Sign up for free to get your API key.
  2. Send an API request to create your video:
    curl --request POST 'https://api.shotstack.io/v1/render' \
    --header 'x-api-key: YOUR_API_KEY' \
    --data-raw '{
      "timeline": {
        "tracks": [
          {
            "clips": [
              {
                "asset": {
                  "type": "video",
                  "src": "https://shotstack-assets.s3.amazonaws.com/footage/beach-overhead.mp4"
                },
                "start": 0,
                "length": "auto"
              }
            ]
          }
        ]
      },
      "output": {
        "format": "mp4",
        "size": {
          "width": 1280,
          "height": 720
        }
      }
    }'
Jesus Rojas

BY JESUS ROJAS

Published October 26, 2026

Jesus Rojas is a Growth Engineer at Shotstack, combining engineering and experimentation to help developers adopt video APIs. He builds onboarding experiences, lifecycle automation and analytics. Outside work, he enjoys making music and plays several instruments. More from Jesus

Studio Real Estate
Experience Shotstack for yourself.
SIGN UP FOR FREE