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