51 lines
1.5 KiB
Bash
51 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
# set shopt-options used by this shell-script
|
|
# Note, 0 (true) from shopt -q is "false" in a math context.
|
|
shopt -q globstar; globstar_set=$?
|
|
((globstar_set)) && shopt -s globstar
|
|
shopt -q extglob; extglob_set=$?
|
|
((extglob_set)) && shopt -s extglob
|
|
|
|
# return default shopt-options
|
|
function finish {
|
|
((globstar_set)) && shopt -u globstar
|
|
((extglob_set)) && shopt -u extglob
|
|
}
|
|
trap finish EXIT
|
|
|
|
|
|
# setting default extension to mp3
|
|
if [ $# -eq 0 ]; then
|
|
extension="mp3"
|
|
else
|
|
extension=$@
|
|
extension=${extension// /|}
|
|
fi
|
|
|
|
|
|
for file in **/*.@($extension); do
|
|
# getting information about the streams
|
|
channels=$(ffprobe "$file" -show_entries stream=channels -select_streams a -of compact=p=0:nk=1 -v 0)
|
|
bitrate=$(ffprobe "$file" -show_entries stream=bit_rate -select_streams a -of compact=p=0:nk=1 -v 0)
|
|
streams=$(echo "$channels" | wc -l)
|
|
|
|
# setting bitrate
|
|
if [ streams -gt 1 ]; then
|
|
echo "Error: Automatic Bitrate is not supported for files with multiple audiostreams. The default bitrate of 128k will be used"
|
|
bitrate="128k"
|
|
elif
|
|
case $channels in
|
|
1) if [$bitrate -gt 64000]; then bitrate="64k"; fi;;
|
|
2) if [$bitrate -gt 128000]; then bitrate="128k"; fi;;
|
|
6) if [$bitrate -gt 256000]; then bitrate="256k"; fi;;
|
|
8) if [$bitrate -gt 450000]; then bitrate="450k"; fi;;
|
|
*) bitrate=128k";;
|
|
esac
|
|
fi
|
|
# https://wiki.xiph.org/Opus_Recommended_Settings
|
|
|
|
ffmpeg -threads 4 -v 0 -i "$file" -map 0 -c:a libopus -b:a $bitrate "${file%.*}.opus" && rm "$file"
|
|
done
|
|
|
|
exit 0
|