Twitter video ad specs: X Ads sizes, length, and file rules

X recommends video ads of 15 seconds or less, up to 1 GB (ideally under 30 MB), H.264 at 29.97 or 30 fps, in six sizes from 9:16 to 1.91:1.

5 min readSume
All posts

X (Twitter) recommends video ads of 15 seconds or less, with up to 2:20 supported, as an MP4 or MOV file of up to 1 GB, though it strongly recommends keeping files under 30 MB. Use H.264 with a 4:2:0 color space, AAC-LC audio, and 29.97 or 30 fps, in one of six sizes: 1080×1080 (1:1), 1920×1080 (16:9), 1080×1920 (9:16), 2064×1080 (1.91:1), 1440×1800 (4:5), or 1080×1620 (2:3). A Sume Timeline 1.0 render can produce any of those sizes at 30 fps and an exact length, but it can't target a bitrate, so check the file size before you upload.

X's figures are quoted from its X Ads creative specs page, read on 2026-09-28; X can change them. Sume facts come from the Timeline 1.0 and Video inspect docs, the Sume API reference, and Sume's media compiler as it works today. For organic Posts uploaded through the X API, see X (Twitter) video upload specs.

What are X's video ad specs?

These lines apply to any Video Ad on X. Each ad type then adds its own size notes, covered in the next section.

From X's X Ads creative specs, read 2026-09-28.
SpecX's spec
File typeMP4 or MOV
File size1 GB max; X strongly recommends keeping files under 30 MB
Length15 seconds or less recommended; up to 2:20 supported (select advertisers can request up to 10 minutes)
Frame rate29.97 or 30 fps; higher is acceptable, up to 60 fps
Video codecH.264, Baseline, Main, or High profile, with a 4:2:0 color space
Video bitrate6,000–10,000k for 1080p (6,000k recommended); 5,000–8,000k for 720p (5,000k recommended)
Audio codecAAC LC (low complexity)
CaptionsClosed captioning or text overlays strongly recommended
BrandingA logo, if used, persistent in the upper left hand corner
LoopingVideos under 60 seconds loop

What size should a Twitter video ad be?

X lists the same six aspect ratios for every video ad type, then recommends sizes per type:

  • The six ratios: 1:1 at 1080×1080, 16:9 at 1920×1080, 9:16 at 1080×1920, 1.91:1 at 2064×1080, and the newer 4:5 at 1440×1800 and 2:3 at 1080×1620.
  • Standalone video ads: 1200×1200 for 1:1 and 1920×1080 for 16:9. X says larger videos are better optimized for when people click to expand them.
  • Video ads with a website card or app buttons: 800×450 for 16:9 and 800×800 for 1:1.
  • Vertical Video Ads, a full-screen, sound-on unit in X's Immersive Media Viewer: 9:16 recommended, from 720×1280 up to 1080×1920, up to 60 fps, a 25 Mbps maximum and a 5–10 Mbps target bitrate, and under 15 seconds recommended.

How do I make an X video ad with Sume?

Generate the shots, then conform them in one POST /v1/timeline-1.0/render. It reads only your workspace's media.sume.com files, such as earlier Sume outputs (which URLs each endpoint takes), and needs an Idempotency-Key. Today its sound comes only from the audio spine and an optional soundtrack, not from the clips.

  • output.width and output.height take even integers from 256 to 2160, so all six of X's sizes are exact.
  • output.fps: 30. Timeline renders at 24, 25, 30, or 60 fps, with no 29.97 option.
  • audio.duration_seconds: 15, the longest length X recommends. It sets the output length.
  • 4:5 and 2:3: today no Sume video model lists either ratio, so render them from a 9:16 clip. fit is a scale/crop mode, cover by default.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: x-ad-4x5-001" \
  -d '{
    "audio": {
      "url": "https://media.sume.com/artifacts/artf_demo/voice.wav",
      "duration_seconds": 15
    },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/shot-1.mp4", "start": 0, "duration": 8 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/shot-2.mp4", "start": 8, "duration": 7 }
    ],
    "output": { "width": 1440, "height": 1800, "fps": 30 }
  }'

Can I keep a Sume render under X's 30 MB suggestion?

Not by setting it. Today Timeline encodes H.264 with libx264 at a constant quality (-crf 20) in yuv420p (4:2:0), with AAC audio at 192 kbps, and it refuses codec, crf, and other encoder keys with a 400. The file size follows the picture, so check each render:

  • Run POST /v1/video-inspect with frames: false on the render's video_url. That probe is unbilled and returns size_bytes, duration_seconds, fps, and pix_fmt.
  • Average bitrate is size_bytes × 8 ÷ duration_seconds, audio included (how to check a video's bitrate).
  • If a file is over 30 MB, cut it shorter or render a smaller frame (how to reduce video file size).

What can't a Sume render do for an X ad?

  • Pin a logo to the upper left corner, where X asks a persistent logo to sit. Timeline compose overlays a still at top, center, or bottom, and today it always centers the still horizontally, so there is no corner position.
  • Caption long ads. Sume's caption API burns captions into the picture (burn captions onto a video), but today the caption job refuses a source over 60 seconds or one with no audio stream.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume