Скрипт конвертации 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 установлен.
Пожалуйста помогите решить данную проблему.
Как правило, это переменная 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")
Крон штука своенравная.
Бывало, что не работало, потому что, к примеру, переменная date выводила "не то" значение, просто потому, что у пользователя локаль устанавливалась, отличная от POSIX!
А вот у товарища, обратите внимание, есть в скрипте переменная date, подменяющая встроенную
В итоге результат непредсказуем.
Лучше не использовать имена переменных такие же, как системные.
Качаем и ставим 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 |