How To Resize, Reduce a Video to a Specific Size and Quality Ubuntu Linux using ffmpeg

This is a common issue when e-mailing or uploading video files.

One note is that you should make the filesize you choose below about 20% smaller than you need.  For example I took a 219MB video and told it to be 20M.  The resulting file was still about 21.9M but it was OK when I said 18M and was barely below the 20M size.

ffmpeg is our friend here, just use this command:

  1. Change the -fs 100M to the size you want eg. 20M, 500M
  2. Change the -i TheLargeVideo.mp4 to the name of your video
  3. Change the TheLargeVideo-resize.mp4

ffmpeg -i TheLargeVideo.mp4 -fs 100M TheLargeVideo-resize.mp4

Sometimes it doesn't work

Sometimes what you tell it to do is impossible, for example on a 652MB file that was about 4:55 in length.  The above command made it 15MB as we specified -fs 15M, but the problem is that it only had 22 seconds of video.  In other words ffmpeg will try to do something impossible and stops at the filesize you specify, even if some of the video gets chopped off! It doesn't explicitly error out, so be sure to make sure the time of the output/smaller video is the same as the original.

We told it to do something that was impossible with the codec and default quality settings.

Ideal Solution

You could also try setting a different, more efficient codec like x264 with -vcodec x264 and use crf with a higher value, even though the default is usually CRF 28.

CRF's highest value is 51 and results in a very blocky/pixelated video.

ffmpeg -i TheLargeVideo.mp4 -crf 35 -fs 100M -vcodec libx265 TheLargeVideo-resize.mp4

If you have a newer computer/version if you can try libx265 which looks better and may produce a small filesize.  If not then use libx264

If CRF 35 was a bit too small, you could try going for 32

 

Extreme Solution

If it still doesn't work out above, you will have to increase the -crf value which results in lower quality and also a lower filesize. 

What did fix it was setting -crf to a high value (40), which results in much lower quality, you could also try 35-38 to see if it still meets the target size, as the quality will be better too.

ffmpeg -i TheLargeVideo.mp4 -fs 100M -crf 40 -vcodec libx265 TheLargeVideo-resize.mp4


Tags:

resize, reduce, ubuntu, linux, ffmpegthis, mailing, uploading, filesize, mb, resulting, ok, ffmpeg, fs, eg, thelargevideo, mp,

Latest Articles

  • Flash LSI MegaRAID 2208 to IT mode in Linux Mint/Debian/Ubuntu
  • LSI MegaRAID in Linux Ubuntu / Centos Tutorial Setup Guide megacli
  • Convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/413. convert-im6.q16: no images defined `pts-time.jpg' @ error/convert.c/ConvertImageCommand/3258. solution ImageMagick P
  • Apache PHP sending expires header solution cannot use cache with CDN
  • How to install virt-manager in Mint 22/Ubuntu 22
  • Infiniband Guide
  • python mysql install error: /bin/sh: 1: mysql_config: not found /bin/sh: 1: mariadb_config: not found /bin/sh: 1: mysql_config: not found mysql_config --version
  • FreePBX 17 How To Add a Trunk
  • Docker Container Onboot Policy - How to make sure a container is always running
  • FreePBX 17 How To Add Phones / Extensions and Register
  • Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes. solution
  • Cisco How To Use a Third Party SIP Phone (eg. Avaya, 3CX)
  • Cisco Unified Communication Manager (CUCM) - How To Add Phones
  • pptp / pptpd not working in DD-WRT iptables / router
  • systemd-journald high memory usage solution
  • How to Install FreePBX 17 in Linux Debian Ubuntu Mint Guide
  • How To Install Cisco's CUCM (Cisco Unified Communication Manager) 12 Guide
  • Linux Ubuntu Redhat How To Extract Images from PDF
  • Linux and Windows Dual Boot Issue NIC Won't work After Booting Windows
  • Cisco CME How To Enable ACD hunt groups