AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Скрипт конвертации wav to mp3

Newbies/FAQ Forum 6 сообщений -
#1

Скрипт конвертации wav to mp3


Здравствуйте,

У меня возникла проблема со скриптом конвертации tomp3.sh. Скрипт находиться в папке /var/spool/asterisk/monitor/. При запуске скрипта вручную он конвертирует wav - файлы в mp3, но когда ставлю задачу в crontab -e , скрипт запускается, но конвертирует в Mp3 c размером 0кб.
Вот скрипт:
#!/bin/bash
#20080624 - Author: Gregg Hansen
#http://www.thiscoolsite.com
#Make sure to install Lame and copy mlame to your .wav dir
#If you specify your own filenames, use NO spaces.

recorddir="/var/spool/asterisk/monitor"
for i in `ls $recorddir/*.wav`; do
cd $recorddir
$recorddir/mlame -f -o "-b 16 -m m -q 9 --resample 8" $i
date=`ls -l $i | awk '{print $7,$6,2008,$8}'`
mp3=`echo $i | sed 's/.wav/.mp3/g'`
touch -d "$date" $mp3

В crontab -e :
* */1 * * * root /var/spool/asterisk/monitor/tomp3.sh
Пакет lame установлен.

Пожалуйста помогите решить данную проблему.
#2

Неработающий в кроне скрипт, который работает в консоли, связан только лишь с настройками переменных для пользователя, от имени которого запускается.
Как правило, это переменная PATH.
Фишка в том, что, что когда пользватель заходит в консоль, он все переменные автоматом получает через bashrc, profile и тому подобное.
А вот скрипт, который от имени пользователя запускается по крону - фигвам!
Уже не раз с этим многие сталкивались, да и вообще, к астериску это имеет весьма косвенное отношение. Вам в unixway!

А вообще, были примеры с перекодированием "на лету".

Прямо в extensions.conf можно вставить перед набором что-то вроде:

exten => _X.,104,Set(CALLFILENAME=${STRFTIME(${EPOCH},,%d-%m-%y_%H-%M)}__from_${CALLERID(num)}__to_${EXTEN});
exten => _X.,105,Set(monopt=nice -n 19 /usr/bin/lame -b 64 --silent "/var/spool/asterisk/monitor/${CALLFILENAME}.wav" "/var/spool/asterisk/monitor/${CALLFILENAME}.mp3" && rm -f "/var/spool/asterisk/monitor/${CALLFILENAME}.wav")
#3

Короче говоря, пропишите в скрипте полный путь к исполняемым файлам. Например, вместо "mlame $filename" - "/usr/bin/mlame $filename" или где он там у вас лежит (узнается командой whereis mlame).
#4

А вот не факт, что заработает даже с полными путями!
Крон штука своенравная.
Бывало, что не работало, потому что, к примеру, переменная date выводила "не то" значение, просто потому, что у пользователя локаль устанавливалась, отличная от POSIX!
А вот у товарища, обратите внимание, есть в скрипте переменная date, подменяющая встроенную Wink
В итоге результат непредсказуем.
Лучше не использовать имена переменных такие же, как системные.
#5

дата файлов получается все время 2008 года, необходимо заменить строчку date=`ls -l $i | awk '{print $7,$6,2008,$8}'` например на date=`/usr/bin/stat $i | grep Change | awk -F. '{ print $1 }' | awk '{ print $2" " $3 }'`
#6

Я понимаю, что 4 года прошло, но я всё же оставлю здесь решение как я конвертирую записи причём на лету. Когда-то много времени потратил на поиск решения, а эта ссылка у меня сейчас 1 в выдаче гугла. Способ 100% работает на 6+ CentOS и на многих версиях Fedorы, хотя тут может не работать только сборка lame.

Качаем и ставим lame
Код:
cd /usr/src/
wget http://heanet.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make
make install
ln -s /usr/local/bin/lame /usr/bin/

Создаём скрипт для конвертации. Путь к файлу подставьте свой
Код:
echo '#!/bin/sh' > /work/scripts/wav2mp3
echo '' >> /work/scripts/wav2mp3
echo 'LAME="/usr/bin/lame"' >> /work/scripts/wav2mp3
echo 'UID1="$1"' >> /work/scripts/wav2mp3
echo 'DIR="/work/records"' >> /work/scripts/wav2mp3
echo '$LAME -V2 $DIR/$UID1.wav $DIR/$UID1.mp3' >> /work/scripts/wav2mp3
echo 'rm -f $DIR/$UID1.wav' >> /work/scripts/wav2mp3
chmod +x /work/scripts/wav2mp3


В диалплане создаю макрос такого содержания и передаю ему ${EXTEN} при вызове
Код:
;########################################################################################
[macro-monitoring]
;########################################################################################
exten => s,1,ExecIf("${CDR(userfield)}"=""?MixMonitor(/work/records/${STRFTIME(${EPOCH},,%Y%m%d)}/${STRFTIME(${EPOCH},,%Y%m%d_%H%M%S)}-${MACRO_EXTEN}-${ARG1}.wav,,/work/scripts/wav2mp3 ${STRFTIME(${EPOCH},,%Y%m%d)}/${STRFTIME(${EPOCH},,%Y%m%d_%H%M%S)}-${MACRO_EXTEN}-${ARG1}))
same => n,ExecIf("${CDR(userfield)}"=""?Set(CDR(userfield)=/work/records/${STRFTIME(${EPOCH},,%Y%m%d)}/${STRFTIME(${EPOCH},,%Y%m%d_%H%M%S)}-${MACRO_EXTEN}-${ARG1}.mp3))
same => n,MacroExit