Категории

пятница, 22 марта 2013 г.

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

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

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

[ ! -d "$IN" ] && mkdir "$IN" && echo "Create dir: $IN"    # Создаем папку для входных файлов.
#[ -d "$OUT" ] && rm -rf "$OUT" && echo "Delete dir: $OUT"  # Чистим папку OUT.
[ ! -d "$OUT" ] && mkdir "$OUT" && echo "Create dir: $OUT" # Создаем папку для выходных файлов.
[ -d "$OUT/wav" ] && rm -rf "$OUT/wav" && echo "Delete dir: $OUT/wav"  # Чистим папку для wav файлов.
[ ! -d "$OUT/wav" ] && mkdir "$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 -p $OUT/wav$D_OUT
  echo '------------------------'
 fi
 if [ ! -d "$OUT/$1$D_OUT" ]; then
  echo "Create dir: $D_IN -> $OUT/$1$D_OUT";
  mkdir -p $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 -f $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)

Комментариев нет:

Отправить комментарий