summaryrefslogtreecommitdiff
path: root/tmw-crunch-sfx
diff options
context:
space:
mode:
Diffstat (limited to 'tmw-crunch-sfx')
-rwxr-xr-xtmw-crunch-sfx103
1 files changed, 103 insertions, 0 deletions
diff --git a/tmw-crunch-sfx b/tmw-crunch-sfx
new file mode 100755
index 0000000..7f96d18
--- /dev/null
+++ b/tmw-crunch-sfx
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+
+##Ledmitz (2022)
+##For use with TMW Classic (AKA Legacy); Mass compression of SFX ogg files, recursively. Defaults to 64 kbps if already in mono and list stereo SFX
+#and be prompted for each one after monos are compressed.
+
+#Required apps check
+REQUIRED_APPS='awk dirname ffprobe ffmpeg grep sed'
+ for APP in $REQUIRED_APPS; do
+ REQ_APP_CHECK=$(find '/bin' '/usr/bin' -name "$APP")
+ if [[ "$REQ_APP_CHECK" == '' ]]; then
+ echo -e "$APP must be installed in order for toob to work\nRequired Apps: $REQUIRED_APPS" >&2
+ exit 0
+ fi
+ done
+
+#Audio sample rate (Default: 44100)
+SAMPRATE='44100'
+#Audio bitrate in kbps (Default: 64)
+BITRATE='64'
+#Audio bitrate in kbps (Default: 160)
+STEREO_BITRATE='160'
+#Number of channels (Default: 1 (mono) - do not change. for possible future changes)
+CHANNELS='1'
+
+while :; do
+ echo "Warning: Make backups before running this script. The changes to the original source files are permanent."
+ echo ''
+ grep '^TYPE_COMPRESSED' "$0"
+ grep '^SAMPRATE' "$0"
+ grep '^BITRATE' "$0"
+ grep '^CHANNELS' "$0"
+ read -r -p "This will convert all mono ogg vorbis audio over $BITRATE kbps in \"$PWD\", recursively, to a $SAMPRATE Hz / $BITRATE kbps / $CHANNELS channel ogg and prompt for action when stereo files are encountered. Are you sure you wish to continue?(\"yes\" to continue. Others answers quit)" ANS1
+ if [[ "$ANS1" == 'yes' ]]; then
+ break
+ else
+ exit 0
+ fi
+done
+
+#Find oggs and convert them if criteria is met
+#find . -type f -iname "*.ogg" |
+#while IFS= read -r FILE; do
+for FILE in $(find . -type f -iname "*.ogg"); do
+ NAME=${FILE//.ogg/}
+ SRC_BITRATE=$(ffprobe -hide_banner "$FILE" 2>&1 | grep 'Audio: vorbis' | grep -Eo '[0-9]+ kb/s' | sed 's/ kb\/s//g')
+ SRC_SAMPRATE=$(ffprobe -hide_banner "$FILE" 2>&1 | grep 'Audio: vorbis' | grep -Eo '[0-9]+ Hz' | sed 's/ Hz//g')
+ SRC_CHANNELS=$(ffprobe -hide_banner "$FILE" 2>&1 | grep 'Audio: vorbis' | awk '{print $7}' | sed 's/,$//')
+ #Bitrate and samplerate check
+ if [[ "$SRC_BITRATE" -gt "$BITRATE" ]] && [[ "$SRC_SAMPRATE" -ge "$SAMPRATE" ]]; then
+ #Mono check
+ if [[ "$SRC_CHANNELS" == 'mono' ]]; then
+ ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SAMPRATE" -ac "$CHANNELS" -b:a "$BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ elif [[ "$SRC_CHANNELS" == 'stereo' ]]; then
+ ffprobe -hide_banner "$FILE" 2>&1
+ while :; do
+ read -r -p "Stereo file: $NAME.ogg. Do you wish to proceed with conversion to mono?" STEREO_ANS1
+ case $STEREO_ANS1 in
+ [Yy]* ) ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SAMPRATE" -ac "$CHANNELS" -b:a "$BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ break
+ ;;
+ [Nn]* ) if [[ "$SRC_BITRATE" -gt "$STEREO_BITRATE" ]]; then
+ ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SAMPRATE" -ac '2' -b:a "$STEREO_BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ fi
+ break
+ ;;
+ * ) echo "Invalid response: Y/y(anything) for yes or N/n(anything) for no."
+ continue
+ ;;
+ esac
+ done
+ fi
+ elif [[ "$SRC_BITRATE" -gt "$BITRATE" ]] && [[ "$SRC_SAMPRATE" -lt "$SAMPRATE" ]] && [[ "$SRC_CHANNELS" == 'mono' ]]; then
+ #convert with src samplerate if lower than target samplerate
+ ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SRC_SAMPRATE" -ac "$CHANNELS" -b:a "$BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ elif [[ "$SRC_BITRATE" -gt "$BITRATE" ]] && [[ "$SRC_SAMPRATE" -lt "$SAMPRATE" ]] && [[ "$SRC_CHANNELS" == 'stereo' ]]; then
+ ffprobe -hide_banner "$FILE" 2>&1
+ while :; do
+ read -r -p "Stereo File with low samplerate: $NAME.ogg. Do you wish to proceed with conversion to mono at $SRC_SAMPRATE Hz?" STEREO_ANS1
+ case $STEREO_ANS1 in
+ [Yy]* ) ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SRC_SAMPRATE" -ac "$CHANNELS" -b:a "$BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ break
+ ;;
+ [Nn]* ) if [[ "$SRC_BITRATE" -gt "$STEREO_BITRATE" ]]; then
+ ffmpeg -hide_banner -loglevel 'error' -stats -nostdin -i "$FILE" -vn -ar "$SAMPRATE" -ac '2' -b:a "$STEREO_BITRATE"'k' "$NAME"'_tmp.ogg'
+ mv "$NAME"'_tmp.ogg' "$NAME"'.ogg'
+ fi
+ break
+ ;;
+ * ) echo "Invalid response: Y/y(anything) for yes or N/n(anything) for no."
+ continue
+ ;;
+ esac
+ done
+ fi
+done
+