summaryrefslogtreecommitdiffstats
path: root/TOOLS/mencvcd
blob: d533c975152c5a4af63b20d9ba6f3852e11ef7d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
#!/bin/sh
#
# Version:          0.1.2
#
# Licence:          GPL
#
# 2002/04/14        Jürgen Hammelmann <juergen.hammelmann@gmx.de>
#
# Script:           MPlayer Sources (DVD) to (S)VCD ripping and burning
#
# requires:         newest mplayer cvs version
#                   mjpegtools v1.6 beta
#                   vcdimager
#                   cdrdao
#                   lame
#
################################################################################
#
# 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
#
################################################################################
#
# 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


################################################################################
AUDIO="audiodump.wav"
VIDEO="stream.yuv"
################################################################################

function usage() {
   echo "usage: $HOWCALLED <filename> [options] [mplayer options]"
   echo
   echo "$HOWCALLED options:"
   echo
   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"
   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"
   echo "-vcdout       encode to VCD format [default]"
   echo "-svcdout      encode to SVCD format"
   echo
   echo "example:"
   echo "'$HOWCALLED crazy -dvd 3 -w' encodes and burns dvd title 3 to VCD in 16:9."
}

HOWCALLED=`basename $0`
NAME=$1
if [ $# -le 1 ]; then
   usage 
   exit 1
fi
shift 1

cd $TMPDIR
rm -f $VIDEO
rm -f $AUDIO
# create a named pipe for video stream
mkfifo -m 660 $VIDEO

# some inits
params=""
wide=""
blank=0
burn=1
mp3=0
mkstream=1
abr=224
abrset=0
asr=44100
denoise="cat -"
norm="VCD"
mplexnorm="-f 2 -m 1 -V"
max=646
mpegnorm="-f 2 -b 1152 -B 260"
imaget="-t vcd2"
while [ "$1"x != "x" ]; do
   case $1 in
      -w)
      	wide="-M WIDE2STD"
	;;
      -h|-?)
        usage
        exit 0
	;;
      -abr)
      	abr=$2
        abrset=1
	shift 1
	;;
      -asr)
        asr=$2
        shift 1
        ;;
      -cdsize)
        max=$2
        shift 1
        ;;
      -blank)
      	blank=1
	;;
      -noburn)
        burn=0
	;;
      -mp3)
        mp3=1
        ;;
      -mpg)
      	mkstream=0
	;;
      -denoise)
        denoise="yuvdenoise"
        ;;
      -vcdout)
      	norm="VCD"
	mplexnorm="-f 2 -m 1 -V"
	mpegnorm="-f 2 -b 1152 -B 260"
	imaget="-t vcd2"
	;;
      -svcdout)
        norm="SVCD"
	mplexnorm="-f 4 -m 2 -V"
	mpegnorm="-f 4 -b 2500 -B 260"
	imaget="-t svcd"
	;;
      *)
	params="$params $1"
	;;
   esac
   shift 1
done

# some configs
if [ -n "$wide" ]; then
   if [ "$norm" == "SVCD" ]; then
      wide=""
      mpegnorm="$mpegnorm -a 3"
   fi
fi

# with mp3 audio set the default audio bitrate to 128 kbs
if [ $mp3 -eq 1 -a $abrset -eq 0 ]; then
   abr=128
fi

# 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"

# encode streams
if [ $mkstream -eq 1 ]; then
   # start mplayer
   mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader $params &

   # mjpegtools
   ($denoise < $VIDEO | \
      yuvscaler -v 0 $wide -O $norm | \
      mpeg2enc -v 0 -s $mpegnorm -S $max -g 6 -G 15 -r 16 -o $NAME.mpv) &
   
   # 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
fi

# remove pipe and wav file, won't need anymore!
rm -f $VIDEO
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
done

# 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 --reload $CDDEV --driver $CDDRV $cue
done
exit 0