Normalizing Video Volume using avconv

11,290

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.

Share:
11,290

Related videos on Youtube

Lanbo
Author by

Lanbo

Updated on September 18, 2022

Comments

  • Lanbo
    Lanbo over 1 year

    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.

  • chrisdembia
    chrisdembia over 9 years
    Based on this website wiki.libav.org/Snippets/avconv, I changed the last line to this: avconv -i $VIDEO_FILE -i audio.wav -c copy $VIDEO_FILE_FIXED
  • Pani Dhakshnamurthy
    Pani Dhakshnamurthy about 9 years
    @chrisdembia it would be helpful to know why did you do this?
  • chrisdembia
    chrisdembia about 9 years
    I don't completely remember; this is my guess: "-c copy" uses the same audio and video encoders from the input, and those were the encoders I wanted to use.