标签: cdimage

  • Split Music Image in Debian

    Share my script used to split music image file into indivdual track of wav or flac

    OS: Debian/ununtu

    Install necessary tool:

    sudo apt-get clean

    sudo apt-get update

    sudo apt-get install -y shntool dos2unix enca flac ffmpeg

    Convert

    # output track in wav format

    sudo split.sh CDImage.wav wav

    # output track in flac format

    sudo split.sh CDImage.wav flac

    Split.sh

    #/bin/bash
    
    if [ $# -ne 2 ] && [ $# -ne 1 ]
    then
    
    echo "Usage:   sudo split.sh FILE [DECODE]"
    echo "Example: sudo split.sh CDImage wav"
    echo "         sudo split.sh CDImage flac"
    echo "         sudo split.sh CDImage.wav"
    echo "         sudo split.sh CDImage.wav flac"
    echo "         sudo split.sh CDImage"
    echo "Note:"
    echo "         The Input Audio File =   FILE.wav or FILE.flac or FILE.ape"
    echo "         DECODE               =   wav or flac (Output Audio Format)"
    echo "         The Input CUE File   =   FILE.cue"
    exit
    
    fi
    
    
    BFILE=$1
    
    if [ -f ${BFILE} ];then
      AUDIO_FILE=${BFILE}
      EXT=${BFILE##*.}
      case $EXT in
        "wav"|"WAV")
           FORMAT="wav"
           ;;
        "flac"|"FLAC")
           FORMAT="flac"
           ;;
        "ape"|"APE")
           FORMAT="ape"
           ;;
        esac
    else if [ -f $BFILE.wav ];then
           AUDIO_FILE=$BFILE.wav
           FORMAT="wav"
         else if [ -f $BFILE.flac ];then
                 AUDIO_FILE=$BFILE.flac
                 FORMAT="flac"
              else if [ -f $BFILE.ape ];then
                     AUDIO_FILE=$BFILE.ape
                     FORMAT="ape"
                   else
                     echo "Not found audio file: $1.wav or $1.flac or $1.ape "
                     echo "Exit"
                     exit
                   fi
              fi  
         fi
    fi
    
    
    if [ $# -ne 1 ];then
    DECODE=$2
    fi
    
    if [ "A${DECODE}B" = "AB" ];then
      DECODE="wav"
    fi
    
    
    if [ "A${FORMAT}B" = "AB" ];then
      FORMAT="${DECODE}"
    fi
    
    if [ "A${DECODE}B" = "AapeB" ];then
      DECODE="wav"
    fi
    
    
    echo "Audio  File   = ${AUDIO_FILE}"
    echo "Input  Format = ${FORMAT} " 
    echo "Output Format = ${DECODE} "
    
    
    if [ "$FORMAT" = "ape" ]
    then
    echo -e "First, convert ape format to ${DECODE} format, waite a minute..."
    DECODE_FILE=$BFILE.${DECODE}
    #avconv -i "$AUDIO_FILE" "$DECODE_FILE"
    ffmpeg -i "$AUDIO_FILE" "$DECODE_FILE"
    AUDIO_FILE=$DECODE_FILE
    CONVERT="true"
    FORMAT="${DECODE}"
    fi
    
    
    #if [ ! "$DECODE" = "$FORMAT" ];then
    #echo -e "First, convert ${FORMAT} format to ${DECODE} format, waite a 
    #minute..."
    #DECODE_FILE=$BFILE.${DECODE}
    #avconv -i "$AUDIO_FILE" "$DECODE_FILE"
    #ffmpeg -i "$AUDIO_FILE" "$DECODE_FILE"
    #AUDIO_FILE=$DECODE_FILE
    #CONVERT="true"
    #fi
    
    
    CUE_FILE=$BFILE.cue
    CUE_FILE_LINUX=$BFILE-linux.cue
    
    if [ ! -f ${CUE_FILE} ];then
      MY_DIR="`dirname ${BFILE}`"
      MY_NAME="`basename ${BFILE}`"
      MY_BASE="${MY_NAME%.*}"
      CUE_FILE=${MY_DIR}/${MY_BASE}.cue
      if [ ! -f ${CUE_FILE} ];then
       echo "unable to find cue file of:"
       echo "  $BFILE.cue or ${CUE_FILE} "
       exit
      fi
    fi
    
    CODE="`enca ${CUE_FILE} |grep ";"|sed "s/.*; //"`"
    echo "CODE=${CODE}"
    
    echo iconv -f "${CODE}" -t utf8 "$CUE_FILE" -o "$CUE_FILE_LINUX"
    
    iconv -f "${CODE}" -t utf8 "$CUE_FILE" -o "$CUE_FILE_LINUX"
    
    
    dos2unix "$CUE_FILE_LINUX"
    
    
    echo shntool split -t "%n-%t" -f "$CUE_FILE_LINUX" -o $DECODE "$AUDIO_FILE"
    shntool split -t "%n-%t" -f "$CUE_FILE_LINUX" -o $DECODE "$AUDIO_FILE"
    
    
    if [ "$CONVERT" = "true" ]
    then
    if [ ! "AB" = "A${DECODE_FILE}B" ];then
      if [ -f ${DECODE_FILE} ];then
       echo -e "Remove temporary flac file: $DECODE_FILE"
       rm -f "$DECODE_FILE"
      fi
    fi
    
    fi