2002-04-11 22:53:48 +00:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
#
|
2002-05-07 08:39:22 +00:00
|
|
|
|
# Version: 0.1.5
|
2002-04-11 22:53:48 +00:00
|
|
|
|
#
|
|
|
|
|
# Licence: GPL
|
|
|
|
|
#
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# 2002/04/14 J<>rgen Hammelmann <juergen.hammelmann@gmx.de>
|
2002-04-11 22:53:48 +00:00
|
|
|
|
#
|
|
|
|
|
# Script: MPlayer Sources (DVD) to (S)VCD ripping and burning
|
|
|
|
|
#
|
|
|
|
|
# requires: newest mplayer cvs version
|
|
|
|
|
# mjpegtools v1.6 beta
|
|
|
|
|
# vcdimager
|
|
|
|
|
# cdrdao
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# lame
|
2002-04-11 22:53:48 +00:00
|
|
|
|
#
|
|
|
|
|
################################################################################
|
|
|
|
|
#
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# 2002/04/11 v0.1.0: first version
|
|
|
|
|
# 2002/04/12 v0.1.1:
|
|
|
|
|
# 2002/04/14 v0.1.2:
|
2002-04-18 17:41:54 +00:00
|
|
|
|
# - 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!)
|
2002-04-22 09:42:34 +00:00
|
|
|
|
# - bugfixes
|
|
|
|
|
# 2002/04/22 v0.1.4
|
|
|
|
|
# - bugfixes / changes
|
|
|
|
|
# - more options
|
2002-05-07 08:39:22 +00:00
|
|
|
|
# 2002/05/06 v0.1.5
|
|
|
|
|
# - new option "-norm"
|
|
|
|
|
#
|
2002-04-15 14:01:07 +00:00
|
|
|
|
#
|
|
|
|
|
################################################################################
|
|
|
|
|
#
|
|
|
|
|
# global config section, change them to your needs!
|
2002-04-11 22:53:48 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
|
AUDIO="audiodump.wav"
|
|
|
|
|
VIDEO="stream.yuv"
|
2002-04-22 09:42:34 +00:00
|
|
|
|
VCDMODE=2
|
|
|
|
|
SVCDMODE=5
|
2002-04-11 22:53:48 +00:00
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
|
|
function usage() {
|
2002-04-18 17:41:54 +00:00
|
|
|
|
echo "usage: $HOWCALLED <name> [options] [mplayer options]"
|
2002-04-11 22:53:48 +00:00
|
|
|
|
echo
|
|
|
|
|
echo "$HOWCALLED options:"
|
|
|
|
|
echo
|
2002-04-15 14:01:07 +00:00
|
|
|
|
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"
|
2002-04-18 17:41:54 +00:00
|
|
|
|
echo "-burnonly burn only the premastered <name>*.cue/<name>*.bin images"
|
2002-04-15 14:01:07 +00:00
|
|
|
|
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"
|
2002-05-07 08:39:22 +00:00
|
|
|
|
echo "-norm <p|n|s> sets the output norm p,n,s (pal, ntsc, secam),"
|
|
|
|
|
echo " sometimes needed for yuvscaler!"
|
2002-04-22 09:42:34 +00:00
|
|
|
|
echo "-ratio <s> output ratio size of frames, see yuvscaler (1)"
|
|
|
|
|
echo "-size <XxY> sets output size of frames"
|
2002-04-18 17:41:54 +00:00
|
|
|
|
echo "-svcdout encode to SVCD format [VCD default]"
|
|
|
|
|
echo "-vbr <n> output video bitrate in kbs [VCD:1152, SVCD:2500]"
|
2002-04-11 22:53:48 +00:00
|
|
|
|
echo
|
|
|
|
|
echo "example:"
|
2002-04-15 14:01:07 +00:00
|
|
|
|
echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in 16:9."
|
2002-04-11 22:53:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HOWCALLED=`basename $0`
|
|
|
|
|
NAME=$1
|
|
|
|
|
if [ $# -le 1 ]; then
|
|
|
|
|
usage
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
shift 1
|
|
|
|
|
|
|
|
|
|
cd $TMPDIR
|
2002-04-15 14:01:07 +00:00
|
|
|
|
rm -f $VIDEO
|
|
|
|
|
rm -f $AUDIO
|
|
|
|
|
# create a named pipe for video stream
|
|
|
|
|
mkfifo -m 660 $VIDEO
|
2002-04-11 22:53:48 +00:00
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# some inits
|
2002-04-22 09:42:34 +00:00
|
|
|
|
sub=""
|
|
|
|
|
size=""
|
|
|
|
|
ratio=""
|
2002-04-11 22:53:48 +00:00
|
|
|
|
params=""
|
|
|
|
|
wide=""
|
|
|
|
|
blank=0
|
|
|
|
|
burn=1
|
2002-04-18 17:41:54 +00:00
|
|
|
|
burnonly=0
|
2002-04-15 14:01:07 +00:00
|
|
|
|
mp3=0
|
2002-04-11 22:53:48 +00:00
|
|
|
|
mkstream=1
|
|
|
|
|
abr=224
|
2002-04-15 14:01:07 +00:00
|
|
|
|
abrset=0
|
|
|
|
|
asr=44100
|
2002-04-18 17:41:54 +00:00
|
|
|
|
vbr=1152
|
|
|
|
|
vbrset=0
|
2002-04-11 22:53:48 +00:00
|
|
|
|
denoise="cat -"
|
|
|
|
|
norm="VCD"
|
2002-04-22 09:42:34 +00:00
|
|
|
|
mplexnorm="-f $VCDMODE -m 1 -V -b 46"
|
2002-04-15 14:01:07 +00:00
|
|
|
|
max=646
|
2002-04-22 09:42:34 +00:00
|
|
|
|
mpegnorm="-f $VCDMODE -b $vbr -B 260 -V 46"
|
2002-04-11 22:53:48 +00:00
|
|
|
|
imaget="-t vcd2"
|
2002-05-07 08:39:22 +00:00
|
|
|
|
yuvout=""
|
2002-04-18 17:41:54 +00:00
|
|
|
|
|
2002-04-11 22:53:48 +00:00
|
|
|
|
while [ "$1"x != "x" ]; do
|
|
|
|
|
case $1 in
|
|
|
|
|
-w)
|
|
|
|
|
wide="-M WIDE2STD"
|
|
|
|
|
;;
|
2002-04-15 14:01:07 +00:00
|
|
|
|
-h|-?)
|
|
|
|
|
usage
|
|
|
|
|
exit 0
|
|
|
|
|
;;
|
2002-04-11 22:53:48 +00:00
|
|
|
|
-abr)
|
|
|
|
|
abr=$2
|
2002-04-15 14:01:07 +00:00
|
|
|
|
abrset=1
|
2002-04-11 22:53:48 +00:00
|
|
|
|
shift 1
|
|
|
|
|
;;
|
|
|
|
|
-asr)
|
2002-04-15 14:01:07 +00:00
|
|
|
|
asr=$2
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
|
|
|
|
-cdsize)
|
|
|
|
|
max=$2
|
2002-04-11 22:53:48 +00:00
|
|
|
|
shift 1
|
|
|
|
|
;;
|
|
|
|
|
-blank)
|
|
|
|
|
blank=1
|
|
|
|
|
;;
|
|
|
|
|
-noburn)
|
|
|
|
|
burn=0
|
|
|
|
|
;;
|
2002-04-18 17:41:54 +00:00
|
|
|
|
-burnonly)
|
|
|
|
|
burnonly=1
|
|
|
|
|
burn=1
|
|
|
|
|
;;
|
2002-04-15 14:01:07 +00:00
|
|
|
|
-mp3)
|
|
|
|
|
mp3=1
|
|
|
|
|
;;
|
2002-04-11 22:53:48 +00:00
|
|
|
|
-mpg)
|
|
|
|
|
mkstream=0
|
|
|
|
|
;;
|
2002-05-07 08:39:22 +00:00
|
|
|
|
-norm)
|
|
|
|
|
yuvout="-n $2"
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
2002-04-11 22:53:48 +00:00
|
|
|
|
-denoise)
|
|
|
|
|
denoise="yuvdenoise"
|
|
|
|
|
;;
|
2002-04-22 09:42:34 +00:00
|
|
|
|
-ratio)
|
|
|
|
|
ratio=$2
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
|
|
|
|
-sid) # mplayer option: have to set vop expand, too!!!
|
|
|
|
|
sub="-vop pp,expand=-1:-1:-1:-1:1 -sid $2"
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
|
|
|
|
-size)
|
|
|
|
|
size=$2
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
2002-04-11 22:53:48 +00:00
|
|
|
|
-svcdout)
|
|
|
|
|
norm="SVCD"
|
2002-04-18 17:41:54 +00:00
|
|
|
|
;;
|
|
|
|
|
-vbr)
|
|
|
|
|
vbr=$2
|
|
|
|
|
vbrset=1
|
|
|
|
|
shift 1
|
2002-04-11 22:53:48 +00:00
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
params="$params $1"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
shift 1
|
|
|
|
|
done
|
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# some configs
|
2002-04-18 17:41:54 +00:00
|
|
|
|
if [ "$norm" == "SVCD" ]; then
|
|
|
|
|
[ $vbrset -eq 0 ] && vbr=2500
|
2002-04-22 09:42:34 +00:00
|
|
|
|
mplexnorm="-f $SVCDMODE -m 2 -V -b 230"
|
|
|
|
|
if [ -n "$wide" ]; then
|
|
|
|
|
wide=""
|
|
|
|
|
mpegnorm="-f $SVCDMODE -b $vbr -B 260 -V 230 -a 3"
|
|
|
|
|
else
|
|
|
|
|
mpegnorm="-f $SVCDMODE -b $vbr -B 260 -V 230 -a 2"
|
|
|
|
|
fi
|
2002-04-18 17:41:54 +00:00
|
|
|
|
imaget="-t svcd"
|
2002-04-11 22:53:48 +00:00
|
|
|
|
fi
|
|
|
|
|
|
2002-04-22 09:42:34 +00:00
|
|
|
|
# ratio overwrites wide sizing, size overwrites default frame size
|
|
|
|
|
[ -n "$ratio" ] && wide="-M $ratio"
|
|
|
|
|
[ -n "$size" ] && size="-O SIZE_$size"
|
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# with mp3 audio set the default audio bitrate to 128 kbs
|
2002-04-18 17:41:54 +00:00
|
|
|
|
[ $mp3 -eq 1 -a $abrset -eq 0 ] && abr=128
|
2002-04-15 14:01:07 +00:00
|
|
|
|
|
|
|
|
|
# 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"
|
|
|
|
|
|
2002-04-22 09:42:34 +00:00
|
|
|
|
# start de-/encoding
|
2002-04-18 17:41:54 +00:00
|
|
|
|
if [ $burnonly -eq 0 ]; then
|
|
|
|
|
# encode streams
|
|
|
|
|
if [ $mkstream -eq 1 ]; then
|
|
|
|
|
# start mplayer
|
|
|
|
|
mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader \
|
2002-04-22 09:42:34 +00:00
|
|
|
|
-v -osdlevel 0 $sub $params &
|
2002-04-18 17:41:54 +00:00
|
|
|
|
|
|
|
|
|
# mjpegtools
|
|
|
|
|
($denoise < $VIDEO | \
|
2002-05-07 08:39:22 +00:00
|
|
|
|
yuvscaler -v 0 $wide -O $norm $size $yuvout | \
|
2002-04-22 09:42:34 +00:00
|
|
|
|
mpeg2enc -v 0 -s $mpegnorm -S $max -g 6 -G 15 -r 16 \
|
|
|
|
|
-4 2 -2 1 -o $NAME.mpv) &
|
2002-04-11 22:53:48 +00:00
|
|
|
|
|
2002-04-18 17:41:54 +00:00
|
|
|
|
# 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
|
2002-04-15 14:01:07 +00:00
|
|
|
|
fi
|
2002-04-18 17:41:54 +00:00
|
|
|
|
|
|
|
|
|
# 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 $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
|
|
|
|
|
[ -f $bin -a -f $cue ] && rm -f $mpg
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# end of streaming/mastering
|
2002-04-11 22:53:48 +00:00
|
|
|
|
fi
|
|
|
|
|
|
2002-04-18 17:41:54 +00:00
|
|
|
|
# remove pipe, won't need anymore!
|
2002-04-15 14:01:07 +00:00
|
|
|
|
rm -f $VIDEO
|
2002-04-11 22:53:48 +00:00
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
# burn the (s)vcd's
|
2002-04-11 22:53:48 +00:00
|
|
|
|
[ $burn -eq 0 ] && exit 0
|
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
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
|
2002-04-11 22:53:48 +00:00
|
|
|
|
|
2002-04-15 14:01:07 +00:00
|
|
|
|
if [ $blank -eq 1 ]; then
|
|
|
|
|
cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal
|
|
|
|
|
fi
|
|
|
|
|
cdrdao write --reload $CDDEV --driver $CDDRV $cue
|
|
|
|
|
done
|
2002-04-11 22:53:48 +00:00
|
|
|
|
exit 0
|