Mercurial > mplayer.hg
annotate TOOLS/divx2svcd @ 22830:1d4a455af876
Set CONFIG_EBP_AVAILABLE, CONFIG_EBX_AVAILABLE for FFmpeg
After FFmpeg r8549 these variables are used in libavcodec to determine
whether x86 inline asm sections using these registers or requiring a
certain total number of total free registers are enabled. Because they
were not set by MPlayer configure some H264 decoding optimizations were
disabled after that FFmpeg version. This change sets the variables to
true unconditionally which should restore previous behavior. Adding
proper detection is left for later.
EBX should always be available because internal libavcodec is never
compiled with PIC. However if -fomit-frame-pointer is not used because
of --enable-debug then EBP is not available. Thus proper detection would
be preferable to fix compilation with --enable-debug on x86. Currently
the variables are also set on non-x86 which should be harmless even if
somewhat ugly.
author | uau |
---|---|
date | Fri, 30 Mar 2007 22:57:04 +0000 |
parents | ec39b4555f7d |
children | 5eb532ff5793 |
rev | line source |
---|---|
11839 | 1 #!/bin/bash |
2 | |
3 # (c) 2003 Vajna Miklos <mainroot@freemail.hu> | |
12012 | 4 # divx2svcd for MPlayer |
11839 | 5 # distributed under GPL License |
6 | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
7 # simple utility that creates a SVCD from a video in an AVI container |
11839 | 8 |
9 # The newest version of this utility can be found at | |
10 # http://vmiklos.uw.hu/divx2svcd/divx2svcd | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
11 # MPlayer available at |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
12 # http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre3try2.tar.bz2 |
11839 | 13 |
14 ###changelog### | |
15 #nobody cares about it :-) | |
16 cat >/dev/null <<EOF | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
17 0.5.1 |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
18 - faster code by not re-mplexing one-cd-size or smaller videos |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
19 |
12012 | 20 0.5.0 |
21 - needless for dumpvideo patch ;-) | |
22 | |
11970 | 23 0.4.9 |
24 - changed default bitrate to 1600 for better quality | |
25 - fix for burning more than one cd | |
26 - fix for wrong parameter help | |
27 | |
11839 | 28 0.4.8 |
29 - small fixes | |
30 | |
31 0.4.7 | |
32 - fixed bug, when there is no sub available | |
33 | |
34 0.4.6 | |
35 - support for burning the svcd with cdrecord | |
36 - lots of paranoid options for better quality from Denes Balatoni | |
37 | |
38 0.4.5 | |
39 - support for filenames including spaces | |
40 | |
41 0.4.4 | |
42 - support for checking all applications this script uses | |
43 - this changelog | |
44 | |
45 0.4.3 | |
46 - advanced detectation of movie aspect (mpeg4 codec, mpeg container) | |
47 | |
48 0.4.2 | |
49 - advanced vf options for movies with non-standard aspect | |
50 | |
51 0.4.1 | |
52 - checking for available sub | |
53 | |
54 0.4.0 | |
55 - support for tcmplex-panteltje | |
56 - support for libavcodec audio encoder | |
57 | |
58 0.3.1-0.3.2 | |
59 - small fixes | |
60 | |
61 0.3 | |
62 - almost totally rewritten from scratch | |
63 based on the idea of Denes Balatoni <pnis@coder.hu> | |
64 - support for toolame instead of mp2enc | |
65 - suppert for libavcodec mpeg2video codec instead of mpeg2enc | |
66 | |
67 0.2 | |
68 - support for tcmplex instead of mplex | |
69 | |
70 0.1rc2-rc4 | |
71 - small bugfixes | |
72 | |
73 0.1rc1 | |
74 - initial release | |
75 | |
76 EOF | |
77 | |
78 | |
79 ###preparing### | |
80 #help | |
81 | |
82 function usage() | |
83 { | |
84 cat <<EOF | |
85 Usage: `basename $0` input_avi [options] | |
86 | |
87 Options: | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
88 -b|--bitrate xx bitrate of mp2 video stream [1375] |
11970 | 89 -s|--cdsize xx size of the cd we split the video to [795] |
11839 | 90 -w|--writecd enables burning [disable] |
11970 | 91 -d|--device xx scsi cd-recording device if you are using linux 2.4.x [0,0,0] |
11839 | 92 -c|--clean clean up svcd images you just created |
93 -h|--help this help screen | |
94 EOF | |
95 | |
96 } | |
97 | |
98 #initializating constants | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
99 version='0.5.1' |
12012 | 100 bitrate=1375 |
11839 | 101 cdsize=795 |
102 burning=0 | |
103 cleaning=0 | |
104 dev4='0,0,0' | |
105 firstcd=1 | |
106 | |
107 #paranoid options | |
108 paraopts='vrc_override=1,10,708:vqcomp=0.1:vratetol=10000000:vrc_buf_size=917:vrc_maxrate=2500:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44' | |
109 | |
110 #header | |
111 echo "DivX2SvcD $version (C) 2003-2004 Vajna Miklos" | |
112 echo | |
113 | |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
114 #checking for ls |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
115 ls=`which ls` |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
116 |
11839 | 117 #checking for bc |
118 which bc >/dev/null 2>&1 | |
119 bcbin=`which bc 2>/dev/null` | |
120 if [ $? != 0 ]; then | |
121 cat <<EOF | |
122 ERROR: Can't find bc. You can download it at | |
123 ftp://ftp.ibiblio.org/pub/gnu/bc/bc-1.06.tar.gz | |
124 EOF | |
125 exit 1 | |
126 fi | |
127 | |
128 #checking for vcdimager | |
129 which vcdimager >/dev/null 2>&1 | |
130 bcbin=`which vcdimager 2>/dev/null` | |
131 if [ $? != 0 ]; then | |
132 cat <<EOF | |
133 ERROR: Can't find vcdimager. You can download it at http://www.vcdimager.org | |
134 /pub/vcdimager/vcdimager-0.7_UNSTABLE/vcdimager-0.7.14.tar.gz | |
135 EOF | |
136 exit 1 | |
137 fi | |
138 | |
139 #checking which mplex utility we have to use | |
140 which tcmplex-panteltje >/dev/null 2>&1 | |
141 if [ $? = 0 ]; then | |
142 tcp_path=`which tcmplex-panteltje 2>&1` | |
143 else | |
144 tcp_path="x" | |
145 fi | |
146 which tcmplex >/dev/null 2>&1 | |
147 if [ $? = 0 ]; then | |
148 tc_path=`which tcmplex 2>&1` | |
149 else | |
150 tc_path="x" | |
151 fi | |
152 | |
153 if [ -x $tcp_path ]; then | |
154 tcbin=tcmplex-panteltje | |
155 tcopt=-0 | |
156 elif [ -x $tc_path ]; then | |
157 tcbin=tcmplex | |
158 tcopt=-p | |
159 else | |
160 cat <<EOF | |
161 ERROR: Can't find any sutable mplex utility. You can download | |
162 tcmplex-panteltje at http://sunsite.rediris.es/ | |
163 sites2/ibiblio.org/linux/apps/video/tcmplex-panteltje-0.3.tgz | |
164 EOF | |
165 exit 1 | |
166 fi | |
167 | |
168 #pharsing parameters | |
169 | |
170 if [ $# -le 0 ]; then | |
171 echo "Missing parameter!" | |
172 usage | |
173 exit 1 | |
174 fi | |
175 | |
176 case $1 in | |
177 -h) | |
178 usage | |
179 exit 1 | |
180 ;; | |
181 -*) | |
182 echo "Missing parameter!" | |
183 usage | |
184 exit 1 | |
185 ;; | |
186 *) | |
187 input=`echo $1 |sed 's/\\ / /'` | |
188 if [ "$input" == "`basename "$input"`" ]; then | |
189 input="`pwd`/$1" | |
190 fi | |
191 nev=`basename "$input" .avi` | |
192 shift 1 | |
193 ;; | |
194 esac | |
195 | |
196 while [ "$1"x != "x" ]; do | |
197 case $1 in | |
198 -b|--bitrate) | |
199 bitrate=$2 | |
200 shift 1 | |
201 ;; | |
202 -s|--cdsize) | |
203 cdsize="$2" | |
204 shift 1 | |
205 ;; | |
206 -d|--device) | |
207 dev4="$2" | |
208 shift 1 | |
209 ;; | |
210 -w|--write) | |
211 burning=1 | |
212 ;; | |
213 -c|--clean) | |
214 cleaning=1 | |
215 ;; | |
216 -h|--help) | |
217 usage | |
218 exit 0 | |
219 ;; | |
220 esac | |
221 shift 1 | |
222 done | |
223 | |
224 #checking for cd-recording device | |
225 if [ "$burning" == 1 ]; then | |
226 echo -n "Searching for cdrecorder device... " | |
227 | |
228 if [ `uname -r |cut -d '.' -f 2` == 4 ]; then | |
229 #linux 2.4.x | |
230 dev="dev=$dev4" | |
231 echo "$dev4" | |
232 elif [ `uname -r |cut -d '.' -f 2` == 6 ]; then | |
233 #linux 2.6.x | |
234 if [ -e /dev/cdrecorder ]; then | |
235 dev='dev=/dev/cdrecorder' | |
236 echo "/dev/cdrecorder" | |
237 else | |
238 cat <<EOF | |
239 ERROR: Device file /dev/cdrecorder not found. Please link your | |
240 cd-recording device to /dev/cdrecorder! | |
241 Example: 'cd /dev; ln -s hdc cdrecorder' | |
242 EOF | |
243 exit 1 | |
244 fi | |
245 else | |
246 cat <<EOF | |
247 ERROR: Linux 2.4 or 2.6 series not found. You can download it at | |
248 http://www.kernel.org/ ;-) | |
249 EOF | |
250 exit 1 | |
251 fi | |
252 | |
253 #checking for cdrecord | |
254 which cdrecord >/dev/null 2>&1 | |
255 cdrbin=`which cdrecord 2>/dev/null` | |
256 if [ $? != 0 ]; then | |
257 cat <<EOF | |
258 ERROR: Can't find cdrecord. You can download it at | |
259 ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-2.01a20.tar.gz | |
260 EOF | |
261 exit 1 | |
262 else #checking for version >= 2.01a14 | |
263 echo -n "Checking for cdrecord version >= 2.01a14... " | |
264 $cdrbin cuefile=a 2>&1 |grep 'Bad Option' >/dev/null 2>&1 | |
265 if [ "$?" == 0 ]; then | |
266 cat <<EOF | |
267 ERROR: Can't find cdrecord version >= 2.01a14. You can download it at | |
268 ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-2.01a20.tar.gz | |
269 EOF | |
270 else | |
271 echo "`$cdrbin -version |cut -d ' ' -f 2`" | |
272 fi | |
273 fi | |
274 fi | |
275 | |
276 #checking for sub avariable | |
277 | |
278 if [ -f "$nev.sub" ]; then | |
279 subopts=$nev.sub | |
280 else | |
281 subopts='' | |
282 fi | |
283 | |
284 if [ "x$subopts" == "x" ]; then | |
285 subs='' | |
286 else | |
287 subs='-sub ' | |
288 fi | |
289 | |
290 #checking for what height needed | |
291 inputwidth=`mplayer -vo null -ao null "$input" -frames 1 2>/dev/null |grep '=>'|cut -d ' ' -f 5|cut -d x -f 1` | |
292 inputheight=`mplayer -vo null -ao null "$input" -frames 1 2>/dev/null |grep '=>'|cut -d ' ' -f 5|cut -d x -f 2` | |
293 svcdaspect=`echo -e "scale=10\n1.596/($inputwidth/$inputheight)"|bc /dev/stdin` | |
294 height=`echo -e "scale=10\n$svcdaspect*480"|bc /dev/stdin|cut -d . -f 1` | |
295 | |
296 #checking for ratios less than 1.33 | |
297 istoohigh=`expr $height \> 577` | |
298 if [ "$istoohigh" = 1 ]; then | |
299 height=576 | |
300 fi | |
301 | |
302 #find out the vf options | |
303 if [ "$height" = 576 ]; then | |
304 vfopts='-vf scale=480:576' | |
305 else | |
306 #-vf processes filters in reverse order | |
307 exy=`echo -e "scale=10\n(576-$height)/2"|bc /dev/stdin|cut -d . -f 1` | |
308 vfopts="-vf scale=480:$height,expand=480:576:0:$exy:1" | |
309 echo "Using filter options: '$vfopts'" | |
310 fi | |
311 | |
312 #finish displaying informations | |
313 if [ "$burning" == 1 ]; then | |
314 #asking for cd | |
315 cat <<EOF | |
316 | |
317 Please insert a blank cd in your cdwriter. | |
318 (If you are using a rewritable media, | |
319 don't forgot to blank it before using divx2svcd.) | |
320 Press any key when your are ready. | |
321 EOF | |
322 read -n 1 i | |
323 fi | |
324 | |
325 | |
326 ###start working### | |
327 #encoding | |
12012 | 328 mencoder -ofps 25 -oac lavc "$input" -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=$bitrate:acodec=mp2:abitrate=128:keyint=25:aspect=4/3:$paraopts -o "${nev}2.avi" -srate 44100 -of mpeg -channels 2 $vfopts $subs "$subopts" |
11839 | 329 |
12262
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
330 videosize=`$ls -l "${nev}2.avi"|tr -s ' '|cut -d ' ' -f5` |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
331 if ! [ `echo $(( $cdsize*1048576 < $videosize ))` == "1" ]; then |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
332 #video is smaller, than $cdsize |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
333 mv ${nev}2.avi ${nev}00.mpg |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
334 else |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
335 #splitting |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
336 mplayer -dumpvideo -dumpfile "$nev.m2v" "${nev}2.avi" |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
337 mplayer -dumpaudio -dumpfile "$nev.mp2" "${nev}2.avi" |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
338 rm "${nev}2.avi" |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
339 echo "maxFileSize = $cdsize" > template |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
340 $tcbin -i "$nev.m2v" $tcopt "$nev.mp2" -o "$nev.mpg" -m s -F template |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
341 rm template |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
342 rm "$nev.m2v" "$nev.mp2" |
ec39b4555f7d
update to version 0.5.1 by the author VMiklos <mamajom@axelero.hu>
diego
parents:
12012
diff
changeset
|
343 fi |
11839 | 344 |
11970 | 345 for i in *mpg |
11839 | 346 do |
347 nev2=`basename "$i" .mpg` | |
348 #creating images | |
349 vcdimager -t svcd -c "$nev2.cue" -b "$nev2.bin" "$i" | |
350 #burning if needs | |
351 if [ "$burning" == 1 ]; then | |
11970 | 352 if [ "$firstcd" != 1 ]; then |
11839 | 353 cat <<EOF |
354 | |
355 Please insert an another blank cd in your cdwriter. | |
356 Press any key when your are ready. | |
357 EOF | |
358 read -n 1 i | |
11970 | 359 else |
360 firstcd=2 | |
11839 | 361 fi |
362 $cdrbin -v -dao $dev speed=12 gracetime=2 driveropts=burnfree -eject cuefile="$nev2.cue" | |
363 fi | |
364 #cleaning if needs | |
365 if [ "$cleaning" == 1 ]; then | |
366 rm -f "$nev2.cue" "$nev2.bin" | |
367 fi | |
368 done | |
369 rm -f "$nev"*mpg |