| # |
| # From: Per Bolmstedt <tomten@kol14.com> |
| # |
| # AC> If someone has scripts that read input ID3 tags and convert |
| # AC> them to args for lame (which then encodes the tags into the |
| # AC> output files), let me know, too! |
| # |
| # This is easy peasy using Perl. Especially using Chris Nandor's excellent |
| # MP3::Info package (available on CPAN). Here's a program I just wrote that |
| # I think does what you want. Invoke it with "<program> <file> [options]" |
| # (where the options can include an output filename), like for example: |
| # |
| # lameid3.pl HQ.mp3 LQ.mp3 -fv |
| # |
| # (Note how the syntax differs from that of Lame's.) The program will |
| # extract ID3 tags from the input file and invoke Lame with arguments for |
| # including them. (This program has not undergone any real testing..) |
| |
| use MP3::Info; |
| use strict; |
| |
| my %flds = ( |
| TITLE => 'tt', |
| ARTIST => 'ta', |
| ALBUM => 'tl', |
| YEAR => 'ty', |
| COMMENT => 'tc', |
| GENRE => 'tg', |
| TRACKNUM => 'tn' |
| ); |
| |
| my $f = shift @ARGV; |
| my $s = "lame ${f} " . &makeid3args( $f ) . join ' ', @ARGV; |
| print STDERR "[${s}]\n"; |
| system( $s ); |
| |
| sub makeid3args( $ ) |
| { |
| my $s; |
| if ( my $tag = get_mp3tag( @_->[ 0 ] ) ) |
| { |
| for ( keys %flds ) |
| { |
| if ( $tag->{ $_ } ) |
| { |
| $s .= sprintf( |
| "--%s \"%s\" ", |
| %flds->{ $_ }, |
| $tag->{ $_ } ); |
| } |
| } |
| } |
| return $s || ""; |
| } |
| |