X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/e82f8f9ad32a0db569913c2bacf2c0e86e7bf0e3..cd6b00d1cf4de2e18326ceb94a32366dbd4cd228:/flac2mp3 diff --git a/flac2mp3 b/flac2mp3 index b4126e2..c8e9d11 100755 --- a/flac2mp3 +++ b/flac2mp3 @@ -58,92 +58,73 @@ use FindBin; require "$FindBin::Bin/tags.pl"; epg::flac::archive::tags->import( qw[ - disc_tags - read_tags - mangle_for_file_name - quote - two_digits - ]); + track_tags + read_tags_metaflac + mangle_for_file_name + quote + two_digits + ] +); sub flac2mp3 { - my $quoted_flac = quote(shift); + my $mp3 = shift; + my $flac = shift; my $tags = shift; - 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 next time i need them - - say('metaflac --export-picture-to=flac2mp3.cover.$$', " $quoted_flac && pic_options=", '"--ti flac2mp3.cover.$$"'); # 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($artist), - '--tl', - quote($album), - '--tn', - quote($tracknumber), - '--tt', - quote($title), - '--ty', - quote($date), - '$pic_options', - #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}), - (map { ('--tv', quote("TPOS=$_")) } @{$discnumber}), - '-', - quote( - mangle_for_file_name( - join(' ', - $artist, - $album, - (map { two_digits($_) } @{$discnumber}), - two_digits($tracknumber), - $title, - )) - . '.mp3' - ) - )); - say('unset pic_options'); -} - -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); - flac2mp3($fn, $tags); + 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.$$'); @@ -151,7 +132,7 @@ sub main { } if (!caller) { - exit(main(@ARGV)) + exit(main(@ARGV)); } 1;