changeset 5633:b62460b1db74

Updated to support resampling audio and multiple cds.
author atmos4
date Mon, 15 Apr 2002 14:01:07 +0000
parents 93c9df5225a7
children cc24d5e2573f
files TOOLS/mencvcd
diffstat 1 files changed, 110 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/TOOLS/mencvcd	Mon Apr 15 13:39:48 2002 +0000
+++ b/TOOLS/mencvcd	Mon Apr 15 14:01:07 2002 +0000
@@ -1,28 +1,42 @@
 #!/bin/sh
 #
-# Version:          0.1.1
+# Version:          0.1.2
 #
 # Licence:          GPL
 #
-# 2002/05/11        Jürgen Hammelmann <juergen.hammelmann@gmx.de>
+# 2002/04/14        Jürgen Hammelmann <juergen.hammelmann@gmx.de>
 #
 # Script:           MPlayer Sources (DVD) to (S)VCD ripping and burning
 #
 # requires:         newest mplayer cvs version
 #                   mjpegtools v1.6 beta
-#                   toolame
 #                   vcdimager
 #                   cdrdao
+#                   lame
 #
 ################################################################################
 #
-# global options section, change them to your needs!
+# 2002/04/11        v0.1.0: first version
+# 2002/04/12        v0.1.1: 
+# 2002/04/14        v0.1.2:
+#                      - handles now multiple vcd's
+#                      - support's mp3 audio as option
+#                      - use of mp2enc/lame instead of toolame because of support 
+#                        of resampling and mp3
+#
+################################################################################
+#
+# global config section, change them to your needs!
 
 TMPDIR="." # path to directory for creating temporary files, recommended 2-3GB space
 
 CDDRV="generic-mmc" # cdrdao: cdwriter driver
 CDDEV="--device 0,1,0" # or comment out and create link /dev/cdrecorder to your cdwriter dev
 
+
+################################################################################
+AUDIO="audiodump.wav"
+VIDEO="stream.yuv"
 ################################################################################
 
 function usage() {
@@ -30,20 +44,22 @@
    echo
    echo "$HOWCALLED options:"
    echo
-   echo "-w       outputs in wide screen format 16:9"
-   echo "-abr <n> audio bitrate in kbs [224]"
-   echo "-asr <n> audio sample rate in Hz [44100]"
-   echo "-blank   cleans cd-rw before burning"
-   echo "-burn    enables burning [default]"
-   echo "-denoise denoises mpeg stream"
-   echo "-noburn  disables burning"
-   echo "-mpg     don't encode from source, multiplex/burn only the mpeg stream"
-   echo "-vcdout  encode to VCD format [default]"
-   echo "-svcdout encode to SVCD format"
+   echo "-h|-?         help"
+   echo "-w            outputs in wide screen format 16:9"
+   echo "-abr <n>      output audio bitrate in kbs [224]"
+   echo "-asr <n>      output audio sample rate in Hz [48000]"
+   echo "-blank        cleans cd-rw before burning"
+   echo "-cdsize <n>   maximal size of cd images [646]"
+   echo "-denoise      denoises mpeg stream"
+   echo "-noburn       disables burning"
+   echo "-mp3          outputs audio in mp3 instead of mp2 format"
+   echo "-mpg          don't encode from source, multiplex/burn"
+   echo "              only the encoded mpg stream"
+   echo "-vcdout       encode to VCD format [default]"
+   echo "-svcdout      encode to SVCD format"
    echo
    echo "example:"
-   echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in wide"
-   echo "                             screen format."
+   echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in 16:9."
 }
 
 HOWCALLED=`basename $0`
@@ -55,47 +71,58 @@
 shift 1
 
 cd $TMPDIR
-rm -f stream.yuv
-rm -f audiodump.pcm
-rm -f audiodump.wav
-mkfifo -m 660 stream.yuv
-mkfifo -m 660 audiodump.pcm
-mkfifo -m 660 audiodump.wav
+rm -f $VIDEO
+rm -f $AUDIO
+# create a named pipe for video stream
+mkfifo -m 660 $VIDEO
 
+# some inits
 params=""
 wide=""
 blank=0
 burn=1
+mp3=0
 mkstream=1
 abr=224
-masr=44100
+abrset=0
+asr=44100
 denoise="cat -"
 norm="VCD"
-mplexnorm="-f 2 -V"
-mpegnorm="-f 2 -b 1152"
+mplexnorm="-f 2 -m 1 -V"
+max=646
+mpegnorm="-f 2 -b 1152 -B 260"
 imaget="-t vcd2"
 while [ "$1"x != "x" ]; do
    case $1 in
       -w)
       	wide="-M WIDE2STD"
 	;;
+      -h|-?)
+        usage
+        exit 0
+	;;
       -abr)
       	abr=$2
+        abrset=1
 	shift 1
 	;;
       -asr)
-        masr=$2
+        asr=$2
+        shift 1
+        ;;
+      -cdsize)
+        max=$2
         shift 1
         ;;
       -blank)
       	blank=1
 	;;
-      -burn)
-      	burn=1
-	;;
       -noburn)
         burn=0
 	;;
+      -mp3)
+        mp3=1
+        ;;
       -mpg)
       	mkstream=0
 	;;
@@ -104,14 +131,14 @@
         ;;
       -vcdout)
       	norm="VCD"
-	mplexnorm="-f 2 -V"
-	mpegnorm="-f 2 -b 1152"
+	mplexnorm="-f 2 -m 1 -V"
+	mpegnorm="-f 2 -b 1152 -B 260"
 	imaget="-t vcd2"
 	;;
       -svcdout)
         norm="SVCD"
-	mplexnorm="-f 4 -V"
-	mpegnorm="-f 4"
+	mplexnorm="-f 4 -m 2 -V"
+	mpegnorm="-f 4 -b 2500 -B 260"
 	imaget="-t svcd"
 	;;
       *)
@@ -121,6 +148,7 @@
    shift 1
 done
 
+# some configs
 if [ -n "$wide" ]; then
    if [ "$norm" == "SVCD" ]; then
       wide=""
@@ -128,46 +156,71 @@
    fi
 fi
 
+# with mp3 audio set the default audio bitrate to 128 kbs
+if [ $mp3 -eq 1 -a $abrset -eq 0 ]; then
+   abr=128
+fi
+
+# audio sample rate in kHz
+((a=$asr / 1000))
+((b=$asr % 1000))
+[ $b -le 9 ] && b="00$b00"
+[ $b -le 99 ] && b="0$b00"
+kasr="$a.$b"
+
 # encode streams
 if [ $mkstream -eq 1 ]; then
    # start mplayer
-   mplayer -noframedrop -aop list=resample:fout=$masr -vo yuv4mpeg -ao pcm \
-      -waveheader $params &
+   mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader $params &
 
-   # mjpegtools / sox
-   ($denoise < stream.yuv | \
+   # mjpegtools
+   ($denoise < $VIDEO | \
       yuvscaler -v 0 $wide -O $norm | \
-      mpeg2enc -v 0 -s $mpegnorm -g 6 -G 15 -r 16 -o $NAME.mpv) &
-
-   # we have to use toolame, mp2enc don't understand audiodump.wav directly, no RIFF header?!
-   (toolame -m s -b $abr audiodump.wav $NAME.mpa) &
+      mpeg2enc -v 0 -s $mpegnorm -S $max -g 6 -G 15 -r 16 -o $NAME.mpv) &
    
    # wait for finishing the subprocesses
    wait
+
+   if [ $mp3 -eq 0 ]; then
+     # mp2enc/lame can't read audiodump.wav directly from named pipe,
+     # we have to read the whole file.
+     mp2enc -b $abr -r $asr -o $NAME.mpa < $AUDIO
+   else
+     lame -b $abr --resample $kasr - $NAME.mpa < $AUDIO
+   fi
 fi
 
-# remove pipes
-rm -f stream.yuv
-rm -f audiodump.pcm
-rm -f audiodump.wav
+# remove pipe and wav file, won't need anymore!
+rm -f $VIDEO
+rm -f $AUDIO
 
 # multiplex streams
 [ -f $NAME.mpv -a -f $NAME.mpa ] || exit 1
-rm -f $NAME.mpg
-mplex $mplexnorm $NAME.mpv $NAME.mpa -o $NAME.mpg
+rm -f ${NAME}*.mpg
+mplex $mplexnorm $NAME.mpv $NAME.mpa -o ${NAME}%d.mpg
 
-# create cd image
-[ -f $NAME.mpg ] || exit 1
-rm -f $NAME.cue $NAME.bin
-vcdimager $imaget -c $NAME.cue -b $NAME.bin $NAME.mpg
+# create cd images
+for mpg in ${NAME}*.mpg; do 
+   [ -f $mpg ] || exit 1
+   cue="`basename $mpg .mpg`.cue"
+   bin="`basename $mpg .mpg`.bin"
+   rm -f $cue $bin
+   vcdimager $imaget -c $cue -b $bin $mpg
+done
 
-# burn the vcd
+# burn the (s)vcd's
 [ $burn -eq 0 ] && exit 0
-[ -f $NAME.bin -a -f $NAME.cue ] || exit 1
+
+for cue in ${NAME}*.cue; do
+   bin="`basename $cue .cue`.bin"
+   [ -f $bin -a -f $cue ] || exit 1
 
-if [ $blank -eq 1 ]; then
-   cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal
-fi
-cdrdao write --reload $CDDEV --driver $CDDRV $NAME.cue
+   echo "please insert a cd in your cdwriter, after a keypress we start:"
+   read -n 1 i
 
+   if [ $blank -eq 1 ]; then
+      cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal
+   fi
+   cdrdao write --reload $CDDEV --driver $CDDRV $cue
+done
 exit 0