Частенько приходится перегонять записи телефонных разговоров в другие форматы.
И постоянно приходится гуглить по этому поводу в поисках рабочих скриптов. Посему попробую сделать подборочку разных скриптов.
Начнем-с.
gsm -> wav
#!/bin/bash
cd /var/samba/convert
if ! test -d /var/samba/convert/wav
then
mkdir /var/samba/convert/wav
chmod -R 0644 /var/samba/convert/wav
fi
for a in *.gsm;
do
#Строка ниже для старых версий sox
#sox "$a" -t raw -r 8000 -s -w -c 1 `echo $a|sed "s/.wav/.sln/"` resample -ql;
sox "$a" -r 8000 -c 1 -2 -s wav/`echo $a|sed "s/.gsm/.wav/"` > /dev/null 2>&1
rm "$a" > /dev/null 2>&1
done
Wav -> mp3
#!/bin/bash
#20080624 - Author: Gregg Hansen
#http://www.thiscoolsite.com
recorddir="/var/spool/asterisk/monitor"
for i in `ls $recorddir/*.wav`; do
cd $recorddir
/usr/bin/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
#Uncomment the below line if you want your .wavs moved to a different directory.
#This way you can review the timestamps and mp3 files before deleting the .wav
#mv $i /wav_recordings
done
Другая реализация:
#!/bin/bash
recorddir=”${1:-/var/spool/asterisk/monitor}”
cd $recorddir;
for file in *.wav; do
mp3=$(basename “$file” .wav).mp3;
nice lame -b 16 -m m -q 9 –resample 8 “$file” “$mp3″;
touch –reference “$file” “$mp3″;
chown apache.apache “$mp3″;
chmod 600 “$mp3″;
rm -f “$file”;
#mv “$file” /converted;
done
MP3 ->Wav
lame --decode file.mp3 - | sox -v 0.5 -t wav - -t wav -2 -r 8000 -c 1 file.wav
На Питоне
#!/usr/bin/python
import sys, commands
FORMAT = sys.argv[1]
files = commands.getoutput('find ./ -name \'*mp3\'').split('\n')
if len(sys.argv) == 2:
for i in files:
out_name = i.replace('mp3', FORMAT)
if FORMAT == 'gsm':
cmd = 'sox "%s" -r 8000 -c1 "%s" resample -ql' % (i, out_name)
elif FORMAT == 'wav':
cmd = 'sox "%s" -r 8000 -e signed -c 1 "%s"' % (i, out_name)
print cmd, commands.getoutput(cmd)
elif len(sys.argv) == 3:
out_name = sys.argv[2].replace('mp3', FORMAT)
if FORMAT == 'gsm':
cmd = 'sox "%s" -r 8000 -c1 "%s" resample -ql' % (sys.argv[2], out_name)
elif FORMAT == 'sln':
cmd = 'sox "%s" -t raw -r 8000 -s -w -c 1 "%s"' % (sys.argv[2], out_name)
print cmd, commands.getoutput(cmd)
🙂