发信人: SunGang()
整理人: (1998-06-13 00:17:47), 站内信件
|
【 以下文字转载自 SunGang 的信箱 】 【 原文由 [email protected] 所发表 】 发信人: [email protected] (咖啡音符), 信区: tw386bsd 标 题: Re: 如何在 FreeBSD 下压 MP3 发信站: 交大资工凤凰城资讯站 (Mon Sep 15 23:47:01 1997) 转信站: ClinuxBBS!clinux.ml.org!hammer.uoregon.edu!news.ifcss.org!news-peer.gsl 出 处: vina.os.nctu.edu.tw
以下是在 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 的读取。 後者有点杀鸡用牛刀,但是比较有趣。
--
※ 转载:.广州网易 BBS bbs.nease.net.[FROM: max1-47.guangzh]
|
|