view TOOLS/mencvcd @ 5673:1186930949c0

cbr mp3 + wmp fixed (hopefully, untested)
author arpi
date Thu, 18 Apr 2002 14:23:07 +0000
parents b62460b1db74
children 00ac1397ecb7
line wrap: on
line source

#!/bin/sh
#
# Version:          0.1.2
#
# Licence:          GPL
#
# 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
#                   vcdimager
#                   cdrdao
#                   lame
#
################################################################################
#
# 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() {
   echo "usage: $HOWCALLED <filename> [options] [mplayer options]"
   echo
   echo "$HOWCALLED options:"
   echo
   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 16:9."
}

HOWCALLED=`basename $0`
NAME=$1
if [ $# -le 1 ]; then
   usage 
   exit 1
fi
shift 1

cd $TMPDIR
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
abrset=0
asr=44100
denoise="cat -"
norm="VCD"
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)
        asr=$2
        shift 1
        ;;
      -cdsize)
        max=$2
        shift 1
        ;;
      -blank)
      	blank=1
	;;
      -noburn)
        burn=0
	;;
      -mp3)
        mp3=1
        ;;
      -mpg)
      	mkstream=0
	;;
      -denoise)
        denoise="yuvdenoise"
        ;;
      -vcdout)
      	norm="VCD"
	mplexnorm="-f 2 -m 1 -V"
	mpegnorm="-f 2 -b 1152 -B 260"
	imaget="-t vcd2"
	;;
      -svcdout)
        norm="SVCD"
	mplexnorm="-f 4 -m 2 -V"
	mpegnorm="-f 4 -b 2500 -B 260"
	imaget="-t svcd"
	;;
      *)
	params="$params $1"
	;;
   esac
   shift 1
done

# some configs
if [ -n "$wide" ]; then
   if [ "$norm" == "SVCD" ]; then
      wide=""
      mpegnorm="$mpegnorm -a 3"
   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 -vo yuv4mpeg -ao pcm -waveheader $params &

   # mjpegtools
   ($denoise < $VIDEO | \
      yuvscaler -v 0 $wide -O $norm | \
      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 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}%d.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 (s)vcd's
[ $burn -eq 0 ] && exit 0

for cue in ${NAME}*.cue; do
   bin="`basename $cue .cue`.bin"
   [ -f $bin -a -f $cue ] || exit 1

   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