Mercurial > mplayer.hg
changeset 7116:e751a2b0991d
written by Florian Schilhabel <florian.schilhabel@gmx.net>
author | alex |
---|---|
date | Wed, 28 Aug 2002 17:14:02 +0000 |
parents | 55716603988c |
children | 4e4d3026a1ca |
files | TOOLS/dvd2divxscript.pl |
diffstat | 1 files changed, 260 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TOOLS/dvd2divxscript.pl Wed Aug 28 17:14:02 2002 +0000 @@ -0,0 +1,260 @@ +#!/usr/bin/perl + +# +# (c) 2002 by Florian Schilhabel <florian.schilhabel@web.de> +# +# +# version 0.1 initial release 22/08/2002 +# +# +# If you have any comments, suggestions, etc., feel free to send me a mail ;-)) +# flames and other things like that should go to /dev/null +# thankx to all the mplayer developers for this really *great* piece of software +# +# +# This script is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This script is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# +use Getopt::Long; + +# specify your default Settings here... + +$abr_default = 128; # The default AudioBitRate +$lang_default = "de"; # ... the language +$cdsize_default = 700; # ... the CD-Rom Size +$writedev_default = "0,1,0"; # ... the CD Writer Device +$speed_default = 4; # and the writer speed + +# end of default Settings + + + +sub delete_tempfiles { + if (open(FILE, "< audio.stderr")) { + close (FILE); + system ("rm audio.stderr") + } + if (open(FILE, "< frameno.avi")) { + close (FILE); + system ("rm frameno.avi"); + } + if (open(FILE, "< lavc_stats.txt")) { + close (FILE); + system ("rm lavc_stats.txt"); + } +} + +GetOptions( "help" => \$help, + "abr=i" => \$abr, + "lang=s" =>\$lang, + "cdsize=i" => \$cdsize, + "dvd=i" => \$dvd_track, + "keeptemp" => \$keeptemp, + "shutdown" => \$shutdown, + "out=s" => \$output, + "writecd" => \$writecd, + "writedev=s" => \$writedev, + "speed=i" => \$speed ); + +if ($help) { + print "Welcome to the DVD to DIVX Helper Script\n"; + print "\n"; + print "this script encodes a DVD track in 3-pass mode to libavcodec's mpeg4\n"; + print "Optionally it writes the resulting MovieFile to a CD-Rom\n"; + print "as well as the corresponding audio track to mp3\n"; + print "Optionally it writes the resulting MovieFile to a CD-Rom\n"; + print "and shuts down the Computer.\n"; + print "If you like, you can watch the mencoder output on /dev/tty8\n"; + print "Usage:\n"; + print "--help show this text\n"; + print "--abr (AudioBitRate) Please enter the desired bitrate\n"; + print " this can be either [96|128|192] kbit/sec.\n"; + print " Default: 128 kbit/sec.\n"; + print "--lang specify the Language of the audio track\n"; + print " this can be for example <en> or <de>\n"; + print " Default: <de>\n"; + print "--dvd specify the DVD Track, you want to encode\n"; + print "--cdsize specify the Size of your CD-ROM\n"; + print " Default: 700MB\n"; + print "--shutdown Shutdown the System, when the encoding process has finished\n"; + print " this will only be possible if you are root\n"; + print "--out Specify the Name of your encoded Movie\n"; + print " The File Extension will be appended automatically\n"; + print "--writecd takes the newly created Movie and writes it to a CD-Rom\n"; + print "--writedev is the usual cdrecord device identifier\n"; + print " for example 0,1,0\n"; + print "--speed the writing speed\n"; + print " Default: 4\n"; + exit; +} + +delete_tempfiles(); + +# testing user values && set defaults... + +if ($abr == 96){} +elsif ($abr == 128) {} +elsif ($abr == 192) {} +elsif ($abr == 0 ) { + print "No AudioBitRate specified - Setting to Default Value\n"; + $abr = $abr_default; +} +else { +print "AudioBitRate not valid. please choose [96|128|192]\n"; +exit; +} + +if ($lang eq "") { + print "No Language specified - Setting to Default Value\n"; + $lang = $lang_default; +} +else {} + +if ($dvd_track == 0 ) { + print "No DVD Track selected - You must specify one with: --dvd trackno.\n"; + exit; +} + +if ($cdsize == 650) {} +elsif ($cdsize == 700) {} +elsif ($cdsize == 800) {} +elsif ($cdsize == 0 ) { + print "No CD Size Specified - Setting to Default Value\n"; + $cdsize = $cdsize_default; +} + +else { +print "CD Size not valid. please choose [650|700|800]\n"; +exit; +} + +if ($output eq "") { + print "No MovieName given - You must specify one with: --out [movie_name]\n"; + exit; +} +else { + ($name, $extension) = split(/./, $out); + if ($extension eq "avi") { + $vob_tempfile = "$name.vob"; + $avi_filename = "$output"; + } + else { + $vob_tempfile = "$output.vob"; + print "VOB CacheFile set to $vob_tempfile\n"; + $avi_filename = "$output.avi"; + print "Movie Filename set to $avi_filename\n"; + } +} + +if ($shutdown) { + # test who i am + $user = `id -u`; + if ($user == 0) { + print "System will be shut down after Movie encoding\n"; + } + else { + print "Cannot shutdown the system after Movie encoding - you are not 'root'\n"; + exit; + } +} + +if ($writecd) { + if ($writedev == "") { + print "Setting CD Writer Device to Default Value\n"; + $writedev = $writedev_default; + } + if ($speed == 0) { + print "Setting CD Writer Speed to Default value\n"; + $speed = $speed_default; + } + +} + + + +### + +print "Your Settings for this run are:\n"; +print "AudioBitRate: $abr\n"; +print "Language: $lang\n"; +print "DVD-Track: $dvd_track\n"; +print "CD-Rom Size: $cdsize\n"; +print "Movie FIlename: $avi_filename\n"; +if ($writecd) { + print "CD Writer Dev.: $writedev\n"; + print "Writer Speed: $speed\n"; +} + +# here comes the fun part... + +print "precacheing...\n"; +$status = system ("mencoder -dvd $dvd_track -ovc copy -oac copy -alang $lang -o $vob_tempfile 1>/dev/tty8 2>/dev/tty8"); +die "Prechacheing failed. mencoder exited with Status Code $?" unless $status == 0; + +print "Encoding Audio...\n"; +$status = system ("mencoder $vob_tempfile -ovc frameno -oac mp3lame -lameopts br=$abr:cbr:vol=3 -o frameno.avi 1>./audio.stderr 2>/dev/tty8"); +die "Encoding Audio failed. mencoder exited with Status Code $?" unless $status == 0; + +# now we have to find out the recommended bitrate for the Video encoding process... +# my current method to find this out is, hmm, well, *strange* +# but anyway, it works ;-)) + +open(FILE, "< audio.stderr") or die "Unable to open audio.stderr."; +@lines = <FILE>; +foreach $line (@lines) { + ($index, $zz) = split(" ", $line); + if ($index eq "Recommended") { + ($a, $b, $c, $d, $size, $f, $bitrate) = split(" ", $line); + if ($cdsize == $size) { + $video_bitrate = $bitrate; + print "Setting Videobitrate to $video_bitrate\n"; + } + } +} +close (FILE); + +print "Encoding Video Stream, 1st pass...\n"; +$status = system ("mencoder $vob_tempfile -ovc lavc -lavcopts vpass=1:vcodec=mpeg4:vbitrate=$video_bitrate:vhq -oac copy -o $avi_filename 1>/dev/tty8 2>/dev/tty8"); +die "Encoding Video Stream failed. mencoder exited with Status Code $?" unless $status == 0; + +print "Encoding Video Stream, 2nd pass...\n"; +$status = system ("mencoder $vob_tempfile -ovc lavc -lavcopts vpass=2:vcodec=mpeg4:vbitrate=$video_bitrate:vhq -oac copy -o $avi_filename 1>/dev/tty8 2>/dev/tty8"); +die "Encoding Video Stream failed. mencoder exited with Status Code $?" unless $status == 0; + +print "finished encoding\n"; + + +if ($writecd) { + print "Now writing CD-Rom\n"; + $status = system("mkisofs -r -J $avi_filename | cdrecord speed=$speed dev=$writedev -data - 2>/dev/tty8 1>/dev/tty8"); + die "Writing CD failed. cdrecord exited with Status Code $?" unless $status == 0; +} +delete_tempfiles(); + +print "Finished - have a nice day ;-)\n"; +if ($shutdown) { + system("halt"); + exit; +} +exit; + + + + + + + +