I would like to set up some output presets which, in addition to outputting video with the selected codec parameters, normalise the audio output to the correct level for various streaming services to minimise the dynamic range compression/volume adjustment they apply.
Would it be possible to use an LUFS-based audio-normalisation library (such as libebur128 in FFmpeg) to normalise to a given target value? If so, how?
I could only find a way to apply the normalise filters to individual clips, rather than the programme mix.
e.g. if I have mono tracks for presenter 1, presenter 2, voice over, special effects, atmos and a stereo background music track - how do I normalise the stereo mix keeping the relative levels keyframed throughout the video?
Put the stereo mix on its own track and apply the 1-pass normalize filter to the entire track. Or, apply the 2-pass normalize filter to the stereo clip on that track. (you can only apply the 2-pass filter to a clip, not a track IIR).
Put the voice on a different track and apply the gain filter to individual clips on that track.
You can apply the 1-pass normalize filter to the entire project. Click on the project tab and then apply the filter.
The 1-pass normalize filter does not guarantee that the program loudness of the exported file will be exactly the target loudness. Basically the 1-pass filter changes gain up and down to “chase” the target loudness. It kind of mimics what a human would do with a volume knob. This effectively reduces the dynamic range of the entire program.
Another option: Edit your video so that it sounds good. Save the MLT file. Open Shotcut to a blank project and open your MLT file “as a clip”. Then, apply the 2-pass normalize filter to the clip (which is actually the entire project). The 2-pass filter will reduce the overall gain so that the final output matches the target loudness. But it won’t “reduce” dynamic range.