FFmpeg's segment muxer is the usual way to cut one long video into a folder of 140-second pieces, and with -c copy it does so without re-encoding anything. The 140 is not an arbitrary round number — it is the duration X's help centre publishes for accounts without a Premium subscription.
The command itself is one line. The parts worth understanding are where that number comes from, why X's own pages disagree about it, and what X says happens after the upload bar reaches 100%.
The command
ffmpeg -i input.mp4 -c copy -f segment -segment_time 140 -reset_timestamps 1 part%03d.mp4For what each of the segment muxer's options does, and for its full option list, check the official FFmpeg documentation.
What -c copy is doing
The one part of this command FFmpeg documents in plain prose is the stream copy. FFmpeg's documentation defines it as "copying one input elementary stream's packets without decoding, filtering, or encoding them," and states the payoff directly: "Since there is no decoding or encoding, it is very fast and there is no quality loss."
Note the stated scope. FFmpeg says stream copy is useful for "changing the elementary stream count, container format, or modifying container-level metadata" — it does not claim to do anything beyond that. It is not a way to re-scale, re-encode, or filter your video, so whatever codec, pixel format and audio layout the source has, every piece you get out will have too. That matters for X, because several of X's documented requirements are properties of the encode rather than of the file's length or size.
Why 140 seconds, and where X publishes a different number
Two X help centre pages give the same figure. The video page says: "If you aren't a Premium subscriber, you can still upload videos up to 140 seconds long with a maximum file size of 512MB." The longer-videos page repeats it with a scope note that matters — "up to 140 seconds long on any platform" — so unlike the Premium tier, which X documents as differing on Android, the free ceiling is not described as platform-dependent.
X's developer documentation publishes a different set of numbers for the same kind of upload:
Video on a Post tweet_video, amplify_video 0.5 seconds–20 minutes 8 GBAnd it adds: "Post-video caps match the X app." It also notes that the limits follow the account, not the API tier: "Premium status is the uploading user's X Premium / verified subscription (feature/long_video_upload), not your developer API plan."
Both pages are official, both are live, and X has not published a page that reconciles 140 seconds with 20 minutes. Check the current limit in the official documentation before you plan around either figure. The same disagreement runs through the file-size numbers, laid out in X's video file size limit.
One more scope note that is easy to lose: the 140-second figure in X's developer documentation appears on a different row from the one above. There, 140 seconds is the dm_video limit — video in a Direct Message, with a 512 MB size cap — while tweet_video and amplify_video are the categories for a video on a post. X's category table lists them as separate limits, so do not carry one over to the other.
The documented range has a lower bound too
X's developer documentation does not publish only an upper limit. The row above is a range, and the lower figure is 0.5 seconds.
This is worth knowing because segmenting a source whose length is not a clean multiple of your segment time leaves a remainder, and that remainder becomes the last file FFmpeg writes. What X does with a clip shorter than the published lower figure is not something X's official documentation states. If you would rather not deal with a very short tail at all, choose a segment time that divides your source length more evenly — -segment_time 135 still sits under the 140-second help centre figure.
Try it right here
Runs in your browser. Your file is not uploaded anywhere.
That compressor runs FFmpeg compiled to WebAssembly inside this page — the file is read from disk, processed locally, and handed back, with nothing uploaded to a server. It is the right tool for the other half of this job. X Ads support notes that "Even if your file is under our maximum size, we may still have issues ingesting the file," and its suggested fix is to "Re-export your video file in a smaller size. An easy way to do this is to reduce the bitrate." Splitting handles duration; this handles size. See all Clapr tools, the video compressor, or more FFmpeg guides.
Variations
Cut at 60 seconds to get looping clips. X's help centre states that "All videos posted to X that are 60 seconds or shorter will automatically loop." X's ads specs phrase the boundary differently — "Videos will loop if the video length is under 60 seconds" — so 60 exactly is ambiguous between the two pages. Use -segment_time 59 if looping is the point.
ffmpeg -i input.mp4 -c copy -f segment -segment_time 59 -reset_timestamps 1 loop%03d.mp4Start from a QuickTime file. X's Media Studio documentation is blunt about .mov: describing uploads stuck in processing, it says "This happens most often with .mov files. If possible, re-export files as .mp4, which should allow for overall faster upload and processing time." If the source is what you plan to keep, converting first is tidier — MOV to MP4 does it in the browser.
Troubleshooting
The upload finishes, then the post fails. X's developer docs describe this as two separate gates: "Upload limits and Post-create limits are separately enforced." A media_id that finalized successfully, X says, "can still be rejected by POST /2/tweets". The documented rejection reads This user is not allowed to post a video longer than N minutes. A finished progress bar is not confirmation.
A clip is refused and nothing in it is obviously wrong. X's developer documentation publishes hard technical requirements that have nothing to do with size or length: pixel format "Only YUV 4:2:0 is supported", audio "must be AAC with Low Complexity profile" with "High-Efficiency AAC is not supported", audio "must be mono or stereo, not 5.1 or greater", and the file "Must use progressive scan" and "Must not have open GOP". Because stream copy carries the source's packets through untouched, if the original violates one of these, every clip you cut from it does too. X does not publish the error text for these cases.
The error says the video is too long, but it isn't. For Media Studio specifically, X writes: "Error: 'Video too long' — This error usually appears when uploading media that isn't in a supported format." Worth checking before you cut anything shorter. X's Media Studio page also puts a clock on processing: "It could take up to 30 minutes for your media file to complete processing. If the system cannot process the file within that timeframe, the upload will fail and the 'Upload failed' error message will appear."
FAQ
How long can a video be on X without Premium? X's help centre states 140 seconds with a maximum file size of 512MB, and says that applies on any platform. X's developer documentation lists 0.5 seconds to 20 minutes for the same kind of post video. Both are official; check the current limit in the official documentation before you plan around either.
Will splitting with FFmpeg lose quality?
No. With -c copy, FFmpeg's documentation states that because there is no decoding or encoding, "there is no quality loss."
Will X rate-limit me for posting a lot of clips in a row? X's documentation addresses the count directly: "There is no limit to the number of videos you can upload, even if all videos are the maximum length." What does constrain the layout is per-post media: "You may attach up to 4 photos, 1 animated GIF or 1 video in a Post" — so a series of clips is a series of posts.
Why is my last file shorter than the others? Because the source length was not a clean multiple of your segment time; the remainder goes into the final file. X's developer documentation puts the published lower figure at 0.5 seconds — check the official documentation for the current range.
Can I split the audio out of the clips too? Yes, the same stream-copy approach applies to audio-only outputs. Extract audio from video does the single-file version in the browser if you would rather not install FFmpeg.
X figures quoted from X's help centre pages on sharing videos and on longer videos for Premium subscribers, X's developer media documentation, X's Media Studio support pages, and X Ads upload support, checked 16 September 2026. FFmpeg quotes from the FFmpeg documentation, section "Streamcopy".