This question might be very basic
Is there a way to reduce the frame size/rate of Lossy compressed (WMV, MPEG) format, to get a smaller video, of lesser size, with same format.
Are there any open source or proprietary apis for this?
This question is related to
video
compression
video-processing
lossy-compression
I found myself wanting to do this too recently, so I created a tool called Shrinkwrap that uses FFmpeg to transcode videos, while preserving as much of the original metadata as possible (including file modification timestamps).
You can run it as a docker container:
docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids
Where:
Then it will recursively find all of the video files that match the extension and transcode them all into files of the same name with a -tc
suffix.
For more configuration options, presets for GoPro etc, see the readme.
Hope this helps someone!
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
-i input file
-b:v videobitrate of output video in kilobytes (you have to try)
-s dimensions of output video
-fs FILESIZE of output video in kilobytes
-vcodec videocodec (use ffmpeg -codecs
to list all available codecs)
If you want to keep same screen size, you can consider using crf factor: https://trac.ffmpeg.org/wiki/Encode/H.264
Here is the command which works for me: (on mac you need to add -strict -2
to be able to use aac audio codec.
ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4
Instead of chosing fixed bit rates, with the H.264 codec, you can also chose a different preset as described at https://trac.ffmpeg.org/wiki/x264EncodingGuide. I also found Video encoder comparison at KeyJ's blog (archived version) an interesting read, it compares H.264 against Theora and others.
Following is a comparison of various options I tried. The recorded video was originally 673M in size, taken on an iPad using RecordMyScreen. It has a duration of about 20 minutes with a resolution of 1024x768 (with half of the video being blank, so I cropped it to 768x768). In order to reduce size, I lowered the resolution to 480x480. There is no audio.
The results, taking the same 1024x768 as base (and applying cropping, scaling and a filter):
-b 512k
added, the size dropped to 77M (encoding time: 1m17s).-preset veryslow
(and no -b
), it became 70M (encoding time: 6m14s)-b 512k
and -preset veryslow
, the size becomes 77M (100K smaller than just -b 512k
).-preset veryslow -crf 28
, I get a file of 39M which took 5m47s (with no visual quality difference to me).N=1, so take the results with a grain of salt and perform your own tests.
There is an application for both Mac & Windows call Handbrake, i know this isn't command line stuff but for a quick open file - select output file format & rough output size whilst keeping most of the good stuff about the video then this is good, it's a just a graphical view of ffmpeg at its best ... It does support command line input for those die hard texters.. https://handbrake.fr/downloads.php
Source: Stackoverflow.com