> ## Content Index
> Fetch the complete content index at: https://ffmpeguru.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Cap output file size with -fs
- URL: https://ffmpeguru.com/cap-output-file-size-with-fs/
- Published: 2026-09-28T09:00:00.000Z
- Updated: 2026-10-13T17:59:47.000Z
- Author: FFmpeguru
- Tags: ffmpeg

![](https://picsum.photos/seed/ffback41/1200/630)

When the target is a file size, not a duration, the \`-fs\` flag stops the encode as soon as the output reaches the cap. It is most useful for fitting a video into a service that limits upload size (email, chat, social) without computing the bitrate manually.

## The command

```
ffmpeg -i in.mp4 -fs 100M -c:v libx264 -b:v 2M -c:a aac -b:a 128k out.mp4
```

## What it does

The command caps the output at 100 MB. The encoder runs at the specified bitrates until the output reaches 100 MB, then stops. The result is a file that is exactly 100 MB (or just under, depending on the container overhead). For a more precise cap, use a two-pass encode with a target bitrate that matches the desired size: \`target\_size\_MB \* 8 / duration\_seconds = total\_bitrate\`.

## Requirements

Any input FFmpeg can read. The flag is a no-op for outputs that never reach the cap, so passing \`-fs 100M\` on a 10 MB file just produces the 10 MB file. The cap is in bytes by default; use \`M\` for megabytes, \`K\` for kilobytes, \`G\` for gigabytes.

## Things to avoid

- Expecting an exact size. The cap is a maximum, not a target; the file may be 5-10% smaller than the cap, depending on the encoder's rate control.
- Using \`-fs\` with a stream copy. Stream copy does not respect the cap because the demuxer reads the source, not the encoded output.
- Forgetting that the cap is in bytes by default. \`-fs 100\` is 100 bytes, not 100 megabytes.
- Combining \`-fs\` with \`-t\`. The first cap reached wins; if the file hits the size cap before the duration cap, the encode stops.