#!/usr/bin/perl ################################################################################ # Author: Blaxter # # Date: 12/2005 # # Requiere: # # apt-get install lame libterm-progressbar-perl libmp3-info-perl # # # # Esto de ponerle licencia a cosas de 4 lineas no tiene sentido # # asi que le peten xD # # # ################################################################################ use MP3::Info; use Term::ProgressBar; ################################################################################ ###### O P C I O N E S ########### ################################################################################ # pone CBR o VBR my $MODO="CBR"; # para modo CBR my $B=128; # para modo VBR my $B_min=96; my $B_max=160; ################################################################################ ################################ Code ########################################## ################################################################################ my @mp3s; # los mp3s a convertir my $s; # cadena comando que se ejecutara # los campos son los que devolvera get_mp3tag del modulo MP3::info # los dos caracteres son su equivalente a poner en los parametros para lame my %campos = ( TITLE => 'tt', ARTIST => 'ta', ALBUM => 'tl', YEAR => 'ty', COMMENT => 'tc', GENRE => 'tg', TRACKNUM => 'tn' ); ################################################################################ sub id3s{ my $cad=""; if (my $one = get_mp3tag($_[0])){ for (keys %campos){ # para cada campo if ($one->{$_}){ # si existe.. $cad .= sprintf("--%s \"%s\" ", %campos->{$_}, $one->{$_} ); #palasaca } } } $cad; } ################################################### sub escapa{ local($laa)=$_[0]; # habra mas? :o $laa =~ s/([ ''\@\(\)])/\\$1/g; $laa; } ##################################################### sub estado{ system("echo $? > .tmp"); open(F, ".tmp"); $r=; close(F); system("rm .tmp"); $r; } ##################################################### sub codificacion{ local($opc); if($MODO == "CBR"){ $opc="-b ".$B; }elsif($MODO=="VBR"){ $opc="-v -b ".$B_min." -B ".$B_max; }else{ die "NO HAY UN MODO DE CODIFICACION VALIDO\nPon CBR o VBR en el script!"; } $opc; } ################################################################################ opendir(DIR, ".") || die "NOOO PUEEEDEEES ABRIIIIIIIRLO!!!"; foreach(reverse readdir(DIR)){if(/\.mp3$/io){ push @mp3s,$_; }} close DIR; my $total_n=scalar @mp3s; my $n=0; my $progress; my $next_update = 0; my $errores=0; my $cadE=""; $progress = Term::ProgressBar->new({name => 'Conversion', count => $total_n, ETA => linear}); $progress->minor(0); $progress->max_update_rate(1); foreach(@mp3s){ $next_update = $progress->update($n)if $n >= $next_update; $s ="lame ".codificacion()." ". id3s($_)." "; $s.= escapa($_)." ".escapa($_).".tmp > /dev/null 2> /dev/null" ; system( $s); if (estado() != "0"){ $errores+=1; $cadE.="$s\n"; }else{ $s="mv ".escapa($_).".tmp ".escapa($_); system($s); $n+=1; } } $progress->update($total_n); printf("Se han producido %d errores!!%s\n", $errores, $cadE) if $errores>0; exit $errores;