summaryrefslogtreecommitdiffstats
path: root/TOOLS
diff options
context:
space:
mode:
authordiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-05-17 11:32:32 +0000
committerdiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-05-17 11:32:32 +0000
commit17612482e2cb4018c7d0c223aebd0eb057576856 (patch)
tree530e956a78f617e9714fa52e9d666f3d32c25d19 /TOOLS
parentc5b739bf4ace7baec32bf28a591863d0cd7ce624 (diff)
downloadmpv-17612482e2cb4018c7d0c223aebd0eb057576856.tar.bz2
mpv-17612482e2cb4018c7d0c223aebd0eb057576856.tar.xz
WMA to Ogg conversion script by Peter Simon <simon.peter@linuxuser.hu>,
sent in by VMiklos. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12483 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'TOOLS')
-rwxr-xr-xTOOLS/wma2ogg.pl341
1 files changed, 341 insertions, 0 deletions
diff --git a/TOOLS/wma2ogg.pl b/TOOLS/wma2ogg.pl
new file mode 100755
index 0000000000..ee8aacbdd3
--- /dev/null
+++ b/TOOLS/wma2ogg.pl
@@ -0,0 +1,341 @@
+#!/usr/bin/perl
+
+#################################
+# wma converter 0.3.6 for Linux #
+#################################
+
+# Made by Peter Simon <simon.peter@linuxuser.hu>
+# License: GNU GPL
+#
+# Needed programs:
+#
+# Getopt::Long - Perl Module
+# Mplayer - http://www.mplayerhq.hu
+# BladeEnc - http://bladeenc.mp3.no
+# oggenc - http://www.vorbis.com
+# mp3info - http://www.ibiblio.org/mp3info
+
+# changelog:
+# 0.1.0
+# decoding all files to wav without any switches and encoders
+# 0.2.0
+# converting to mp3 or ogg with bitrate, delete options
+# 0.2.1
+# L.A.M.E. support for fanatics
+# Default output filetype: ogg
+# Some error warnings
+# 0.3.0
+# Reading the wma tags out and puting into the mp3 or the ogg tags. (What the MPlayer shows of those.)
+# Default output bitrate: the original bitrate
+# Simlink for the default encode mode (wma2ogg = ogg, wma2mp3 = mp3)
+# 0.3.1
+# Neglecting missing encoders if those are not in use.
+# 0.3.2
+# Using mp3info for the mp3 tags
+# 0.3.3
+# Convert more then one files in the start dir.
+# 0.3.4-5
+# Some bugfixes.
+# 0.3.6
+# Some bugfixes by Diego Biurrun
+
+# Why BladeEnc?
+# Eg.: The L.A.M.E.'s code isn't compatible for some hardwer-decoders. Makes noise and clashings.
+# I never met this trouble using BladeEnc.
+# That's it.
+
+use Getopt::Long qw(:config pass_through);
+
+$ver="0.3.6";
+
+GetOptions("help|?",\&showhelp, 'a' => \$all, "file|f=s" => \@files,"t=s" => \$mtype, "lame" => \$needlame, "del" => \$delete, "br=i" => \$sbrate);
+
+if (@ARGV) {
+ foreach (@ARGV) {
+ error ("Missing parameter after the $_ switch!");
+ }
+ exit;
+}
+
+print "wma2ogg $ver\nPeter Simon <simon.peter\@linuxuser.hu>";
+
+if (!$all && !@files) {
+ error ("There is no selected file!");
+ exit;
+}
+
+if ($0 =~/wma2mp3/ && !$mtype) {
+ $mtype="mp3";
+}
+
+if ($mtype eq "ogg") {
+ $ttype{"ogg"}="oggenc";
+ needed_prgs (oggenc, "http://www.vorbis.com");
+}
+
+if ($needlame && $mtype eq "ogg") {
+ error ("\nYou can not use L.A.M.E. & oggenc together!\n");
+ exit;
+}
+
+if (!$mtype && !$needlame) {
+ $mtype="ogg";
+ $ttype{"ogg"}="oggenc";
+ needed_prgs (oggenc, "http://www.vorbis.com");
+}
+
+
+if (!$needlame && $mtype eq "mp3") {
+ $ttype{"mp3"}="BladeEnc";
+ needed_prgs (BladeEnc, "http://bladeenc.mp3.no", mp3info, "http://www.ibiblio.org/mp3info");
+}
+
+if ($needlame) {
+ $mtype="mp3";
+ $ttype{"mp3"}="lame";
+ needed_prgs (lame, "http://lame.sourceforge.net", mp3info, "http://www.ibiblio.org/mp3info");
+}
+
+# Main program
+ print "\nUsing lame - WARNING - this is not optimal!\n";
+ ch_needed ();
+ ch_type ();
+ ch_files ();
+ decode();
+# the end.
+
+
+sub ch_type {
+ $o_type=$ttype{$mtype};
+
+ if ($mtype ne "wav") {
+ $def_path=$ENV{PATH};
+ @exec_path=split /\:/, $def_path;
+ foreach $temp_path (@exec_path) {
+ if (-d $temp_path && !$enc_ok) {
+ $enc_ok=`find $temp_path -name $o_type -type f -maxdepth 1 2>/dev/null`;
+ chomp ($enc_ok);
+ }
+ }
+ }
+ if ((!$o_type || !$enc_ok) && $mtype ne "wav") {
+ error("Unknown encoder.");
+ exit;
+ }
+}
+
+sub ch_br {
+ if ($sbrate && ((($sbrate <32 || $sbrate>350) && $mtype eq "mp3") || (($sbrate<64 || $sbrate>500) && $mtype eq "ogg") )) {
+ error("Invalid, missing or redundant bitrate.");
+ exit;
+ }
+}
+
+sub ch_files {
+ if ($all && @files) {
+ error ("You can't use -a switch and -f together!");
+ exit;
+ }
+
+ if ($all) {
+ @enc_files=`ls | grep '.wma'\$`;
+ foreach (@enc_files) {
+ chomp $_;
+ }
+ }
+
+ if (@files) {
+ @enc_files=@files;
+ }
+
+}
+
+sub showhelp {
+print "\n\nUsage: wma2ogg [OPTIONS] (-f FILE1 | -f FILE2 ... | -a)\n
+-f, -file filename
+-a converts all wma files in the current directory\n
+OPTIONS:
+-t output filetype (ogg, mp3) [default=ogg]
+-lame I wanna use L.A.M.E. sure enough!
+-br bitrate (kb/s) [default=from the wma]
+-del remove wma file(s) after the transcoding\n";
+print $miss_text;
+print "\n$errtext\nExiting program.\n";
+}
+
+sub error {
+ $errtext=@_[0];
+ showhelp ();
+
+}
+
+sub missing_prg {
+ $what=$keys;
+ $that=$needed{$keys};
+ $miss_text.="\nThe needed \'$what\' program is missing, see: $that!";
+}
+
+sub ch_needed {
+
+ `perl -e 'use Getopt::Long;' 2>./err`;
+ open (FILE, "<./err");
+ while ($sor=<FILE>) {
+ if ($sor =~ /Can\'t locate/) {
+ missing_prg ("Getopt::Long", ": your Perl is too old... (uhhh... get a new one!)");
+ }
+ }
+ `rm ./err`;
+
+
+ foreach $keys (keys %needed) {
+ `$keys 2>./err`;
+ open (FILE, "<./err");
+ while ($sor=<FILE>) {
+ if ($sor =~ /$keys\: command not found/) {
+ missing_prg ();
+ $error=1;
+ }
+ }
+ `rm ./err`;
+ }
+
+ close FILE;
+ if ($error) {
+ showhelp ();
+ exit;
+ }
+}
+
+sub get_tags {
+ my $outfile;
+ open (FILE, "<./1");
+ while ($sor=<FILE>) {
+ $outfile.=$sor;
+ }
+ close FILE;
+
+ $outfile=~ s/\((\d+\,\d+)\ kbit\)/$1/e;
+ print "\noriginal bitrate: $1";
+ $kept_orig_brate=$1;
+ $kept_orig_brate=~ s/(\d+)/$1/e;
+ $kept_orig_brate=$1;
+
+ if (!$sbrate) {
+ $brate=$kept_orig_brate;
+ print " (kept as default)";
+ } else {
+ $brate=$sbrate;
+ print " (new: $brate,0)";
+ }
+
+ ch_br ();
+
+ `rm ./1`;
+ my @temp_info=split /Clip\ info\:/, $outfile;
+ my @temp2_info=split /\n/, @temp_info[1];
+ my @temp_title=split /\ /, $temp2_info[1],3;
+ my @temp_author=split /\ /, $temp2_info[2],3;
+ my @temp_copyright=split /\ /, $temp2_info[3],3;
+ my @temp_comments=split /\ /, $temp2_info[4],3;
+ return ($temp_title[2], $temp_author[2], $temp_copyright[2], $temp2_comments[2]);
+}
+
+sub needed_prgs {
+ %needed=(
+ $_[0]=>$_[1],
+ $_[2]=>$_[3],
+ mplayer=>"http://www.mplayerhq.hu",
+ );
+}
+
+sub mp3_info {
+ if ($title) {
+ $infofile=" -t '$title'";
+ }
+ if ($author) {
+ $infofile.=" -a '$author'";
+ }
+ if ($comments) {
+ $infofile.=" -c '$comments'";
+ }
+
+ `mp3info "$p_name.$mtype" $infofile`;
+
+ undef ($infofile);
+}
+
+
+sub decode {
+ foreach (@enc_files) {
+ $wav_name=$_;
+ $wav_name=~ s/(.+)\./$1/e;
+ $p_name=$1;
+ $wav_name=$p_name.".wav";
+ $pwd=`pwd`;
+ chomp $pwd;
+ $pwd.="/t2";
+ print "\nConverting $_ to \"wav\" file.\n";
+ print "Using MPlayer...\n";
+
+ `mplayer "$_" -ao pcm -input conf="$pwd" 2>/dev/null >./1`;
+ `mv "audiodump.wav" "$wav_name"`;
+
+ @tags=get_tags ();
+
+ $title=$tags[0];
+ print "\ntitle: $title";
+ $author=$tags[1];
+ print "\nauthor: $author";
+ $copyright=$tags[2];
+ print "\ncopyright: $copyright";
+ $comments=$tags[3];
+ print "\ncomments: $comments";
+
+ $comments=$copyright." ".$comments."Transcoded by wma2ogg";
+
+ print "\n\nConverting $wav_name to \"$mtype\" file.";
+
+ print "\nUsing $o_type...";
+
+ if ($mtype eq "ogg") {
+ $br_sw="b";
+ if ($title) {
+ $infofile=" -t '$title'";
+ }
+ if ($author) {
+ $infofile.=" -a '$author'";
+ }
+ if ($comments) {
+ $infofile.=" -c COMMENT='$comments'";
+ }
+
+ `"$o_type" "-$br_sw" "$brate" "-Q" "./$wav_name" $infofile "-o" "$p_name.$mtype"`;
+ `rm -f "$wav_name"`;
+ }
+ if ($mtype eq "mp3" && !$needlame) {
+ $br_sw="br";
+ `"$o_type" "$wav_name" "$p_name.$mtype" "-$br_sw" "$brate" 2>/dev/null >/dev/null`;
+
+ mp3_info ();
+
+ `rm -f "$wav_name"`;
+ }
+ if ($mtype eq "mp3" && $needlame) {
+
+ $br_sw="b";
+ `"$o_type" "-$br_sw" "$brate" "-f" "$wav_name" "$p_name.$mtype" 2>/dev/null >/dev/null`;
+
+ mp3_info ();
+
+ `rm -f "$wav_name"`;
+ }
+ if ($delete) {
+ `rm -f "$_"`;
+ }
+ if (-e "./err") {
+ `rm ./err`;
+ }
+ }
+ print "\n\nDone.\n\n";
+}
+