X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/fee6350f22d80d9f54f9ad4dccbfa7696e3e861a..8a6d2345b45def0b0bd302194d8cef67b67faf64:/flac2mp3 diff --git a/flac2mp3 b/flac2mp3 index d82e61d..fd0b148 100755 --- a/flac2mp3 +++ b/flac2mp3 @@ -58,40 +58,23 @@ use FindBin; require "$FindBin::Bin/tags.pl"; epg::flac::archive::tags->import( qw[ - disc_tags - read_tags + 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 ($artist, $album, $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, + quote($flac), '|', 'lame', '--id3v2-only', @@ -99,51 +82,41 @@ sub flac2mp3 { '--pad-id3v2-size', 0, '--preset standard', '--ta', - quote($artist), + quote($tags->{artist}), '--tl', - quote($album), + quote($tags->{album}), '--tn', - quote($tracknumber), + quote($tags->{tracknumber}), '--tt', - quote($title), + quote($tags->{title}), '--ty', - quote($date), + quote($tags->{date}), '$pic_options', #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}), - (map { ('--tv', quote("TPOS=$_")) } @{$discnumber}), + (map { ('--tv', quote("TPOS=$_")) } @{$tags->{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 + 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.$$');