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.$$');
}
if (!caller) {
- exit(main(@ARGV))
+ exit(main(@ARGV));
}
1;