Created
January 9, 2019 03:43
-
-
Save wagesj45/7862866c533e0c93b5d01cf1afbd9ca3 to your computer and use it in GitHub Desktop.
Normalizes the audio of an input file into an output file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Normalizes the audio of the input to the output. | |
if [ "$1" = "-h" ]; then | |
echo "Normalizes the audio of the input into the output." | |
echo "normalize.sh [input] [output=normalized.ext]" | |
exit 0 | |
fi | |
normalize() { | |
tempFile="$(mktemp)" | |
output="normalized" | |
if [ "$2" != "" ]; then | |
output="$2" | |
echo "Normalizing $1 to $2" | |
else | |
filename=$(basename -- "$1") | |
extension="${filename##*.}" | |
output="$output.$extension" | |
echo "$2 -- $filename -- $extension -- $output" | |
echo "Converting $1 using the default filename $output" | |
fi | |
echo "Getting audio information..." | |
ffmpeg -i "$1" -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary -f null - 2> $tempFile | |
integrated="$(cat $tempFile | grep 'Input Integrated:' | grep -oP '[-+]?[0-9]+.[0-9]')" | |
truepeak="$(cat $tempFile | grep 'Input True Peak:' | grep -oP '[-+]?[0-9]+.[0-9]')" | |
lra="$(cat $tempFile | grep 'Input LRA:' | grep -oP '[-+]?[0-9]+.[0-9]')" | |
threshold="$(cat $tempFile | grep 'Input Threshold:' | grep -oP '[-+]?[0-9]+.[0-9]')" | |
echo "Integrated = $integrated :: True Peak = $truepeak :: LRA = $lra :: Threshold = $threshold" | |
echo "Re-encoding using audio analysis..." | |
ffmpeg -i "$1" -loglevel panic -af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=$integrated:measured_TP=$truepeak:measured_LRA=$lra:measured_thresh=$threshold:offset=-0.3:linear=true:print_format=summary "$output" | |
echo "Cleaning up..." | |
rm $tempFile | |
echo "Done! $output has been normalized." | |
} | |
if [ -d "$1" ]; then | |
echo "Converting directory $1..." | |
SAVEIFS=$IFS | |
IFS=$(echo -en "\n\b") | |
for fullfilename in $(find "$1" -iname "*.*"); do | |
filename=$(basename -- "$fullfilename") | |
extension="${filename##*.}" | |
filename="${filename%.*}" | |
normalized="$1/$filename.normalized.$extension" | |
normalize "$fullfilename" "$normalized" | |
done | |
else | |
normalize "$1" "$2" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment