4488970
4488970

Reputation: 59

libav / ffmpeg output optimisation for small file sizes

I am using the following command to take an audio mp3 file and make a video out of it (by using a static jpg picture). My aim is to get a mp3 audio that is as small as possible with still acceptable quality.

frequency="11000"
bitrate="45000"
avconv -loop 1 -i a.jpg -i audio.mp3 -shortest -r 1 -metadata STEREO_MODE=mono -c:v libx264 -ar "$frequency" -b:a "$bitrate" -ac 0 result.mkv

My questions are: 1. how can I achieve that the resulting file is MONO? 2. is it possible to reduce the bitrate furthermore? I would like to use values below 45000, too. 3. My aim is to get control of the parameters that influence the file size most significantly. Presently I know that the frequency is quite important. Are there any other parameters that would help me to get a very small output file with still acceptable quality?

Thanks in advance.

Upvotes: 1

Views: 926

Answers (1)

Gyan
Gyan

Reputation: 93291

Since you are coding to a compressed audio codec, the frequency doesn't directly affect the file size. However, a frequency of 11 kHz will reduce quality of music.

Instead, I'd suggest

frequency="22050"
bitrate="48000"
ffmpeg -loop 1 -i a.jpg -i audio.mp3 -shortest -r 1 -c:v libx264 -crf 28 \
       -ar "$frequency" -b:a "$bitrate" -ac 1 result.mkv

The CRF parameter controls video quality - lower values produce better quality but larger files. You'll get more savings from controlling that than audio bitrate, which is at the lower end anyway.

If your build has libfdk_aac included, you can instead use

frequency="22050"
bitrate="32000"
ffmpeg -loop 1 -i a.jpg -i audio.mp3 -shortest -r 1 -c:v libx264 -crf 28 \
       -ar "$frequency" -c:a libfdk_aac -profile:a aac_he_v2 -b:a "$bitrate" -ac 1 result.mkv

Upvotes: 2

Related Questions