Mercurial > mplayer.hg
annotate TOOLS/mencvcd.sh @ 34685:311b47301ea7
Remove gstrcasecmp().
This function isn't necessary. strcasecmp() can be used just as well,
because both arguments to the gstrcasecmp() calls have been checked
to be not NULL prior to the call.
author | ib |
---|---|
date | Fri, 24 Feb 2012 17:26:35 +0000 |
parents | e193fb0e07e7 |
children |
rev | line source |
---|---|
27199 | 1 #!/bin/bash |
27198 | 2 # |
3 # Version: 0.2.2 | |
4 # | |
5 # Licence: GPL | |
6 # | |
29628 | 7 # 2002/09/21 Jürgen Hammelmann <juergen.hammelmann@gmx.de> |
27198 | 8 # |
9 # Script: MPlayer Sources (DVD) to (S)VCD ripping and burning | |
10 # | |
11 # requires: mplayer | |
12 # mjpegtools | |
13 # vcdimager | |
14 # cdrdao | |
15 # lame (optionally) | |
16 # toolame (optionally) | |
17 # sox (optionally) | |
18 | |
19 for exe in mplayer mpeg2enc mp2enc mplex yuvscaler ; do | |
20 if [ -z "`which $exe`" ]; then | |
21 echo "ERROR: $exe must be in your path $PATH!" | |
22 exit 1 | |
23 fi | |
24 done | |
25 for exe in vcdimager lame cdrdao yuvdenoise sox toolame normalize; do | |
26 if [ -z "`which $exe`" ]; then | |
27 echo "WARNING: $exe is not found in your path $PATH!" | |
28 fi | |
29 done | |
30 | |
31 ################################################################################ | |
32 # | |
33 # 2002/04/11 v0.1.0: first version | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
34 # 2002/04/12 v0.1.1: |
27198 | 35 # 2002/04/14 v0.1.2: |
36 # - handles now multiple vcd's | |
37 # - support's mp3 audio as option | |
38 # - use of mp2enc/lame instead of toolame because of support | |
39 # of resampling and mp3 | |
40 # 2002/04/16 v0.1.3: | |
41 # - new option "-burnonly" | |
42 # - new option "-vbr" | |
43 # - removes mpg file after mastering cd image | |
44 # (mplayer can read bin images!) | |
45 # - bugfixes | |
46 # 2002/04/22 v0.1.4 | |
47 # - bugfixes / changes | |
48 # - more options | |
49 # 2002/05/06 v0.1.5 | |
50 # - new option "-norm" | |
51 # 2002/05/08 v0.1.6 | |
52 # - bugfixes | |
53 # - new option "-vfr" | |
54 # - "-norm" renamed to "-vnorm" | |
55 # 2002/05/15 v0.1.7 | |
56 # - bugfixes | |
57 # - more help | |
58 # 2002/05/26 v0.1.8 | |
59 # - new option "-sync" | |
60 # 2002/06/19 v0.1.9 | |
61 # - new option "-mpgonly" | |
62 # 2002/09/21 v0.1.10 | |
63 # - bug fixes | |
64 # - tests now, if the commands are in path and give warnings | |
65 # and errors. | |
66 # 2002/11/01 v0.2 | |
67 # - bug fixes | |
68 # - new options: "-sox", "-volume", "-toolame" | |
69 # - renamed "-mpg" to "-mpegsrc" | |
70 # - default cd size changed to 800mb | |
71 # 2002/11/18 v0.2.1 | |
72 # - aspect ratio for vcd's, too | |
73 # - pulldown mode... | |
74 # 2002/12/01 v0.2.2 | |
75 # - -normalize | |
76 # | |
77 ################################################################################ | |
78 # | |
79 # global config section, change them to your needs! | |
80 | |
81 TMPDIR="." # path to directory for creating temporary files, recommended 2-3GB space | |
82 | |
83 CDDRV="generic-mmc" # cdrdao: cdwriter driver | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
84 CDDEV="--device 0,1,0" # or comment out and create link /dev/cdrecorder |
27198 | 85 # to your cdwriter dev |
86 CDMAXSIZE=800 | |
87 | |
88 ################################################################################ | |
89 AUDIO="audiodump.wav" | |
90 VIDEO="stream.yuv" | |
91 VCDMODE=2 | |
92 SVCDMODE=5 | |
93 ################################################################################ | |
94 | |
95 usage() { | |
96 echo "Usage: $HOWCALLED <basename> [$HOWCALLED options] [mplayer options]" | |
97 echo | |
98 echo " <basename> is used as basename of the resulting mpg/bin files." | |
99 echo | |
100 echo "For mplayer options see mplayer help and manual." | |
101 echo | |
102 echo "$HOWCALLED options:" | |
103 echo | |
104 echo "-?|-h help." | |
105 echo "-a <n> sets the aspect ratio (for SVCD):" | |
106 echo " 1 - 1:1 display" | |
107 echo " 2 - 4:3 display" | |
108 echo " 3 - 16:9 display" | |
109 echo " 4 - 2.21:1 display" | |
110 echo "-abr <n> output audio bitrate in kbs [224]." | |
111 echo "-asr <n> output audio sample rate in Hz [44100]." | |
112 echo "-blank cleans cd-rw before burning." | |
113 echo "-burnonly burn only the premastered <name>*.cue/<name>*.bin images." | |
114 echo "-cdsize <n> maximal size of cd images [800 = 80min raw cd]." | |
115 echo "-denoise denoises mpeg stream." | |
116 echo "-mp3 outputs audio in mp3 instead of mp2 format." | |
117 echo "-mpegsrc don't encode from source, multiplex/burn the " | |
118 echo " encoded mpg stream." | |
119 echo "-mpgonly do only encoding to mpeg 1/2 format." | |
120 echo "-noburn disables burning." | |
121 echo "-normalize use 'normalize'." | |
122 echo "-overburn enables overburning a cd." | |
123 echo "-pulldown enable pulldown mode in output." | |
124 echo "-ratio <s> output ratio size of frames, see yuvscaler (1)." | |
125 echo "-size <X>x<Y> sets output size of frames." | |
126 echo "-sox use sox for audio resampling." | |
127 echo "-svcdout encode to SVCD format [VCD default]." | |
128 echo "-sync <n> set the presentation timestamp offset of video" | |
129 echo " stream w.r.t. audio stream (video-audio) in mSec." | |
130 echo "-toolame use toolame instead of mp2enc." | |
131 echo "-v <volume> change amplitude (floating point); less than 1.0" | |
132 echo " decreases, greater than 1.0 increases. Use that only" | |
133 echo " together with sox!" | |
134 echo "-vbr <n> output video bitrate in kbs [VCD:1152, SVCD:2500]." | |
135 echo "-vfr <n> sets the frame-rate of the output-stream. Currently" | |
136 echo " only the standard MPEG rates are supported:" | |
137 echo " 0 - illegal" | |
138 echo " 1 - 24000.0/1001.0 (NTSC 3:2 pulldown converted FILM)" | |
139 echo " 2 - 24.0 (NATIVE FILM)" | |
140 echo " 3 - 25.0 (PAL/SECAM VIDEO / converted FILM)" | |
141 echo " 4 - 30000.0/1001.0 (NTSC VIDEO)" | |
142 echo " 5 - 30.0" | |
143 echo " 6 - 50.0 (PAL FIELD RATE)" | |
144 echo " 7 - 60000.0/1001.0 (NTSC FIELD RATE)" | |
145 echo " 8 - 60.0" | |
146 echo "-vnorm <p|n|s> sets the input video norm p, n or s:" | |
147 echo " forces the input stream to be treated as PAL|NTSC|SECAM" | |
148 echo " regardless of what the stream header might suggest." | |
149 echo "-w outputs in wide screen format 16:9." | |
150 echo | |
151 echo "examples:" | |
152 echo | |
153 echo "'$HOWCALLED teneriffa teneriffa.avi'" | |
154 echo "this creates a VCD from an avi file." | |
155 echo | |
156 echo "'$HOWCALLED crazy dvd://3 -w':" | |
157 echo "encodes and burns dvd title 3 to VCD in 16:9." | |
158 echo | |
159 echo "'$HOWCALLED carter dvd://1 -sid 0 -aid 128 -ss 3:00 -frames 1500 \\" | |
160 echo " -noburn -vnorm n -vfr 1':" | |
161 echo "this encodes 1500 frames of dvd title 1 with subtitle 0 and audio stream" | |
162 echo "128 starting from 3:00 with frame rate 29.97 fps and input video norm NTSC" | |
163 echo "and output frame rate 23.98 fps because of the 3:2 pulldown method in NTSC." | |
164 echo | |
165 echo "'$HOWCALLED bj -size 640x272 -vf expand=640:480:0:104:0 \\" | |
166 echo " -cdsize 645 -noburn bj.avi'" | |
167 echo "this example above shows you, how to deal with movies which are not" | |
168 echo "created with aspect ratios of 4:3 or 16:9." | |
169 } | |
170 | |
171 HOWCALLED=`basename $0` | |
172 if [ $# -le 1 ]; then | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
173 usage |
27198 | 174 exit 1 |
175 fi | |
176 case $1 in | |
177 -*) | |
178 usage | |
179 exit 1 | |
180 ;; | |
181 *) | |
182 NAME=$1 | |
183 shift 1 | |
184 ;; | |
185 esac | |
186 | |
187 cd $TMPDIR | |
188 rm -f $VIDEO | |
189 rm -f $AUDIO | |
190 # create a named pipe for video stream | |
191 mkfifo -m 660 $VIDEO | |
192 | |
193 # some inits | |
194 sub="" | |
195 size="" | |
196 aratio="" | |
197 ratio="" | |
198 params="" | |
199 wide="" | |
200 blank=0 | |
201 burn=1 | |
202 burnonly=0 | |
203 mp3=0 | |
204 mpgonly=0 | |
205 mkstream=1 | |
206 abr=224 | |
207 abrset=0 | |
208 asr=44100 | |
209 vbr=1152 | |
210 vbrset=0 | |
211 denoise="cat -" | |
212 vnorm="VCD" | |
213 mplexnorm="-f $VCDMODE -m 1 -V -b 46" | |
214 imaget="-t vcd2" | |
215 yuvin="" | |
216 framerate="" | |
217 sync="" | |
218 sox=0 | |
219 toolame=0 | |
220 volume="1.0" | |
221 overburn="" | |
222 pd="" | |
223 norm=0 | |
224 | |
225 while [ "$1"x != "x" ]; do | |
226 case $1 in | |
227 -a) | |
228 aratio="-a $2" | |
229 shift 1 | |
230 ;; | |
231 -w) | |
232 wide="-M WIDE2STD" | |
233 ;; | |
234 -h|-?) | |
235 usage | |
236 exit 0 | |
237 ;; | |
238 -abr) | |
239 abr=$2 | |
240 abrset=1 | |
241 shift 1 | |
242 ;; | |
243 -asr) | |
244 asr=$2 | |
245 shift 1 | |
246 ;; | |
247 -cdsize) | |
248 CDMAXSIZE=$2 | |
249 shift 1 | |
250 ;; | |
251 -blank) | |
252 blank=1 | |
253 ;; | |
254 -noburn) | |
255 burn=0 | |
256 ;; | |
257 -burnonly) | |
258 burnonly=1 | |
259 burn=1 | |
260 ;; | |
261 -overburn) | |
262 overburn="--overburn" | |
263 ;; | |
264 -pulldown) | |
265 pd="-p" | |
266 ;; | |
267 -vfr) | |
268 framerate="-F $2" | |
269 shift 1 | |
270 ;; | |
271 -mp3) | |
272 mp3=1 | |
273 ;; | |
274 -mpegsrc) | |
275 mkstream=0 | |
276 ;; | |
277 -mpgonly) | |
278 mpgonly=1 | |
279 ;; | |
280 -normalize) | |
281 norm=1 | |
282 ;; | |
283 -vnorm) | |
284 yuvin="-n $2" | |
285 shift 1 | |
286 ;; | |
287 -volume) | |
288 volume="$2" | |
289 shift 1 | |
290 ;; | |
291 -denoise) | |
292 denoise="yuvdenoise" | |
293 ;; | |
294 -ratio) | |
295 ratio=$2 | |
296 shift 1 | |
297 ;; | |
298 -sid) # mplayer option: have to set vf expand, too!!! | |
299 sub="-vf pp,expand=-1:-1:-1:-1:1 -sid $2" | |
300 shift 1 | |
301 ;; | |
302 -size) | |
303 size=$2 | |
304 shift 1 | |
305 ;; | |
306 -svcdout) | |
307 vnorm="SVCD" | |
308 ;; | |
309 -sync) | |
310 sync="-O $2" | |
311 shift 1 | |
312 ;; | |
313 -sox) | |
314 sox=1 | |
315 ;; | |
316 -toolame) | |
317 toolame=1 | |
318 ;; | |
319 -vbr) | |
320 vbr=$2 | |
321 vbrset=1 | |
322 shift 1 | |
323 ;; | |
324 *) | |
325 params="$params $1" | |
326 ;; | |
327 esac | |
328 shift 1 | |
329 done | |
330 | |
331 # some configs | |
332 mpegnorm="-f $VCDMODE -b $vbr -B 260 -V 46" | |
333 if [ "$vnorm" = "SVCD" ]; then | |
334 [ $vbrset -eq 0 ] && vbr=2500 | |
335 mplexnorm="-f $SVCDMODE -m 2 -V -b 230" | |
336 mpegnorm="-f $SVCDMODE -b $vbr -B 260 -V 230" | |
337 imaget="-t svcd" | |
338 fi | |
339 | |
340 # ratio overwrites wide sizing, size overwrites default frame size | |
341 [ -n "$ratio" ] && wide="-M $ratio" | |
342 [ -n "$size" ] && size="-O SIZE_$size" | |
343 | |
344 # with mp3 audio set the default audio bitrate to 128 kbs | |
345 [ $mp3 -eq 1 -a $abrset -eq 0 ] && abr=128 | |
346 | |
347 # audio sample rate in kHz | |
29627
d8d2b355825c
Fix bashism: Use '$(( ))' syntax instead of '(( ))' for arithmetic expressions.
diego
parents:
29263
diff
changeset
|
348 a=$(($a=$asr / 1000)) |
d8d2b355825c
Fix bashism: Use '$(( ))' syntax instead of '(( ))' for arithmetic expressions.
diego
parents:
29263
diff
changeset
|
349 b=$(($b=$asr % 1000)) |
27198 | 350 [ $b -le 9 ] && b="00$b00" |
351 [ $b -le 99 ] && b="0$b00" | |
352 kasr="$a.$b" | |
353 | |
354 # start de-/encoding | |
355 if [ $burnonly -eq 0 ]; then | |
356 # encode streams | |
357 if [ $mkstream -eq 1 ]; then | |
358 # start mplayer | |
359 command="mplayer -noframedrop -vo yuv4mpeg -ao pcm:waveheader -v -osdlevel 0 $sub $params" | |
360 echo "$command" | |
361 $command & | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
362 |
27198 | 363 # mjpegtools |
364 ($denoise < $VIDEO | \ | |
365 yuvscaler -v 0 $wide -O $vnorm $size $yuvin | \ | |
366 mpeg2enc -v 0 -s $mpegnorm $aratio -S $CDMAXSIZE -g 6 -G 15 -r 16 \ | |
367 $pd $framerate $yuvin -4 2 -2 1 -o $NAME.mpv) & | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
368 |
27198 | 369 # wait for finishing the subprocesses |
370 wait | |
371 | |
372 # normalize sound | |
373 [ $norm -eq 1 ] && (echo "normalizing sound..."; normalize $AUDIO) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
374 |
27198 | 375 # do resampling with sox |
376 if [ $sox -ne 0 ]; then | |
377 echo "wait, do resampling with sox..." | |
378 sox $AUDIO -v $volume -r $asr $NAME.wav resample -qs | |
379 mv -f $NAME.wav $AUDIO | |
380 fi | |
381 | |
382 if [ $toolame -ne 0 -a $mp3 -eq 0 ]; then | |
383 # do mp2 encoding with toolame | |
384 echo "wait, encoding to mp2 audio with toolame..." | |
385 toolame -b $abr $AUDIO | |
386 mv -f `basename $AUDIO .wav`.mp2 $NAME.mpa | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
387 elif [ $toolame -eq 0 -a $mp3 -eq 0 ]; then |
27198 | 388 # mp2enc/lame can't read audiodump.wav directly from named pipe, |
389 # we have to read the whole file. | |
390 echo "wait, encoding to mp2 audio with mp2enc..." | |
391 mp2enc -b $abr -r $asr -o $NAME.mpa < $AUDIO | |
392 elif [ $mp3 -ne 0 ]; then | |
393 echo "wait, encoding to mp3 audio with lame..." | |
394 lame -b $abr --resample $kasr - $NAME.mpa < $AUDIO | |
395 fi | |
396 fi | |
397 | |
398 # remove wav file, won't need anymore! | |
399 rm -f $AUDIO | |
400 | |
401 # multiplex streams | |
402 [ -f $NAME.mpv -a -f $NAME.mpa ] || exit 1 | |
403 rm -f ${NAME}*.mpg | |
404 mplex $mplexnorm $sync $NAME.mpv $NAME.mpa -o ${NAME}%d.mpg | |
405 | |
406 # remove pipe, won't need anymore! | |
407 rm -f $VIDEO | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
408 |
27198 | 409 # should i create only the mpeg file? |
410 [ $mpgonly -eq 1 ] && exit 0 | |
411 | |
412 # create cd images | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27199
diff
changeset
|
413 for mpg in ${NAME}*.mpg; do |
27198 | 414 [ -f $mpg ] || exit 1 |
415 cue="`basename $mpg .mpg`.cue" | |
416 bin="`basename $mpg .mpg`.bin" | |
417 rm -f $cue $bin | |
418 vcdimager $imaget -c $cue -b $bin $mpg | |
419 [ -f $bin -a -f $cue ] && rm -f $mpg | |
420 done | |
421 | |
422 # end of streaming/mastering | |
423 fi | |
424 | |
425 # burn the (s)vcd's | |
426 [ $burn -eq 0 ] && exit 0 | |
427 | |
428 for cue in ${NAME}*.cue; do | |
429 bin="`basename $cue .cue`.bin" | |
430 [ -f $bin -a -f $cue ] || exit 1 | |
431 | |
432 echo "please insert a cd in your cdwriter, after a keypress we start:" | |
433 read -n 1 i | |
434 | |
435 if [ $blank -eq 1 ]; then | |
436 cdrdao blank --reload $CDDEV --driver $CDDRV --blank-mode minimal | |
437 fi | |
438 cdrdao write $overburn --reload $CDDEV --driver $CDDRV $cue | |
439 done | |
440 exit 0 |