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',
'--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.$$');