Скрипт для пакетного конвертирования из 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