#!/usr/bin/perl -w # $Id: itunes-encode,v 1.2 2007/06/15 16:07:49 moquist Exp moquist $ # Usage: # Create an iTunes playlist and burn it to a CD. Export the Song List # as a plain text file. Then put your burned CD in the drive, cd to a clean # directory, and run 'cdparanoia -B'. Then: # # cat itunes-playlist.txt | itunes-encode [ -o ] [ -d ] [ -q <-1...10> ] # -o for ogg-vorbis output, flac is default # -d for debug # -q for oggenc quality # # You may want to change the $fn_dir setting below; I have it set to # "$fn_artist/$fn_album", but you might like something else. use Getopt::Std; require "/home/moquist/bin/mungefilename.pm"; getopts("doq:"); if (!$opt_q) { $opt_q = 3; } if ($opt_d) { print "opt_q: $opt_q\n"; } if (defined($opt_o)) { $extension = "ogg"; } else { $extension = "flac"; } $dosinput = ; my @unixinput = split / /,$dosinput; my $cddanum = 1; foreach my $line (@unixinput) { chomp $line; if ($line =~ /^[^A-Za-z0-9]*Name/) { next; } @fields = split /\t/,$line; my $trackname = $fields[0]; my $artist = $fields[1]; my $composer = $fields[2]; my $album = $fields[3]; my $genre = $fields[5]; my $tracknum = $fields[10]; my $trackcount = $fields[11]; my $year = $fields[12]; if ($opt_d) { print "Track Name: $trackname\n"; print "\tArtist: $artist\n"; print "\tComposer: $composer\n"; print "\talbum: $album\n"; print "\tGenre: $genre\n"; print "\tTrack Number: $tracknum\n"; print "\tTrack Count: $trackcount\n"; print "\tYear: $year\n"; } my $fn_trackname = &mungefilename($trackname); my $fn_artist = &mungefilename($artist); my $fn_album = &mungefilename($album); my $fn_tracknum = &mungefilename($tracknum); my $length = length $trackcount; my $fn_dir = "$fn_artist/$fn_album"; my $fn = sprintf ("%s/%0${length}s-%s.$extension", $fn_dir, $fn_tracknum, $fn_trackname); if ($opt_d) { print "fn: $fn\n"; } my $cddafile = sprintf ("track%02d.cdda.wav", $cddanum); system ("mkdir -p \"$fn_dir\""); if (defined($opt_o)) { system ("oggenc -q $opt_q -o \"$fn\" -d \"$year\" -N \"$tracknum\" -t \"$trackname\" -l \"$album\" -a \"$artist\" -G \"$genre\" $cddafile"); } else { # do flac system ("flac --best -o \"$fn\" $cddafile"); open TAGFLAC, "| metaflac --import-tags-from=- \"$fn\""; print TAGFLAC "ARTIST=$artist\n"; print TAGFLAC "ALBUM=$album\n"; print TAGFLAC "TITLE=$trackname\n"; print TAGFLAC "DATE=$year\n"; print TAGFLAC "GENRE=$genre\n"; print TAGFLAC "TRACKNUMBER=$tracknum\n"; close TAGFLAC; } $cddanum++; } # Here is an example mungefilename function. # mungefilename () # { # echo "$@" | perl -e 'while () {print lc;}' \ # | sed 's/\&/and/g' \ # | sed 's/ /-/g' # }