Mercurial > mplayer.hg
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