ใช้โปรแกรม Lame แปลงไฟล์เสียงจาก wav เป็น mp3

Asterisk Opensource IP Pbx

ใช้โปรแกรม Lame แปลงไฟล์เสียงจาก wav เป็น mp3

โพสต์โดย nuiz » 06 เม.ย. 2010 11:45

สวัสดีครับ วันนี้วันหยุด อยู่ห้องก็ร้อน เปิดแอร์ก็ไม่ได้ช่วยลดโลกร้อน ก็เลยออกมารับแอร์ที่ห้างพันทิพย์บางกะปิ หิ้วโน๊ตบุ๊ค Acer Aspire 1810T สีแดงที่เพิ่งถอยออกมาจากงานคอมมาร์ท (ผ่อน 10 เดือน) มาด้วย ตอนนี้ก็นั่งอยู่ตรงศูนย์อาหารชั้น 4 ครับ ต่อเน็ตด้วย Aircard + DTAC ก็เร็วอยู่นะ แถวนี้ก็มีลุงคนนึงแกมาร้องคาราโอเกะอยู่ด้วย เสียงใช้ได้ :D บรรยากาศแถวนี้ไม่ครึกครื้นและไม่ค่อยมีไรน่าดูเท่าห้างเดอะมอลล์บางกะปิ

เอาหล่ะครับ วันนี้ผมจะมาแนะนำวิธีการแปลงไฟล์เสียง wav เป็น mp3 โดยใช้โปรแกรม Lame กัน ไม่ได้จะแนะนำการใช้งานโปรแกรม Lame นะครับ บทความนี้เป็นภาคต่อของบทความ วิธีการบันทึกการโทร (Call Recording) ด้วย Asterisk ที่ผมได้เขียนแนะนำไปก่อนหน้านี้แล้ว แต่คราวนั้นผมแนะนำว่าให้บันทึกเสียงเป็นแบบ wav49 ซึ่งเป็นไฟล์ wav ที่บีบอัดแบบ GSM จะประหยัดเนื้อที่ฮาร์ดดิสก์ไปได้เยอะ (ประมาณ 5 เม็กต่อชั่วโมง)

ปล. ถ้าเราแค่บันทึกเสียงแล้วต้องการให้เปิดฟังได้ ไม่ได้คิดจะเอาไฟล์ mp3 นี้ไปทำอย่างอื่น ผมว่าบันทึกเสียงเป็นไฟล์ wav49 หน่ะก็ดีอยู่แล้วนะครับ อย่างน้อยก็ไม่ต้องทำอะไรให้มันยุ่งยากมากขึ้น แต่อย่างไรก็ตามเก็บเป็นไฟล์ mp3 ใช้เนื้อที่น้อยกว่า wav49 นิดหน่อย

แต่การที่เราจะแปลงไฟล์ wav เป็น mp3 ได้นั้น เราจะใช้ไฟล์แบบ wav49 ไม่ได้นะครับ ต้องใช้ไฟล์ wav ธรรมดา ดังนั้นเราต้องเปลี่ยนคำสั่งการบันทึกเสียงใหม่ แบบนี้

exten => _1XX,1,MixMonitor(/tmp/record-${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},,%d%m%Y-%H%M%S)}.wav|bW(0))

คือเปลี่ยนนามสกุลไฟล์จาก WAV เป็น wav

1. ติดตั้งโปรแกรม Lame
1.1 เช็คเวอร์ชั่นอัพเดท
http://sourceforge.net/projects/lame/files/lame/

1.2 ดาวน์โหลดไฟล์ Source Code
wget http://downloads.sourceforge.net/projec ... irror=nchc

1.3 คอมไพล์และติดตั้ง
โค้ด: เลือกทั้งหมด
tar xzvf lame-3.98.4.tar.gz -C /usr/src
cd /usr/src/lame-3.98.4
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
make install


2. การใช้คำสั่ง lame
เรียกดูออปชั่นในการใช้งานโปรแกรม lame
โค้ด: เลือกทั้งหมด
lame -?


3. แปลงไฟล์เสียงทีละไฟล์
คำสั่งนี้ครับ
โค้ด: เลือกทั้งหมด
lame -b 16 -m m -q 9 --resample 8 file.wav file.mp3

โดยที่
-b 16 คือบิตเรท 16 บิต
-m m เป็นโหมด mono
-q เป็น quality ค่า 9 คือต่ำที่สุด ช่วยประหยัดเนื้อที่เก็บ ไฟล์เสียงโทรศัพท์มันก็ไม่ใช่ Stereo อยู่แล้ว จึงไม่จำเป็นต้องให้มีคุณภาพมากมาย
--resample 8 เป็นความถี่ของไฟล์เอ๊าท์พุต เลข 8 คือ 8 KHz
file.wav คือไฟล์อินพุต
file.mp3 คือไฟล์เอ๊าท์พุต

มาดูการแปลงจริงๆกันครับ
โค้ด: เลือกทั้งหมด
lame -b 16 -m m -q 9 --resample 8 100-0870051234-06042010-011720.wav 100-0870051234-06042010-011720.mp3

ผลลัพธ์
lame-1.png
Lame
lame-1.png (16.74 KiB) เปิดดู 3955 ครั้ง

ก็จะได้ไฟล์ 100-0870051234-06042010-011720.mp3 อยู่ในไดเร็คตอรี่นี้
ถ้าไม่อยากให้มีข้อความแสดงให้เห็นก็ใส่ออปชั่น --quiet เพิ่มเข้าไปแบบนี้ครับ
โค้ด: เลือกทั้งหมด
lame -b 16 -m m -q 9 --resample 8 --quiet 100-0870051234-06042010-011720.wav 100-0870051234-06042010-011720.mp3


4. แปลงทีละหลายๆไฟล์
หากต้องการแปลงทีละหลายๆไฟล์ เราต้องใช้ Script ช่วยครับ ซึ่ง Script ด้านล่างนี้จะแปลงทีละไฟล์จนครบทุกไฟล์ สมมติว่าไฟล์ wav เก็บอยู่ที่ไดเร็คตอรี่ /var/spool/asterisk/monitor นะครับ

โค้ด: เลือกทั้งหมด
#!/bin/bash
recorddir=/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 --quiet "$file" "$mp3"
touch -r "$file" "$mp3"
done


สร้างเป็นไฟล์ชื่ออะไรก็ได้เช่น convert_mp3.sh เก็บไว้ในไดเร็คตอรี่อะไรก็ได้เช่น /usr/sbin แล้วเซ็ต mode ให้เป็น +x เพื่อให้สั่งรันได้ ด้วยคำสั่งนี้
โค้ด: เลือกทั้งหมด
chmod +x /usr/sbin/convert_mp3.sh


รันสคริปต์นี้ เราก็จะมีทั้งไฟล์ทั้ง .wav และ .mp3 อยู่ในไดเร็คตอรี่ /var/spool/asterisk/monitor

5. ใช้ Cron ช่วยแปลง
ถ้าเรามีไฟล์ที่ต้องแปลงเป็นจำนวนมาก และก็มีไฟล์แบบนี้ทุกวัน ถ้าต้องมาสั่งรันคำสั่งแปลงทุกวันก็เป็นอะไรที่น่าเบื่อนะครับ ใช้ Cron แปลงให้ดีกว่า

โค้ด: เลือกทั้งหมด
crontab -e


เพิ่มบรรทัดนี้เข้าไป จะแปลงตอน 00:05 ของทุกวัน
โค้ด: เลือกทั้งหมด
#Converting MP3
5  0 * * * /usr/sbin/convert_mp3.sh &>/var/spool/asterisk/monitor/log-$(date -d yesterday +%Y%m%d) /dev/null


หากต้องการรันเวลาอื่นแต่ไม่รู้ว่าจะเขียนเวลายังไง เว็บนี้ช่วยได้ครับ http://www.openjs.com/scripts/jslibrary ... rontab.php
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7069
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 13 ท่าน