Ubuntu – Normalizing Video Volume using avconv

avconvvideo conversion

I have a collection of videos, in the .mkv and .mp4 (AAC+H.264) formats. The .mkv files are ok, but all the .mp4 files have such a low volume that I can hardly hear it on my phone, even when volume is maxed.

I convert them using avconv so they're smaller for my phone. It works fine, but I have not yet found out how I can normalize the volume on all the .mp4 files so they match the .mkv files.

Just raising the volume alone would be a great achievement.

Best Answer

I've just been searching for a similar problem and used this solution from SuperUser

Basically, just extract the audio from the file as wav, run normalize-audio on it and then re-encode it as aac and remux.

I just wrote this quick script to do it:

VIDEO_FILE=$1
VIDEO_FILE_FIXED=${VIDEO_FILE%.*}-fixed.${VIDEO_FILE##*.}
avconv -i $VIDEO_FILE -c:a pcm_s16le -vn audio.wav
normalize-audio audio.wav
avconv -i $VIDEO_FILE -i audio.wav -map 0:0 -map 1:0 -c:v copy -c:a libvo_aacenc \
   $VIDEO_FILE_FIXED

Put it in a file like normalize.sh, then run bash normalize.sh file_to_convert.mp4. You'll get a file out file_to_convert-fixed.mp4.

You might want to tweak the normalize-audio command to just raise the volume by some dB with the -g siwtch, or use another command entirely. I saw aacgain and wavegain mentioned elsewhere. normalize-audio is in the package normalize-audio, funnily enough.

Hope this helps you.