#!/usr/local/bin/perl =head1 NAME B - transcode FLAC file to MP3 files =head1 SYNOPSIS B [B<--lame-options> I] [B<-q>] [B<-v>] I [...] =head1 DESCRIPTION B transcodes the FLAC files I to MP3 files. I may be the kind of FLAC file B generates. That is, it contains a cue sheet, one TITLE tag per track listed therein, and ARTIST, ALBUM, and DATE tags. Note that lame is retarded, and parses B directly itself! So, in order for it to transcode textual tags, you must specify the encoding in LANG, e.g. LANG=en_US.utf-8 =head1 OPTIONS =over 4 =item B<--lame-options> I Pass I to B. This ends up being passed to the shell, so feel free to take advantage of that. You'll almost certainly have to put I in single quotes. =item B<-q> [B<--quiet>] Suppress status information. This option is passed along to B and B. =item B<-v> [B<--verbose>] Print diagnostic information. This option is passed along to B and B. =back =head1 AUTHORS Written by Eric Gillespie . =cut package epg::flac::archive::mp3; use v5.12; use warnings; use File::Temp; use FindBin; require "$FindBin::Bin/tags.pl"; epg::flac::archive::tags->import( qw[ track_tags read_tags_metaflac mangle_for_file_name quote two_digits ]); sub flac2mp3 { 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', 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 $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)) } 1;