summaryrefslogtreecommitdiffstats
path: root/TOOLS/mencvcd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'TOOLS/mencvcd.sh')
-rwxr-xr-xTOOLS/mencvcd.sh440
1 files changed, 440 insertions, 0 deletions
diff --git a/TOOLS/mencvcd.sh b/TOOLS/mencvcd.sh
new file mode 100755
index 0000000000..aed3c409f6
--- /dev/null
+++ b/TOOLS/mencvcd.sh
@@ -0,0 +1,440 @@
+#!/bin/sh
+#
+# Version: 0.2.2
+#
+# Licence: GPL
+#
+# 2002/09/21 Jürgen Hammelmann <juergen.hammelmann@gmx.de>
+#
+# Script: MPlayer Sources (DVD) to (S)VCD ripping and burning
+#
+# requires: mplayer
+# mjpegtools
+# vcdimager
+# cdrdao
+# lame (optionally)
+# toolame (optionally)
+# sox (optionally)
+
+for exe in mplayer mpeg2enc mp2enc mplex yuvscaler ; do
+ if [ -z "`which $exe`" ]; then
+ echo "ERROR: $exe must be in your path $PATH!"
+ exit 1
+ fi
+done
+for exe in vcdimager lame cdrdao yuvdenoise sox toolame normalize; do
+ if [ -z "`which $exe`" ]; then
+ echo "WARNING: $exe is not found in your path $PATH!"
+ fi
+done
+
+################################################################################
+#
+# 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
+# 2002/04/16 v0.1.3:
+# - new option "-burnonly"
+# - new option "-vbr"
+# - removes mpg file after mastering cd image
+# (mplayer can read bin images!)
+# - bugfixes
+# 2002/04/22 v0.1.4
+# - bugfixes / changes
+# - more options
+# 2002/05/06 v0.1.5
+# - new option "-norm"
+# 2002/05/08 v0.1.6
+# - bugfixes
+# - new option "-vfr"
+# - "-norm" renamed to "-vnorm"
+# 2002/05/15 v0.1.7
+# - bugfixes
+# - more help
+# 2002/05/26 v0.1.8
+# - new option "-sync"
+# 2002/06/19 v0.1.9
+# - new option "-mpgonly"
+# 2002/09/21 v0.1.10
+# - bug fixes
+# - tests now, if the commands are in path and give warnings
+# and errors.
+# 2002/11/01 v0.2
+# - bug fixes
+# - new options: "-sox", "-volume", "-toolame"
+# - renamed "-mpg" to "-mpegsrc"
+# - default cd size changed to 800mb
+# 2002/11/18 v0.2.1
+# - aspect ratio for vcd's, too
+# - pulldown mode...
+# 2002/12/01 v0.2.2
+# - -normalize
+#
+################################################################################
+#
+# 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
+CDMAXSIZE=800
+
+################################################################################
+AUDIO="audiodump.wav"
+VIDEO="stream.yuv"
+VCDMODE=2
+SVCDMODE=5
+################################################################################
+
+usage() {
+ echo "Usage: $HOWCALLED <basename> [$HOWCALLED options] [mplayer options]"
+ echo
+ echo " <basename> is used as basename of the resulting mpg/bin files."
+ echo
+ echo "For mplayer options see mplayer help and manual."
+ echo
+ echo "$HOWCALLED options:"
+ echo
+ echo "-?|-h help."
+ echo "-a <n> sets the aspect ratio (for SVCD):"
+ echo " 1 - 1:1 display"
+ echo " 2 - 4:3 display"
+ echo " 3 - 16:9 display"
+ echo " 4 - 2.21:1 display"
+ echo "-abr <n> output audio bitrate in kbs [224]."
+ echo "-asr <n> output audio sample rate in Hz [44100]."
+ echo "-blank cleans cd-rw before burning."
+ echo "-burnonly burn only the premastered <name>*.cue/<name>*.bin images."
+ echo "-cdsize <n> maximal size of cd images [800 = 80min raw cd]."
+ echo "-denoise denoises mpeg stream."
+ echo "-mp3 outputs audio in mp3 instead of mp2 format."
+ echo "-mpegsrc don't encode from source, multiplex/burn the "
+ echo " encoded mpg stream."
+ echo "-mpgonly do only encoding to mpeg 1/2 format."
+ echo "-noburn disables burning."
+ echo "-normalize use 'normalize'."
+ echo "-overburn enables overburning a cd."
+ echo "-pulldown enable pulldown mode in output."
+ echo "-ratio <s> output ratio size of frames, see yuvscaler (1)."
+ echo "-size <X>x<Y> sets output size of frames."
+ echo "-sox use sox for audio resampling."
+ echo "-svcdout encode to SVCD format [VCD default]."
+ echo "-sync <n> set the presentation timestamp offset of video"
+ echo " stream w.r.t. audio stream (video-audio) in mSec."
+ echo "-toolame use toolame instead of mp2enc."
+ echo "-v <volume> change amplitude (floating point); less than 1.0"
+ echo " decreases, greater than 1.0 increases. Use that only"
+ echo " together with sox!"
+ echo "-vbr <n> output video bitrate in kbs [VCD:1152, SVCD:2500]."
+ echo "-vfr <n> sets the frame-rate of the output-stream. Currently"
+ echo " only the standard MPEG rates are supported:"
+ echo " 0 - illegal"
+ echo " 1 - 24000.0/1001.0 (NTSC 3:2 pulldown converted FILM)"
+ echo " 2 - 24.0 (NATIVE FILM)"
+ echo " 3 - 25.0 (PAL/SECAM VIDEO / converted FILM)"
+ echo " 4 - 30000.0/1001.0 (NTSC VIDEO)"
+ echo " 5 - 30.0"
+ echo " 6 - 50.0 (PAL FIELD RATE)"
+ echo " 7 - 60000.0/1001.0 (NTSC FIELD RATE)"
+ echo " 8 - 60.0"
+ echo "-vnorm <p|n|s> sets the input video norm p, n or s:"
+ echo " forces the input stream to be treated as PAL|NTSC|SECAM"
+ echo " regardless of what the stream header might suggest."
+ echo "-w outputs in wide screen format 16:9."
+ echo
+ echo "examples:"
+ echo
+ echo "'$HOWCALLED teneriffa teneriffa.avi'"
+ echo "this creates a VCD from an avi file."
+ echo
+ echo "'$HOWCALLED crazy dvd://3 -w':"
+ echo "encodes and burns dvd title 3 to VCD in 16:9."
+ echo
+ echo "'$HOWCALLED carter dvd://1 -sid 0 -aid 128 -ss 3:00 -frames 1500 \\"
+ echo " -noburn -vnorm n -vfr 1':"
+ echo "this encodes 1500 frames of dvd title 1 with subtitle 0 and audio stream"
+ echo "128 starting from 3:00 with frame rate 29.97 fps and input video norm NTSC"
+ echo "and output frame rate 23.98 fps because of the 3:2 pulldown method in NTSC."
+ echo
+ echo "'$HOWCALLED bj -size 640x272 -vf expand=640:480:0:104:0 \\"
+ echo " -cdsize 645 -noburn bj.avi'"
+ echo "this example above shows you, how to deal with movies which are not"
+ echo "created with aspect ratios of 4:3 or 16:9."
+}
+
+HOWCALLED=`basename $0`
+if [ $# -le 1 ]; then
+ usage
+ exit 1
+fi
+case $1 in
+ -*)
+ usage
+ exit 1
+ ;;
+ *)
+ NAME=$1
+ shift 1
+ ;;
+esac
+
+cd $TMPDIR
+rm -f $VIDEO
+rm -f $AUDIO
+# create a named pipe for video stream
+mkfifo -m 660 $VIDEO
+
+# some inits
+sub=""
+size=""
+aratio=""
+ratio=""
+params=""
+wide=""
+blank=0
+burn=1
+burnonly=0
+mp3=0
+mpgonly=0
+mkstream=1
+abr=224
+abrset=0
+asr=44100
+vbr=1152
+vbrset=0
+denoise="cat -"
+vnorm="VCD"
+mplexnorm="-f $VCDMODE -m 1 -V -b 46"
+imaget="-t vcd2"
+yuvin=""
+framerate=""
+sync=""
+sox=0
+toolame=0
+volume="1.0"
+overburn=""
+pd=""
+norm=0
+
+while [ "$1"x != "x" ]; do
+ case $1 in
+ -a)
+ aratio="-a $2"
+ shift 1
+ ;;
+ -w)
+ wide="-M WIDE2STD"
+ ;;
+ -h|-?)
+ usage
+ exit 0
+ ;;
+ -abr)
+ abr=$2
+ abrset=1
+ shift 1
+ ;;
+ -asr)
+ asr=$2
+ shift 1
+ ;;
+ -cdsize)
+ CDMAXSIZE=$2
+ shift 1
+ ;;
+ -blank)
+ blank=1
+ ;;
+ -noburn)
+ burn=0
+ ;;
+ -burnonly)
+ burnonly=1
+ burn=1
+ ;;
+ -overburn)
+ overburn="--overburn"
+ ;;
+ -pulldown)
+ pd="-p"
+ ;;
+ -vfr)
+ framerate="-F $2"
+ shift 1
+ ;;
+ -mp3)
+ mp3=1
+ ;;
+ -mpegsrc)
+ mkstream=0
+ ;;
+ -mpgonly)
+ mpgonly=1
+ ;;
+ -normalize)
+ norm=1
+ ;;
+ -vnorm)
+ yuvin="-n $2"
+ shift 1
+ ;;
+ -volume)
+ volume="$2"
+ shift 1
+ ;;
+ -denoise)
+ denoise="yuvdenoise"
+ ;;
+ -ratio)
+ ratio=$2
+ shift 1
+ ;;
+ -sid) # mplayer option: have to set vf expand, too!!!
+ sub="-vf pp,expand=-1:-1:-1:-1:1 -sid $2"
+ shift 1
+ ;;
+ -size)
+ size=$2
+ shift 1
+ ;;
+ -svcdout)
+ vnorm="SVCD"
+ ;;
+ -sync)
+ sync="-O $2"
+ shift 1
+ ;;
+ -sox)
+ sox=1
+ ;;
+ -toolame)
+ toolame=1
+ ;;
+ -vbr)
+ vbr=$2
+ vbrset=1
+ shift 1
+ ;;
+ *)
+ params="$params $1"
+ ;;
+ esac
+ shift 1
+done
+
+# some configs
+mpegnorm="-f $VCDMODE -b $vbr -B 260 -V 46"
+if [ "$vnorm" = "SVCD" ]; then
+ [ $vbrset -eq 0 ] && vbr=2500
+ mplexnorm="-f $SVCDMODE -m 2 -V -b 230"
+ mpegnorm="-f $SVCDMODE -b $vbr -B 260 -V 230"
+ imaget="-t svcd"
+fi
+
+# ratio overwrites wide sizing, size overwrites default frame size
+[ -n "$ratio" ] && wide="-M $ratio"
+[ -n "$size" ] && size="-O SIZE_$size"
+
+# with mp3 audio set the default audio bitrate to 128 kbs
+[ $mp3 -eq 1 -a $abrset -eq 0 ] && abr=128
+
+# 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"
+
+# start de-/encoding
+if [ $burnonly -eq 0 ]; then
+ # encode streams
+ if [ $mkstream -eq 1 ]; then
+ # start mplayer
+ command="mplayer -noframedrop -vo yuv4mpeg -ao pcm:waveheader -v -osdlevel 0 $sub $params"
+ echo "$command"
+ $command &
+
+ # mjpegtools
+ ($denoise < $VIDEO | \
+ yuvscaler -v 0 $wide -O $vnorm $size $yuvin | \
+ mpeg2enc -v 0 -s $mpegnorm $aratio -S $CDMAXSIZE -g 6 -G 15 -r 16 \
+ $pd $framerate $yuvin -4 2 -2 1 -o $NAME.mpv) &
+
+ # wait for finishing the subprocesses
+ wait
+
+ # normalize sound
+ [ $norm -eq 1 ] && (echo "normalizing sound..."; normalize $AUDIO)
+
+ # do resampling with sox
+ if [ $sox -ne 0 ]; then
+ echo "wait, do resampling with sox..."
+ sox $AUDIO -v $volume -r $asr $NAME.wav resample -qs
+ mv -f $NAME.wav $AUDIO
+ fi
+
+ if [ $toolame -ne 0 -a $mp3 -eq 0 ]; then
+ # do mp2 encoding with toolame
+ echo "wait, encoding to mp2 audio with toolame..."
+ toolame -b $abr $AUDIO
+ mv -f `basename $AUDIO .wav`.mp2 $NAME.mpa
+ elif [ $toolame -eq 0 -a $mp3 -eq 0 ]; then
+ # mp2enc/lame can't read audiodump.wav directly from named pipe,
+ # we have to read the whole file.
+ echo "wait, encoding to mp2 audio with mp2enc..."
+ mp2enc -b $abr -r $asr -o $NAME.mpa < $AUDIO
+ elif [ $mp3 -ne 0 ]; then
+ echo "wait, encoding to mp3 audio with lame..."
+ lame -b $abr --resample $kasr - $NAME.mpa < $AUDIO
+ fi
+ fi
+
+ # remove wav file, won't need anymore!
+ rm -f $AUDIO
+
+ # multiplex streams
+ [ -f $NAME.mpv -a -f $NAME.mpa ] || exit 1
+ rm -f ${NAME}*.mpg
+ mplex $mplexnorm $sync $NAME.mpv $NAME.mpa -o ${NAME}%d.mpg
+
+ # remove pipe, won't need anymore!
+ rm -f $VIDEO
+
+ # should i create only the mpeg file?
+ [ $mpgonly -eq 1 ] && exit 0
+
+ # 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
+ [ -f $bin -a -f $cue ] && rm -f $mpg
+ done
+
+# end of streaming/mastering
+fi
+
+# 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 $overburn --reload $CDDEV --driver $CDDRV $cue
+done
+exit 0