You can do it with most video editing software. Alternatively, you can extract the audio streams with ffmpeg, mix them manually in something like audacity and then remux the result with your video.
You can also do it in one step with ffmpeg (this assumes you have two audio streams in your file, and you are using .avi files with signed 16-bit pcm audio):
Code:
ffmpeg -i input.avi -filter_complex "[0:a:0][0:a:1]amix=inputs=2[mix]" -map 0:v -map "[mix]" -c:v copy -c:a pcm_s16le output.avi
The above will reduce the volume of each stream by half (-6db gain) to avoid clipping in the final mix. If you want to preserve the original volumes of each original stream:
Code:
ffmpeg -i input.avi -filter_complex "[0:a:0][0:a:1]amix=inputs=2[b],[b]alimiter=limit=0.5,volume=volume=2[mix]" -map 0:v -map "[mix]" -c:v copy -c:a pcm_s16le output.avi
This will raise the volume of the mix to restore the original volume level of the original streams and uses a limiter to avoid clipping. This might result in some dynamic range compression.