X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/e53e2434445e78d18c0bdf3596b1444ddb399bde..cd6b00d1cf4de2e18326ceb94a32366dbd4cd228:/flac2mp3 diff --git a/flac2mp3 b/flac2mp3 index c1e0944..c8e9d11 100755 --- a/flac2mp3 +++ b/flac2mp3 @@ -58,110 +58,81 @@ use FindBin; require "$FindBin::Bin/tags.pl"; epg::flac::archive::tags->import( qw[ - disc_tags - read_tags - mangle_for_file_name - quote - ]); + track_tags + read_tags_metaflac + mangle_for_file_name + quote + two_digits + ] +); sub flac2mp3 { - my %a = @_; - my $quoted_flac = quote($a{flac}); - - say('if metaflac --export-picture-to=flac2mp3.cover.$$ ', $quoted_flac, '; then'); - say(' pic_options="--ti flac2mp3.cover.$$"'); - say('fi'); + my $mp3 = shift; + my $flac = shift; + my $tags = shift; # This is an old TODO; what's wrong with --ty ? # TODO: Look at TDOR, TDRL, TDRC for date. - say(join(' ', - 'flac', - '-cd', - $quoted_flac, - '|', - 'lame', - '--id3v2-only', - '--id3v2-latin1', - '--pad-id3v2-size', 0, - '--preset standard', - '--ta', - quote($a{artist}), - '--tl', - quote($a{album}), - '--tn', - quote($a{track}), - '--tt', - quote($a{title}), - '--ty', - quote($a{date}), - '$pic_options', - (map { ('--tv', quote("TPE2=$_")) } @{$a{albumartist}}), - (map { ('--tv', quote("TPOS=$_")) } @{$a{discnumber}}), - '-', - quote( - mangle_for_file_name( - join(' ', - $a{artist}, - $a{album}, - (map { sprintf('%02d', $_) } @{$a{discnumber}}), - $a{track}, - $a{title}, - )) - . '.mp3' - ) - )); - say('unset pic_options'); - say('rm -f flac2mp3.cover.$$'); -} - -sub read_tags_metaflac { - my $fn = shift; - open(my $fh, '-|', 'metaflac', '--no-utf8-convert', '--export-tags-to=-', $fn) || die("metalfac: $!"); - my @result = read_tags($fh); - if (!close($fh)) { - if ($! == 0) { - die("metaflac exited $?") - } - die("close(metaflac): $!") - } - @result + say( + join( + ' ', + 'flac', + '-cd', + quote($flac), + '|', + 'lame', + '--id3v2-only', + '--id3v2-latin1', + '--pad-id3v2-size', 0, + '--preset standard', + '--ta', + quote($tags->{artist}), + '--tl', + quote($tags->{album}), + '--tn', + quote($tags->{tracknumber}), + '--tt', + quote($tags->{title}), + '--ty', + quote($tags->{date}), + '$pic_options', + + #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}), + (map { ('--tv', quote("TPOS=$_")) } @{$tags->{discnumber}}), + '-', + quote($mp3), + ) + ); } sub main { - for my $fn (@_) { - my ($tags) = read_tags_metaflac($fn); - my ($album, $artist, $date, $discnumber) = disc_tags($tags); - - # TODO resurrect whole-disc FLAC? - # Stupid hack: only a single-track file should have the - # TRACKNUMBER tag, so use it if set for the first pass through - # the loop. At the end of the loop, we'll set $track for the - # next run, so this continues to work for multi-track files. - # if track == None: - # track = 1 - # else: - # track = int(track) - { - my $tracknumber = epg::flac::archive::tags::one(TRACKNUMBER => $tags); - my $title = epg::flac::archive::tags::one(TITLE => $tags); - # TODO restore PARTNUMBER and VERSION net time i need them - flac2mp3( - artist => $artist, - album => $album, - date => $date, - discnumber => $discnumber, - track => $tracknumber, - title => $title, - flac => $fn, + for my $flac (@_) { + say('metaflac --export-picture-to=flac2mp3.cover.$$ ', + quote($flac), ' && pic_options="--ti flac2mp3.cover.$$"'); + my %tags = track_tags(read_tags_metaflac($flac)); + flac2mp3( + mangle_for_file_name( + join(' ', + $tags{artist}, + $tags{album}, + (map { two_digits($_) } @{$tags{discnumber}}), + two_digits($tags{tracknumber}), + $tags{title}, ) - } + ) + . '.mp3', + $flac, + \%tags, + ); + say('unset pic_options'); } + say('rm -f flac2mp3.cover.$$'); return 0; } if (!caller) { - exit(main(@ARGV)) + exit(main(@ARGV)); } 1;