how to reduce size of video before upload to server programmatically in android

You can try using ffmpeg to reencode it with a lower bitrate, e.g.:

If you are trying to convert 140 MB to 1MB then

Calculate the bitrate you need by dividing your target size (in bits) by the video length (in seconds). For example for a target size of 1MB which is 8000000bits and 300 seconds of video, use a bitrate of approx 26 667 bit/s(i.e 27kbit/s):

ffmpeg -i input.mp4 -b 27k output.mp4

Other options that might be worth by setting Constant Rate Factor, which lowers the average bit rate, but retains better quality. Vary the CRF between around 18 and 24.

ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4

Happy coding :)


You have two way to do that:

  • Encode it to a lower bit rate and/or lower resolution. Have a look here: Is it possible to compress video on Android?.

  • Try to zip/compress it. Have a look here: http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29

Unfortunately I never tried to do that with a 140MB video. This is why I suggested to you the first library (FFmpeg 4 Android).

By the way, try to increase also your UPLOAD_LIMIT on your server. But this is not the problem, even if you increase it to 10MB you still have to compress it. Do not try to increase the UPLOAD_LIMIT to 140MB, it will cause for sure an HTTP timeout.

Otherwise you need to enable a chunked upload.

Have a look on this discussion:

Android: OutOfMemoryError while uploading video - how best to chunk?