rendered paste body#!/usr/bin/python# Convert ALAC files to FLAC# --rlg 12/30/07import sys, osfrom mutagen.flac import FLACfrom mutagen.mp4 import MP4debug = 0## Comment TBDdef setFlacTag( flacTagName, mp4TagName, subs=(0,) ): # if MP4 tag does not exist, then do nothing if not mp4TagName in mp4Tags: return None if len(subs) == 0: flacTags[flacTagName] = str(mp4Tags[mp4TagName]) elif len(subs) == 1: flacTags[flacTagName] = str(mp4Tags[mp4TagName][subs[0]]) elif len(subs) ==2: flacTags[flacTagName] = str(mp4Tags[mp4TagName][subs[0]][subs[1]]) else: print "should trap this error" sys.exit(9) ## main#for alacFile in sys.argv[1:]: print "==", alacFile # Test for ALAC ## Should perhaps check for .m4a extension cmd = "alac-decoder -t \"" + alacFile+"\"" # ^^ what is returned for lossy m4a? ### Need to make sure this is really LOSSLESS ALAC if debug: print "CMD:", cmd rc = os.system(cmd) if debug: print "RC=", rc if rc: print "Not a valid ALAC file. Skipping." continue # foo/bar.m4a -> foo/bar.flac base = os.path.splitext(alacFile)[0] flacFile = base+".flac" # If flacFile exists, skip. Should ask user. btw, Flac will bitch about it if os.path.isfile(flacFile): print "Output file [%s] already exists. Skipping" % flacFile continue print "Encoding to:", flacFile ## to do Flac: add replay-gain cmd = "alac-decoder \"" + alacFile + "\" | flac - --best -V -o \"" + flacFile + "\"" if debug: print "CMD:", cmd rc = os.system(cmd) if debug: print "RC=", rc mp4Tags = MP4(alacFile) flacTags = FLAC(flacFile) # Assume single-valued tags, i.e. use the first value in the list # Following Easytag usage for FLAC tags setFlacTag( 'ALBUM', '\xa9alb' ) setFlacTag( 'TITLE', '\xa9nam' ) setFlacTag( 'ARTIST', '\xa9ART' ) setFlacTag( 'GENRE', '\xa9gen', () ) # mutagen returns single-valued genre. bug?? setFlacTag( 'DATE', '\xa9day' ) setFlacTag( 'COMMENT' , '\xa9cmt' ) setFlacTag( 'ENCODED-BY', '\xa9too' ) setFlacTag( 'COPYRIGHT', 'cprt' ) setFlacTag( 'TRACKNUMBER', 'trkn', (0,0) ) setFlacTag( 'TRACKTOTAL', 'trkn', (0,1) ) setFlacTag( 'DISCNUMBER', 'disk', (0,0) ) setFlacTag( 'COMPOSER', '\xa9wrt' ) setFlacTag( 'PERFORMER', 'aART' ) # Easytag Orig. Artis. Is there a better match? setFlacTag( 'LICENSE', 'purl' ) # Easytag URL print flacTags.pprint() flacTags.save()