Skip to content

Instantly share code, notes, and snippets.

@PoZitron
Created November 3, 2012 09:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PoZitron/4006718 to your computer and use it in GitHub Desktop.
Save PoZitron/4006718 to your computer and use it in GitHub Desktop.
Bath cue processing
#!/bin/bash
# переменные #
SLEEP_TIME=1 # пауза между запуском программы
BYTES_COUNT=10 # сколько байт начала и конца файла читаем
PROGRAMM="flacon" # программа которой передаём cue-файл
##
# цветной вывод
red=$(tput setf 4)
green=$(tput setf 2)
yellow=$(tput setf 6)
reset=$(tput sgr0)
toend=$(tput hpa $(tput cols))$(tput cub 6)
status_error="${red}[ERROR]${reset}"
status_ok="${green}[OK]${reset}"
status_warn="${yellow}[WARN]${reset}"
##
path="."
if [ ! -z "$1" ]
then
path="$1"
if [ ! -d "$path" ]
then
echo "Указанный путь не существует"
exit 1
fi
fi
files=`find $path -type f -name *.cue`
ORIG_IFS=$IFS
IFS=$'\n'
for file in $files
do
audio_file=$(dirname "$file")/`grep "FILE" "$file" | cut -d\" -f2`
if [ ! -f $audio_file ]
then
if [ -f ${audio_file/%.wav/.flac} ]; then audio_file=${audio_file/%.wav/.flac}; fi
if [ -f ${audio_file/%.wav/.ape} ]; then audio_file=${audio_file/%.wav/.ape}; fi
fi
if [ ! -f $audio_file ]
then
printf "$status_error %s:\n" $file
printf "%s: аудио-файл не существует\n" $(basename $audio_file)
continue
fi
if [ ! -z "$(echo "$audio_processed" | grep -wF "$audio_file")" ]
then
printf "$status_warn %s:\n" $file
printf "%s: аудио-файл уже обработан и будет пропущен в этот раз \n" $(basename $audio_file)
continue
fi
if [ -z $(head -c $BYTES_COUNT "$audio_file") ] || [ -z $(tail -c $BYTES_COUNT "$audio_file") ]
then
printf "$status_warn %s:\n" $file
printf "%s: аудио-файл скорее всего недокачан и будет пропущен\n" $(basename $audio_file)
continue
fi
audio_processed="$audio_processed"$'\n'"$audio_file"
printf "$status_ok $file\n"
nohup $PROGRAMM $file >/dev/null 2>/dev/null &
sleep $SLEEP_TIME
done
IFS=$ORIG_IFS
exit 0
# Author: PoZitron
# Описание:
# Скрипт ищет cue-файл в заданной (если запускать с параметром) или в текущей
# директории (если запускать без параметров), находит соотвутствующий
# аудио-файл (flac, ape), проверяет что он полностью закачен (читает первые и
# последнии N байт файла и смотрит чтобы это были не нули) и только после
# этого запускает программу-декодировщик (flacon) с указаным cue-файлом.
# После небольшой паузы скрипт продолжит перебирать cue-файлы в директории
# до тех пор, пока не переберёт все.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment