Скрипт для пакетного конвертирования из wav в alaw, ulaw, gsm.

#!/bin/sh

IN='IN'  # Входная папка.
OUT='OUT'  # Выходная папка.

[ ! -d "$IN" ] && mkdir -v "$IN" && echo "Create dir: $IN"  # Создаем папку для входных файлов.
#[ -d "$OUT" ] && rm -vrf "$OUT" && echo "Delete dir: $OUT"  # Чистим папку OUT.
[ ! -d "$OUT" ] && mkdir -v "$OUT" && echo "Create dir: $OUT"  # Создаем папку для выходных файлов.
[ -d "$OUT/wav" ] && rm -vrf "$OUT/wav" && echo "Delete dir: $OUT/wav"  # Чистим папку для wav файлов.
[ ! -d "$OUT/wav" ] && mkdir -v "$OUT/wav" && echo "Create dir: $OUT/wav"  # Создаем папку для wav файлов.

convert_to() {
    #$1 - Output format file.
    #$2 - IN file.

    [ -z "$1" ] && echo 'ERROR: $1 is empty!' && exit 1
    [ -z "$2" ] && echo 'ERROR: $2 is empty!' && exit 1

    case $1 in
        alaw) SOX_OPT='-t al' ;;
        ulaw) SOX_OPT='-t ul' ;;
        gsm) SOX_OPT='' ;;
        *) echo "ERROR: fromat $1 is not supported!"; exit 1 ;;
    esac

    # Если нужные директории не существуют, то создаем их.
    if [ ! -d "$OUT/wav$D_OUT" ]; then
        echo "Create dir: $D_IN -> $OUT/wav$D_OUT";
        mkdir -vp $OUT/wav$D_OUT
        echo '------------------------'
    fi

    if [ ! -d "$OUT/$1$D_OUT" ]; then
        echo "Create dir: $D_IN -> $OUT/$1$D_OUT";
        mkdir -vp $OUT/$1$D_OUT
        echo '------------------------'
    fi

    F_OUT=$(basename $2 .wav)
    echo "Processing: $2 -> $OUT/$1$D_OUT/$F_OUT.$1"

    # Проверим, существует ли входной файл.
    if [ -f "$2" ]; then
        # Если нету wav, то для начала сконвертим в wav.
        if [ ! -f $OUT/wav$D_OUT/$F_OUT.wav ]; then
            echo 'Convert to 8bit wav first at 8000Hz - this can take a while...'
            sox "$2" -r 8000 -c1 "$OUT/wav$D_OUT/$F_OUT.wav"
        fi

        #Проверяем имеется ли входной wav файл.
        if [ -f $OUT/wav$D_OUT/$F_OUT.wav ]; then
            # Если файл в нужном формате $1 уже существует, то сперва удаляем его, потом конвертим
            if [ -f $OUT/$1$D_OUT/$F_OUT.$1 ]; then
                echo "INFO: File exist! $OUT/$1$D_OUT/$F_OUT.$1 remove..."
                rm -vf $OUT/$1$D_OUT/$F_OUT.$1
            fi
            sox "$OUT/wav$D_OUT/$F_OUT.wav" $SOX_OPT "$OUT/$1$D_OUT/$F_OUT.$1"
        else
            echo "ERROR: Input wav file $OUT/wav$D_OUT/$F_OUT.wav is not exist!"
            exit 1
        fi
    else
        echo "ERROR: Input file $2 not exists!"
    fi
}

find $IN -type d -depth -print | while read D_IN; do # ищем сперва самые "глубокие Директории"
    D_OUT=$(echo "$D_IN" | sed -e 's/'$IN'//') # Получаем имя выходного каталога.

    # Ищем во входном каталоге wav файлы.
    find $D_IN -type f -name "*.wav" -print -maxdepth 1 | while read file; do
        convert_to alaw "$file"
        convert_to ulaw "$file"
        convert_to gsm "$file"
    done
done

# TIP - Увеличение громкости
#sox file1.wav -v 5 file2.wav
#ffmpeg myfile.wav $i -vol 256 -acodec pcm_s16le -ar 8000 -ac 1 -y filename_out"${i%wav}wav" -vol volume change audio volume (256=normal)

Comments

comments powered by Disqus