Перекодирование записей звонков

Автор | 11.05.2011

Частенько приходится перегонять записи телефонных разговоров в другие форматы.
И постоянно приходится гуглить по этому поводу в поисках рабочих скриптов. Посему попробую сделать подборочку разных скриптов.
Начнем-с.
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)

🙂

Залишити відповідь