aboutsummaryrefslogtreecommitdiff
path: root/scripts/music/split-album.sh
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2020-12-24 00:06:27 +0530
committerAkshay Nair <phenax5@gmail.com>2020-12-24 00:06:27 +0530
commit865728068c965e066d0f8971c5b5ba26e12e7dce (patch)
treec16195f0a04cf7d004fe5b396255734f4d60bb00 /scripts/music/split-album.sh
parent649ef5f225039e498358c3d056dfd7fcbc56f014 (diff)
downloadnixos-config-865728068c965e066d0f8971c5b5ba26e12e7dce.tar.gz
nixos-config-865728068c965e066d0f8971c5b5ba26e12e7dce.zip
Adds scripts and links scripts and wallpapers
Diffstat (limited to 'scripts/music/split-album.sh')
-rwxr-xr-xscripts/music/split-album.sh72
1 files changed, 72 insertions, 0 deletions
diff --git a/scripts/music/split-album.sh b/scripts/music/split-album.sh
new file mode 100755
index 0000000..d7a23a4
--- /dev/null
+++ b/scripts/music/split-album.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+
+MUSIC_DIR="$HOME/Downloads/music";
+EXT=opus;
+
+AUDIO_FILE="$1";
+TIMESTAMPS_FILE="$2";
+
+ALBUM_ARTIST=$(echo "$TIMESTAMPS_FILE" | sed -e 's/^.*\///g' -e 's/\.splits$//');
+
+ARTIST="$(echo $ALBUM_ARTIST | awk -F' - ' '{print $1}')";
+ALBUM="$(echo $ALBUM_ARTIST | awk -F' - ' '{print $2}')";
+
+OUT_DIR="$MUSIC_DIR/$ARTIST/$ALBUM";
+[[ ! -d "$OUT_DIR" ]] && mkdir -p "$OUT_DIR";
+
+AUDIOINFO=$(mediainfo "$AUDIO_FILE" --Output=JSON);
+DURATION=$(echo -e "$AUDIOINFO" | jq -r '.media.track[0].Duration');
+
+TOTAL_TRACKS=$(cat "$TIMESTAMPS_FILE" | wc -l);
+
+add_tags() { ~/scripts/music/tag.sh "$@"; }
+
+padd() { printf "%0${2:-2}d" $(echo $1 | cut -d'.' -f1); }
+
+to_timestamp() {
+ local duration=$1;
+ local hours=$(echo "$duration / 3600" | bc);
+ duration=$(echo "$duration % 3600" | bc);
+ local mins=$(echo "$duration / 60" | bc);
+ local secs=$(echo "$duration % 60" | bc);
+ echo "$(padd $hours):$(padd $mins):$(padd $secs)";
+}
+
+starttime="";
+music="";
+index=0;
+
+(cat "$TIMESTAMPS_FILE"; echo "<<END") | while read split; do
+ if [[ ! -z "$split" ]]; then
+ if [[ "$split" == "<<END" ]]; then
+ endtime=$(to_timestamp $DURATION);
+ else
+ endtime="$(echo $split | cut -d' ' -f1)";
+ nextmusic="$(echo $split | cut -d' ' -f 2-)";
+ fi;
+
+ if [[ ! -z "$music" ]]; then
+ output="$OUT_DIR/$(padd $index) - $music.$EXT";
+ echo "$starttime - $endtime ($output)";
+ ffmpeg \
+ -nostdin -y \
+ -loglevel -8 \
+ -i "$AUDIO_FILE" \
+ -ss "$starttime" \
+ -to "$endtime" \
+ -vn "$output" && \
+ add_tags \
+ -a "$ARTIST" \
+ -A "$ALBUM" \
+ -t "$music" \
+ -n "$music" \
+ -N "$TOTAL_TRACKS" \
+ "$output" \
+ ;
+ fi;
+
+ music=$nextmusic;
+ starttime=$endtime;
+ index=$((index + 1));
+ fi;
+done;