video-encodingffmpegsocial-video

LinkedIn Video Specs That Survive the Upload (2026)

·Javid Jamae·10 min read
LinkedIn Video Specs That Survive the Upload (2026)

Your video plays fine everywhere else, then LinkedIn rejects it, stretches it, or hands back something soft and letterboxed. The spec tables you find are copies of each other, and none tell you what to type to hit those numbers.

Quick answer: LinkedIn video specs accept MP4 with H.264 video and AAC audio, from 256x144 up to 4096x2304, 10 to 60 fps, 192 Kbps to 30 Mbps, with a 5 GB and 10-minute ceiling on organic posts against roughly 200 MB and 30 minutes for video ads. You can hit those specs yourself with ffmpeg -i in.mp4 -vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:-1:-1,setsar=1" -c:v libx264 -crf 21 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart out.mp4, or send one source to FFmpeg Micro and get the 16:9, 1:1, 4:5 and 9:16 variants back from a single API call with no encoder to host and no re-export queue.

Conventional wisdom says LinkedIn is the forgiving platform: wide codec support, a 5 GB ceiling, almost any aspect ratio between 1:2.4 and 2.4:1. Most uploads confirm it. But the uploads that fail don't fail on codec support, they fail on which ceiling applies. The same MP4 that sails through as an organic post gets rejected in Campaign Manager, because organic and ads are two different limit sets on one platform, and the ad set is roughly 25 times tighter on file size.

The LinkedIn video specs that actually gate an upload

LinkedIn publishes its limits in its Help Center for organic posts and in its Campaign Manager ad requirements, and the two sets disagree in ways that matter. The numbers below cause a rejection or a visible quality drop; the rest of the spec sheet is headroom you'll never touch.

SpecOrganic postVideo ad
ContainerMP4 (also MOV, WebM, MKV, FLV)MP4
Video codecH.264 High profileH.264 High profile
Audio codecAAC-LC, 128 Kbps+, 48 kHz stereoAAC-LC, 128 Kbps+
Resolution256x144 to 4096x2304256x144 to 4096x2304
Frame rate10 to 60 fps10 to 60 fps
Bitrate192 Kbps to 30 Mbpswhatever fits 200 MB
Duration3 seconds to 10 minutes3 seconds to 30 minutes
File size75 KB to 5 GB75 KB to 200 MB
Aspect ratio1:2.4 to 2.4:11:2.4 to 2.4:1

Two entries in that table are traps. The 30 Mbps upper bitrate is pointless to chase, because LinkedIn re-encodes every upload for delivery, so a 28 Mbps master reaches the viewer at the same delivery bitrate as a 6 Mbps one. And the 10 fps lower bound catches screen recordings: a variable-frame-rate capture from OBS or a low-activity Loom can report an average below 10 fps and get bounced without a useful error.

One reusable encode per shape

Four shapes cover everything LinkedIn shows: 16:9 at 1920x1080 for landscape, 1:1 at 1080x1080, 4:5 at 1080x1350 for the feed, and 9:16 at 1080x1920 for full-screen and stories-style placements. One command template handles all four; only the two numbers change.

# 4:5 feed video, 1080x1350
ffmpeg -i source.mp4 \
  -vf "scale=1080:1350:force_original_aspect_ratio=decrease,\
pad=1080:1350:-1:-1:color=black,setsar=1" \
  -c:v libx264 -profile:v high -level 4.1 -preset medium -crf 21 \
  -pix_fmt yuv420p -r 30 \
  -c:a aac -b:a 128k -ar 48000 -ac 2 \
  -movflags +faststart li-4x5.mp4

Swap 1080:1350 for 1920:1080, 1080:1080, or 1080:1920 in both the scale and pad filters and you have the other three. force_original_aspect_ratio=decrease fits the source inside the box without distortion, pad fills the remainder, and -1:-1 centers the padded image (the pad filter treats -1 as "center this axis"). setsar=1 is the flag people skip, and it's why some LinkedIn uploads come back horizontally stretched: if the source carries a non-square pixel aspect ratio, LinkedIn's transcoder honors it.

For 9:16 out of a 16:9 master, padding gives you a mostly black frame with a 1080x608 strip in the middle. Crop instead when the subject sits center-frame:

ffmpeg -i source.mp4 \
  -vf "crop=trunc(ih*9/16/2)*2:ih,scale=1080:1920,setsar=1" \
  -c:v libx264 -crf 21 -preset medium -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart li-9x16.mp4

The trunc(...)/2)*2 wrapper is there because ih*9/16 on a 1080-tall source is 607.5, and libx264 refuses odd dimensions. That's the same failure behind the height not divisible by 2 error on user uploads.

4:5 is the shape worth rendering for the feed

A 4:5 render at 1080x1350 is the highest-value variant, because it occupies 25% more vertical height in the feed than a 1:1 at the same width, and roughly twice the height of a 16:9 landscape clip, which renders around 1080x608. If you only encode one shape for organic posting, make it 4:5. Reserve 16:9 for anything with a screen share, a slide, or on-screen text laid out horizontally, where cropping to a taller box would cut what you're demonstrating.

The ad size ceiling breaks files organic accepts

The 200 MB ad cap is a bitrate budget in disguise, and it only bites on longer ads. A 60-second ad can run at 26 Mbps and still fit. A 5-minute one cannot: at 8 Mbps that file is about 300 MB and Campaign Manager rejects it, even though the identical file posts organically.

The math is one line. Take 1,638,400 kbit (200 MB), divide by duration in seconds, subtract your audio bitrate, then keep about 5% back for container overhead. For a 300-second ad that's 1,638,400 / 300 = 5461, minus 128 for audio, times 0.95, so target 5000 Kbps. Then constrain the encoder instead of hoping CRF lands there:

ffmpeg -i source.mp4 \
  -vf "scale=1080:1350:force_original_aspect_ratio=decrease,\
pad=1080:1350:-1:-1,setsar=1" \
  -c:v libx264 -b:v 5000k -maxrate 5500k -bufsize 11000k \
  -profile:v high -preset slow -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart li-ad-4x5.mp4

-maxrate with -bufsize gives you a hard VBV ceiling, so a high-motion final 30 seconds can't blow past the cap. Use -preset slow here rather than medium: at a fixed bitrate the slower preset buys real quality, which is the trade you want when the bitrate is dictated by a file-size rule and not by taste.

Emit all four variants from one source in one pass

Re-exporting the same timeline four times is what wastes actual hours. A two-person B2B content team publishing three client videos a week is running twelve exports, and if the master changes they run twelve again. FFmpeg can split the decoded stream once and write all four files in a single pass, which decodes the source one time instead of four:

ffmpeg -i source.mp4 -filter_complex "\
[0:v]split=4[a][b][c][d];\
[a]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:-1:-1,setsar=1[v169];\
[b]scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:-1:-1,setsar=1[v11];\
[c]scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:-1:-1,setsar=1[v45];\
[d]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1,setsar=1[v916]" \
  -map "[v169]" -map 0:a -c:v libx264 -crf 21 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart li-16x9.mp4 \
  -map "[v11]"  -map 0:a -c:v libx264 -crf 21 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart li-1x1.mp4 \
  -map "[v45]"  -map 0:a -c:v libx264 -crf 21 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart li-4x5.mp4 \
  -map "[v916]" -map 0:a -c:v libx264 -crf 21 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart li-9x16.mp4

That's the whole job in one process, and the version worth putting in a Makefile. It doesn't solve where the process runs. Four 1080p H.264 encodes of a 3-minute source is a few minutes of pinned CPU, which is fine on your laptop and a problem inside an n8n node, a Zapier step, or a Lambda with a 15-minute wall. The automated version of this exact command is the listing kit blueprint: upload one video, get back the 9:16, 1:1, 4:5 and 16:9 variants, no encoder to install and no timeout to babysit. Same four shapes, one HTTP call, free tier to start and usage-based pricing after.

Local FFmpeg batchOne API call
Setupinstall FFmpeg, confirm libx264 is in the buildnone
Where it runsyour machine or a server you keep aliveno servers to run
Inside n8n/Make/Zapierblocks the step for minutessubmit, then webhook or poll
Filter debuggingyours to ownpreset shapes
Costyour computefree tier, then per job

Common pitfalls encoding video for LinkedIn

Most LinkedIn upload problems trace to four flags, and none produce an error message that names the cause.

  1. Missing -movflags +faststart. The moov atom lands at the end of the file, so LinkedIn's ingest has to read the whole upload before processing. Large files stall in "processing" far longer than they should.
  2. A pixel format other than yuv420p. ProRes and many screen recorders output 4:2:2 or 4:4:4. Playback breaks in ways that look like a LinkedIn bug but reproduce in any browser, which is the same class of failure behind MP4s that won't play in a browser.
  3. Variable frame rate passed straight through. iPhone and OBS captures carry VFR, and LinkedIn's transcoder can drift audio against it. Force constant frame rate with -r 30 -fps_mode cfr, which is the same fix as audio out of sync being a frame rate problem, not a codec one.
  4. HEVC in an MP4. LinkedIn's accepted list is broad, but H.264 High profile is the only codec choice with no surprises across LinkedIn's web player, iOS app, and Android app. Encoding HEVC saves bandwidth you don't control, since LinkedIn re-encodes anyway.

One honest boundary: if what you need is designed motion graphics, per-scene animated text, and a brand template your designer maintains visually, an encode command is the wrong tool and so is a media API. That's a template-editor class of product. FFmpeg Micro reformats, compresses, captions, watermarks, and composes video that already exists; it isn't an editing UI.

FAQ

What is the LinkedIn video size limit?

LinkedIn's organic video size limit is 5 GB with a 10-minute maximum duration and a 75 KB minimum. LinkedIn video ads use a much tighter ceiling of roughly 200 MB and allow up to 30 minutes, so a long ad has to be bitrate-constrained to fit rather than exported at master quality.

What's the best video format for LinkedIn?

The best video format for LinkedIn is MP4 with H.264 High profile video, yuv420p pixel format, AAC-LC audio at 128 Kbps or higher, 48 kHz stereo, constant frame rate at 30 fps, and +faststart set on the container. That combination plays identically on LinkedIn's web player and both mobile apps.

Does LinkedIn compress uploaded video?

LinkedIn re-encodes every uploaded video for delivery, so uploading a 30 Mbps master gains nothing visible over a well-encoded 6 to 8 Mbps 1080p file. The quality that survives comes from encoding at the right resolution with a reasonable CRF, around 20 to 21 for libx264, not from throwing bitrate at the upload.

What aspect ratio should I use for LinkedIn video?

Use 4:5 at 1080x1350 for feed video, because it occupies 25% more vertical space than a 1:1 square and about double a 16:9 landscape clip. Keep 16:9 at 1920x1080 for screen shares and slide-based content where horizontal detail matters, and reserve 9:16 at 1080x1920 for full-screen placements.

Can I upload a 4K video to LinkedIn?

LinkedIn accepts resolutions up to 4096x2304, so a 4K upload is within spec. It's rarely worth the encode time, since LinkedIn's delivery transcode caps out well below 4K for feed playback and the extra pixels mostly buy a longer upload and processing wait.

If your LinkedIn videos come out of a workflow rather than a timeline, wire the four-shape render into it once and stop re-exporting: browse the blueprints catalog for the one-click version, or sign up free and send your first source file through the API to see what comes back.

About Javid Jamae

Founder & CEO at FFmpeg Micro

Javid is a software engineer, author, and entrepreneur with over 25 years of professional software development experience across enterprise, startup, and consulting environments. He founded FFmpeg Micro to make video processing accessible to developers through a simple, automation-first REST API.

Software EngineeringVideo ProcessingFFmpegCloud ArchitectureAPI DesignAutomation

Skip the command line

The Listing Video Kit blueprint runs the same job for you: upload, done.

Run it (free)