commit cefaa6525c44ee17bf50a2ecbb0a86dc35db20fa Author: Makise Kurisu Date: Mon Dec 21 15:43:57 2015 +0100 Initial commit diff --git a/LossifyMusicArchive.sh b/LossifyMusicArchive.sh new file mode 100755 index 0000000..2ddccc6 --- /dev/null +++ b/LossifyMusicArchive.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +# --- Configuration --- # +MAXTHREADS=8 + + + +# --- Functions --- # +function isMusic() { + if [ "` file \"$1\"| sed \"s/.*: //g\" | tr '[:upper:]' '[:lower:]' | grep \"audio\"`" != "" ]; then + return 0 + else + return 1 + fi +} + +function isFlac() { + if [ "`echo \"$1\" | sed \"s/.*\.//g\" | tr '[:upper:]' '[:lower:]'`" == "flac" ]; then + return 0 + else + return 1 + fi +} + +function waitForFreeCore() { + sleep 0.1 + cur=`pidof ffmpeg` + IFS=$(echo -en " ") + cnt=0 + for proc in $cur; do + cnt=$(( $cnt + 1 )) + done; + + if [ "$cnt" -lt "$1" ]; then + return + else + sleep 1 + waitForFreeCore "$1"; + fi +} + + +# --- APPLICATION ENTRY POINT --- # + +# Init working environment +indir="/media/media/Music" +outdir="/home/markus/Music/lossy" + +if [ "$3" != "" ]; then + cdir="$3" +else + cdir="." +fi + +me=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)/`basename "${BASH_SOURCE[0]}"` + +echo "" +cd "$indir" +mkdir -p "$outdir/$cdir" # ACTION: MKDIR + +IFS=$(echo -en "\n\b") +firstFile=1 + +list=`ls "$cdir"`; + +for fileX in $list; do + file="$cdir/$fileX" + #echo "TEST====$file" + if [ "$file" == "" ]; then + continue + fi + if [ -f "$file" ]; then + rawCopy=1 # Let's assume it's anything but flac + if isMusic "$file"; then + if [ $firstFile -eq 1 ]; then # Extract album art + firstFile=0 + if [ ! -f "$outdir/cover.jpg" ]; then + ffmpeg -n -i "$indir/$file" "$outdir/$cdir/cover.jpg" # ACTION: EXTRACT COVER + fi + fi + if isFlac "$file"; then + echo "FLAC: $file" + rawCopy=0 # No copy! + newName="${file%.*}.ogg" + if [ -f "$outdir/$newName" ]; then + echo "SKIP: $file" + else + ffmpeg -n -threads auto -i "$indir/$file" -codec:a libvorbis -q:a 8 "$outdir/$newName" & # ACTION: CONVERT + waitForFreeCore $MAXTHREADS + fi + else + echo "COPY: $file" + fi + else + echo "OTHR: $file" + fi + + if [ $rawCopy -eq 1 ] ; then + if [ -f "$outdir/$file" ]; then + echo "SKIP: $file" + else + cp $indir/$file $outdir/$file # ACTION: COPY + fi + fi + + elif [ -d "$file" ]; then + echo -e "\e[1m---> CALL:" $me "$indir" "$outdir" "$file" "\e[21m" + # read foooooo # for debugging + $me "$indir" "$outdir" "$file" + echo -e "\e[1m<--- RETURN: $file" "\e[21m" + else + echo -e "\e[1m!!!! IGNORE: $file" "\e[21m" + fi +done; +