FreePBX wav to mp3. Конвертируем записи разговоров.
Тем, кто занимается обслуживанием АТС Asterisk(FreePBX) и вынужден хранить записи разговоров продолжительное время, наверняка приходилось сталкиваться с проблемой нехватки(нерационального использования) дискового пространства, занимаемого файлами записей. Один из вариантов «борьбы» за свободное место я описывал в статье об удалении старых записей разговоров. Конвертация файлов записей в mp3 позволит уменьшить объем занимаемого объема на диске раза в три.
Конвертация в mp3 может производиться непосредственно после завершения разговора, либо в нерабочее время по заданию в планировщике или вручную.
FreePBX wav to mp3.Конвертация по заданию в планировщике.
Меня вполне устраивает вариант, когда записи конвертируются в нерабочее время, когда нагрузка на сервер минимальная, поэтому я использую именно его. Можно установить, например, ежедневное или еженедельное задание на конвертацию.
Итак, конвертация для FreePBX wav to mp3 будет производиться при помощи скрипта, который, в свою очередь, использует утилиту lame для конвертации файлов в формат mp3. Проверить, установлен ли этот пакет можно командой:
1 |
yum list installed | grep lame |
При необходимости установить пакет можно так:
1 |
yum install lame |
Давайте рассмотрим сам скрипт немного подробнее.
В первой секции традиционно задаются переменные:
1 2 3 4 |
#!/bin/bash #convert to mp3 asterisk recordings user="user" #пользователь субд mysqlpass="password" #пароль пользователя субд |
Если используется FreePBX, то пользователь уже известен(freepbxuser), а пароль его можно получить из файла /etc/freepbx.conf Соответственно, для FreePBX эта секция будет выглядеть так:
1 2 3 4 |
#!/bin/bash #convert to mp3 asterisk recordings # Запрос пароля учётки MySQL для пользователя freepbxuser mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed -e "s/['|;]//g")" |
Следующая часть скрипта выполняет конвертацию FreePBX wav to mp3, удаление старого файла и внесение изменений в базу asteriskcdrdb.
1 2 3 4 5 6 7 |
for i in `find /var/spool/asterisk/monitor/ -type f -name "*.wav"` do if [ -e "$i" ]; then file=`basename "$i" .wav`; dir=`dirname "$i"`; lame -h -b 32 "$i" "$dir/$file.mp3" && rm -f "$dir/$file.wav"; mysql --user=freepbxuser -p$mysqlpass --execute='use asteriskcdrdb;UPDATE cdr SET recordingfile="'$file'.mp3" WHERE recordingfile="'$file'.wav";'; |
Если у вас дистрибутив, отличный от FreePBX, замените пользователя freepbxuser на вашего пользователя, указав вместо freepbxuser переменную $user
Следующая часть скрипта записывает результаты работы скрипта в журнал:
1 2 3 4 5 6 7 |
# Логирование действий /bin/echo "Transfer complete! Before: $file.wav, after: $file.mp3" >> /var/log/asterisk/full else # Логирование действий /bin/echo "Transfer failure! File not found!" >> /var/log/asterisk/full |
Ну и собственно, весь скрипт для конвертации записей разговоров в FreePBX выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh #convert to mp3 asterisk recordings # Запрос пароля учётки MySQL для пользователя freepbxuser mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed -e "s/['|;]//g")" for i in `find /var/spool/asterisk/monitor/ -type f -name "*.wav"` do if [ -e "$i" ]; then file=`basename "$i" .wav`; dir=`dirname "$i"`; lame -h -b 32 "$i" "$dir/$file.mp3" && rm -f "$dir/$file.wav"; mysql --user=freepbxuser -p$mysqlpass --execute='use asteriskcdrdb;UPDATE cdr SET recordingfile="'$file'.mp3" WHERE recordingfile="'$file'.wav";'; # Логирование действий /bin/echo "Transfer complete! Before: $file.wav, after: $file.mp3" >> /var/log/asterisk/full else # Логирование действий /bin/echo "Transfer failure! File not found!" >> /var/log/asterisk/full fi done |
Осталось только создать задание в cron на выполнение этого скрипта в нужное время и с нужной вам периодичностью.
Конвертация записей непосредственно после завершения звонка хорошо описана здесь.
Учтите, что операция конвертации довольно требовательна к ресурсам и при большом количестве файлов занимает продолжительное время.
Хотите быть в курсе всех звонков на вашей АТС? Читайте как получать уведомления о пропущеных вызовах.