comparison TOOLS/mencvcd @ 5633:b62460b1db74

Updated to support resampling audio and multiple cds.
author atmos4
date Mon, 15 Apr 2002 14:01:07 +0000
parents 772c627c1494
children 00ac1397ecb7
comparison
equal deleted inserted replaced
5632:93c9df5225a7 5633:b62460b1db74
1 #!/bin/sh 1 #!/bin/sh
2 # 2 #
3 # Version: 0.1.1 3 # Version: 0.1.2
4 # 4 #
5 # Licence: GPL 5 # Licence: GPL
6 # 6 #
7 # 2002/05/11 Jürgen Hammelmann <juergen.hammelmann@gmx.de> 7 # 2002/04/14 Jürgen Hammelmann <juergen.hammelmann@gmx.de>
8 # 8 #
9 # Script: MPlayer Sources (DVD) to (S)VCD ripping and burning 9 # Script: MPlayer Sources (DVD) to (S)VCD ripping and burning
10 # 10 #
11 # requires: newest mplayer cvs version 11 # requires: newest mplayer cvs version
12 # mjpegtools v1.6 beta 12 # mjpegtools v1.6 beta
13 # toolame
14 # vcdimager 13 # vcdimager
15 # cdrdao 14 # cdrdao
16 # 15 # lame
17 ################################################################################ 16 #
18 # 17 ################################################################################
19 # global options section, change them to your needs! 18 #
19 # 2002/04/11 v0.1.0: first version
20 # 2002/04/12 v0.1.1:
21 # 2002/04/14 v0.1.2:
22 # - handles now multiple vcd's
23 # - support's mp3 audio as option
24 # - use of mp2enc/lame instead of toolame because of support
25 # of resampling and mp3
26 #
27 ################################################################################
28 #
29 # global config section, change them to your needs!
20 30
21 TMPDIR="." # path to directory for creating temporary files, recommended 2-3GB space 31 TMPDIR="." # path to directory for creating temporary files, recommended 2-3GB space
22 32
23 CDDRV="generic-mmc" # cdrdao: cdwriter driver 33 CDDRV="generic-mmc" # cdrdao: cdwriter driver
24 CDDEV="--device 0,1,0" # or comment out and create link /dev/cdrecorder to your cdwriter dev 34 CDDEV="--device 0,1,0" # or comment out and create link /dev/cdrecorder to your cdwriter dev
25 35
36
37 ################################################################################
38 AUDIO="audiodump.wav"
39 VIDEO="stream.yuv"
26 ################################################################################ 40 ################################################################################
27 41
28 function usage() { 42 function usage() {
29 echo "usage: $HOWCALLED <filename> [options] [mplayer options]" 43 echo "usage: $HOWCALLED <filename> [options] [mplayer options]"
30 echo 44 echo
31 echo "$HOWCALLED options:" 45 echo "$HOWCALLED options:"
32 echo 46 echo
33 echo "-w outputs in wide screen format 16:9" 47 echo "-h|-? help"
34 echo "-abr <n> audio bitrate in kbs [224]" 48 echo "-w outputs in wide screen format 16:9"
35 echo "-asr <n> audio sample rate in Hz [44100]" 49 echo "-abr <n> output audio bitrate in kbs [224]"
36 echo "-blank cleans cd-rw before burning" 50 echo "-asr <n> output audio sample rate in Hz [48000]"
37 echo "-burn enables burning [default]" 51 echo "-blank cleans cd-rw before burning"
38 echo "-denoise denoises mpeg stream" 52 echo "-cdsize <n> maximal size of cd images [646]"
39 echo "-noburn disables burning" 53 echo "-denoise denoises mpeg stream"
40 echo "-mpg don't encode from source, multiplex/burn only the mpeg stream" 54 echo "-noburn disables burning"
41 echo "-vcdout encode to VCD format [default]" 55 echo "-mp3 outputs audio in mp3 instead of mp2 format"
42 echo "-svcdout encode to SVCD format" 56 echo "-mpg don't encode from source, multiplex/burn"
57 echo " only the encoded mpg stream"
58 echo "-vcdout encode to VCD format [default]"
59 echo "-svcdout encode to SVCD format"
43 echo 60 echo
44 echo "example:" 61 echo "example:"
45 echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in wide" 62 echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in 16:9."
46 echo " screen format."
47 } 63 }
48 64
49 HOWCALLED=`basename $0` 65 HOWCALLED=`basename $0`
50 NAME=$1 66 NAME=$1
51 if [ $# -le 1 ]; then 67 if [ $# -le 1 ]; then
53 exit 1 69 exit 1
54 fi 70 fi
55 shift 1 71 shift 1
56 72
57 cd $TMPDIR 73 cd $TMPDIR
58 rm -f stream.yuv 74 rm -f $VIDEO
59 rm -f audiodump.pcm 75 rm -f $AUDIO
60 rm -f audiodump.wav 76 # create a named pipe for video stream
61 mkfifo -m 660 stream.yuv 77 mkfifo -m 660 $VIDEO
62 mkfifo -m 660 audiodump.pcm 78
63 mkfifo -m 660 audiodump.wav 79 # some inits
64
65 params="" 80 params=""
66 wide="" 81 wide=""
67 blank=0 82 blank=0
68 burn=1 83 burn=1
84 mp3=0
69 mkstream=1 85 mkstream=1
70 abr=224 86 abr=224
71 masr=44100 87 abrset=0
88 asr=44100
72 denoise="cat -" 89 denoise="cat -"
73 norm="VCD" 90 norm="VCD"
74 mplexnorm="-f 2 -V" 91 mplexnorm="-f 2 -m 1 -V"
75 mpegnorm="-f 2 -b 1152" 92 max=646
93 mpegnorm="-f 2 -b 1152 -B 260"
76 imaget="-t vcd2" 94 imaget="-t vcd2"
77 while [ "$1"x != "x" ]; do 95 while [ "$1"x != "x" ]; do
78 case $1 in 96 case $1 in
79 -w) 97 -w)
80 wide="-M WIDE2STD" 98 wide="-M WIDE2STD"
81 ;; 99 ;;
100 -h|-?)
101 usage
102 exit 0
103 ;;
82 -abr) 104 -abr)
83 abr=$2 105 abr=$2
106 abrset=1
84 shift 1 107 shift 1
85 ;; 108 ;;
86 -asr) 109 -asr)
87 masr=$2 110 asr=$2
111 shift 1
112 ;;
113 -cdsize)
114 max=$2
88 shift 1 115 shift 1
89 ;; 116 ;;
90 -blank) 117 -blank)
91 blank=1 118 blank=1
92 ;; 119 ;;
93 -burn)
94 burn=1
95 ;;
96 -noburn) 120 -noburn)
97 burn=0 121 burn=0
98 ;; 122 ;;
123 -mp3)
124 mp3=1
125 ;;
99 -mpg) 126 -mpg)
100 mkstream=0 127 mkstream=0
101 ;; 128 ;;
102 -denoise) 129 -denoise)
103 denoise="yuvdenoise" 130 denoise="yuvdenoise"
104 ;; 131 ;;
105 -vcdout) 132 -vcdout)
106 norm="VCD" 133 norm="VCD"
107 mplexnorm="-f 2 -V" 134 mplexnorm="-f 2 -m 1 -V"
108 mpegnorm="-f 2 -b 1152" 135 mpegnorm="-f 2 -b 1152 -B 260"
109 imaget="-t vcd2" 136 imaget="-t vcd2"
110 ;; 137 ;;
111 -svcdout) 138 -svcdout)
112 norm="SVCD" 139 norm="SVCD"
113 mplexnorm="-f 4 -V" 140 mplexnorm="-f 4 -m 2 -V"
114 mpegnorm="-f 4" 141 mpegnorm="-f 4 -b 2500 -B 260"
115 imaget="-t svcd" 142 imaget="-t svcd"
116 ;; 143 ;;
117 *) 144 *)
118 params="$params $1" 145 params="$params $1"
119 ;; 146 ;;
120 esac 147 esac
121 shift 1 148 shift 1
122 done 149 done
123 150
151 # some configs
124 if [ -n "$wide" ]; then 152 if [ -n "$wide" ]; then
125 if [ "$norm" == "SVCD" ]; then 153 if [ "$norm" == "SVCD" ]; then
126 wide="" 154 wide=""
127 mpegnorm="$mpegnorm -a 3" 155 mpegnorm="$mpegnorm -a 3"
128 fi 156 fi
129 fi 157 fi
130 158
159 # with mp3 audio set the default audio bitrate to 128 kbs
160 if [ $mp3 -eq 1 -a $abrset -eq 0 ]; then
161 abr=128
162 fi
163
164 # audio sample rate in kHz
165 ((a=$asr / 1000))
166 ((b=$asr % 1000))
167 [ $b -le 9 ] && b="00$b00"
168 [ $b -le 99 ] && b="0$b00"
169 kasr="$a.$b"
170
131 # encode streams 171 # encode streams
132 if [ $mkstream -eq 1 ]; then 172 if [ $mkstream -eq 1 ]; then
133 # start mplayer 173 # start mplayer
134 mplayer -noframedrop -aop list=resample:fout=$masr -vo yuv4mpeg -ao pcm \ 174 mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader $params &
135 -waveheader $params & 175
136 176 # mjpegtools
137 # mjpegtools / sox 177 ($denoise < $VIDEO | \
138 ($denoise < stream.yuv | \
139 yuvscaler -v 0 $wide -O $norm | \ 178 yuvscaler -v 0 $wide -O $norm | \
140 mpeg2enc -v 0 -s $mpegnorm -g 6 -G 15 -r 16 -o $NAME.mpv) & 179 mpeg2enc -v 0 -s $mpegnorm -S $max -g 6 -G 15 -r 16 -o $NAME.mpv) &
141
142 # we have to use toolame, mp2enc don't understand audiodump.wav directly, no RIFF header?!
143 (toolame -m s -b $abr audiodump.wav $NAME.mpa) &
144 180
145 # wait for finishing the subprocesses 181 # wait for finishing the subprocesses
146 wait 182 wait
147 fi 183
148 184 if [ $mp3 -eq 0 ]; then
149 # remove pipes 185 # mp2enc/lame can't read audiodump.wav directly from named pipe,
150 rm -f stream.yuv 186 # we have to read the whole file.
151 rm -f audiodump.pcm 187 mp2enc -b $abr -r $asr -o $NAME.mpa < $AUDIO
152 rm -f audiodump.wav 188 else
189 lame -b $abr --resample $kasr - $NAME.mpa < $AUDIO
190 fi
191 fi
192
193 # remove pipe and wav file, won't need anymore!
194 rm -f $VIDEO
195 rm -f $AUDIO
153 196
154 # multiplex streams 197 # multiplex streams
155 [ -f $NAME.mpv -a -f $NAME.mpa ] || exit 1 198 [ -f $NAME.mpv -a -f $NAME.mpa ] || exit 1
156 rm -f $NAME.mpg 199 rm -f ${NAME}*.mpg
157 mplex $mplexnorm $NAME.mpv $NAME.mpa -o $NAME.mpg 200 mplex $mplexnorm $NAME.mpv $NAME.mpa -o ${NAME}%d.mpg
158 201
159 # create cd image 202 # create cd images
160 [ -f $NAME.mpg ] || exit 1 203 for mpg in ${NAME}*.mpg; do
161 rm -f $NAME.cue $NAME.bin 204 [ -f $mpg ] || exit 1
162 vcdimager $imaget -c $NAME.cue -b $NAME.bin $NAME.mpg 205 cue="`basename $mpg .mpg`.cue"
163 206 bin="`basename $mpg .mpg`.bin"
164 # burn the vcd 207 rm -f $cue $bin
208 vcdimager $imaget -c $cue -b $bin $mpg
209 done
210
211 # burn the (s)vcd's
165 [ $burn -eq 0 ] && exit 0 212 [ $burn -eq 0 ] && exit 0
166 [ -f $NAME.bin -a -f $NAME.cue ] || exit 1 213
167 214 for cue in ${NAME}*.cue; do
168 if [ $blank -eq 1 ]; then 215 bin="`basename $cue .cue`.bin"
169 cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal 216 [ -f $bin -a -f $cue ] || exit 1
170 fi 217
171 cdrdao write --reload $CDDEV --driver $CDDRV $NAME.cue 218 echo "please insert a cd in your cdwriter, after a keypress we start:"
172 219 read -n 1 i
220
221 if [ $blank -eq 1 ]; then
222 cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal
223 fi
224 cdrdao write --reload $CDDEV --driver $CDDRV $cue
225 done
173 exit 0 226 exit 0