如何在 FreeBSD 下压 MP3
以下是在 FreeBSD 下先抓音轨再压 mp3 的方法,
至於直接由 CD 压的方法则在最後讨论。
目前在 FreeBSD 下有两个由 SCSI CDROM 抓音轨的程式,
一是 tosha-0.05 一是 cdd-1.0。
这两个程式你都可在 freebsd.csie.nctu.edu.tw 找到。
所支援的 SCSI CDROM 厂牌也有限,
如果不认得的厂牌会给你 Warning 的 message。
你可以先试压一首看看,再修改原程式。
tosha and cdd 抓的 size 有点不同,cdd 会小一点,但内容又没错。
tosha 与 DOS 下的 cdgrabp 抓的大小、内容一样,至少在我的
Pioneer DR-U124X 4.4 倍速 CDROM 是如此。
至於 IDE CDROM 的抓音轨程式就要靠你写了。
压 mp3 的程式即 l3enc linux 版,目前尚无 FreeBSD 版,
因此你要 load linux module,这部分就不讨论了,假设你会。
l3enc 的 register code 你可以问问你的朋友,应该不难找到。
假设你要压第一首,可以如此做:
tosha -t 1 -o tmp.raw
l3enc tmp.raw track01.mp3 -br 128000 -sr 44100
这样就产生 track01.mp3 的档案。play 看看有没有问题。
l3enc 有个 -hq 的参数,但压的速度是三倍慢。
下面这个 shell script 可以将整张 CD 一一压成 mp3。
所以,晚上睡前放一张,隔天就压好了。
你可以放在 background run,又不影响你的正常工作。
但是请你先看一下程式,测一下,确定你知道每一步骤在作什麽。
---------------- cut here -----------------------------------
#!/bin/sh
# usage: makemp3.sh [from_which_track]
#
LD_LIBRARY_PATH=/compat/linux/lib;export LD_LIBRARY_PATH
LOGFILE=./makemp3.log
TMPFILE=./tmp.raw
NTRACK=`tosha -i 2>&1 | tail -n 3 | head -n 1 | colrm 7`
if [ $# -gt 0 ]; then
CURRENT=$1
if [ ${CURRENT} -le 0 ]; then
CURRENT=1
break
fi
if [ ${CURRENT} -gt ${NTRACK} ]; then
echo "The request track larger than total number of track"
exit 0
fi
else
CURRENT=1
fi
cp /dev/null ${LOGFILE}
cp /dev/null ${TMPFILE}
tosha -i 2>> ${LOGFILE}
echo "total ${NTRACK} track" >> ${LOGFILE}
while [ ${CURRENT} -le ${NTRACK} ]
do
# if there is a file named "stop" on the current directory
# then the job will stop
if [ -f stop ]; then
echo "job stop at `date`" >> ${LOGFILE}
rm ${TMPFILE}
scsi -f /dev/rcd0c -c "1b 0 0 0 0 0"
exit 0
fi
if [ ${CURRENT} -ge 10 ]; then
OUTPUT="track${CURRENT}"
else
OUTPUT="track0${CURRENT}"
fi
echo "compress track ${CURRENT} begin at `date`" >> ${LOGFILE}
tosha -q -t ${CURRENT} -o ${TMPFILE} 2> /dev/null
l3enc ${TMPFILE} ${OUTPUT}.mp3 -br 128000 -sr 44100 > /dev/null 2>&1
echo "track ${CURRENT} completed at `date`" >> ${LOGFILE}
CURRENT=`expr ${CURRENT} + 1`
done
echo "job completed at `date`" >> ${LOGFILE}
rm ${TMPFILE}
scsi -f /dev/rcd0c -c "1b 0 0 0 0 0"
--------------------- cut here -----------------------------------
l3enc 这个程式是不从 stdin 读 wav or pcm data 的,当然你也可以这样作:
tosha -q -t 1 -o - | l3enc /dev/stdin track.mp3 -br 128000 -sr 44100
而且也可压出一样大小的 mp3,但是与用读暂存档的方式压出来的不一样。
而用 l3dec 反解回去的 pcm file 也不同。
原因我猜是 l3enc 这个程式用了 ftell 及 fseek。
当然,pipe 是无法作 seek 的,也无法知道 file size。
那有没有方式直接由 CD -> mp3? 我认为有两个方法,
一是改 linux shared library,骗 l3enc。
一是自己写个 audio file system,直接支援 audio track 的读取。
後者有点杀鸡用牛刀,但是比较有趣。
(http://www.fanqiang.com) 进入【UNIX论坛】
|
白衫
|
|
智慧家居
智慧家居颠覆传统智能家居
智慧云谷让智能家居变成有智慧的
智慧云谷引领智慧家居新生活
科技改变生活 智慧云谷智慧家居系
智慧家居领航者,智慧云谷助你玩
智能家居如何赢得市场美誉度?
智慧云谷智慧家居:创业者有无限
WiFi智能家居你还在用?这样的智
互联网+助推智能家居产业
智慧云谷为您打造真正的智能家居
智能家居产业需要的不是单品,而
新家如何选择开关?智慧云谷iWis
智能传感器-世界首款“智”为你的
智慧云谷开关智能安防智能空气质
智能开关品牌,如何选择智能开关
秋季干燥,智慧家居温湿度传感器
传感器助力智慧家居 感知爱家
iWiscloud智能触摸开关缔造家居装
※室内空气污染的危害及 [sensor]
※超声波风速传感器在生 [sensor]
※这么冷清 [gabc111]
※手机APP操作有问题 [ssy11407]
※智慧云谷智慧家居将在 [cici]
※上传下载 [cici]
※下载智慧家居 [apple2008]
※秋季干燥,智慧家居温 [apple2008]
※智慧家居紧扣热点 安全 [apple2008]
※办公大楼如何智慧化管 [apple2008]
※智慧云谷工业自控的优 [apple2008]
※传感器助力智慧家居 感 [apple2008]
※智能开关品牌,如何选 [apple2008]
※智慧云谷开关智能安防 [apple2008]
※没有专业人员,如何安 [apple2008]
※烟台智慧云谷董事长任 [apple2008]
※互联网+助推智能家居产 [apple2008]
※WiFi智能家居你还在用 [apple2008]
※智慧云谷智慧家居:创 [apple2008]
※智能家居如何赢得市场 [apple2008]
|