Example #1
0
 def edit_id3(self, sound_file_path, album, artist, title, tracknumber, thumbnail):
     mp3 = mutagen.mp3.MP3(sound_file_path)
     try:
         mp3.add_tags(ID3=mutagen.id3.ID3)
     except mutagen.id3.error:
         pass
     mp3['TALB'] = mutagen.id3.TALB(encoding=3,
                                    text=album)
     mp3['TPE1'] = mutagen.id3.TPE1(encoding=3,
                                    text=artist)
     mp3['TIT2'] = mutagen.id3.TIT2(encoding=3,
                                    text=title)
     mp3['TRCK'] = mutagen.id3.TRCK(encoding=3,
                                    text=[str(tracknumber)])
     mp3.tags.add(
         mutagen.id3.APIC(
             encoding=3,
             mime='image/jpeg',
             type=3,
             desc='Cover',
             data=thumbnail
         )
     )
     mp3.save()
Example #2
0
def entag(json_path, idx_album_p1, stderr):
    # cwd = os.getcwd()

    idx_album = idx_album_p1 - 1
    target_dir = os.path.dirname(json_path)

    # idx_album = 0
    with open(json_path, "r", encoding='utf-8') as f_json:
        album_ary = json.load(f_json)

    #(sys.stdin)
    album_i = check_none(album_ary[idx_album].get("ALBUM"))

    album_title = check_none(album_i.get("TITLE_OFFICIAL").get("DISPLAY"))
    stderr.write("[info] album_title=%s\n" % album_title)
    album_artist = check_none(
        album_i.get("ARTIST").get("NAME_OFFICIAL").get("DISPLAY"))
    stderr.write("[info] album_artist=%s\n" % album_artist)
    # print(album_artist)
    dir_mp3_prev = os.path.join(target_dir, "mp3")
    dir_mp3 = os.path.join(target_dir,
                           valid_fn("%s - %s" % (album_title, album_artist)))

    # os.mkdir(target_dir)
    # shutil.move(dir_mp3_prev, dir_mp3)
    os.mkdir(dir_mp3)
    # shutil.copy(dir_mp3_prev, dir_mp3)
    # os.chdir(dir_mp3)
    # os.mkdir(dir_mp3)
    # os.chdir(dir_mp3)

    track_count = check_none(int(album_i.get("TRACK_COUNT")))
    stderr.write("[info] track_count=%s\n" % track_count)
    track_ary = check_none(album_i.get("TRACK"))
    if len(track_ary) != track_count:
        raise Exception("number of tracks is inconsistent!")

    for idx_track in range(track_count):
        track = track_ary[idx_track]
        # ord_track = int(check_none(track.get("ORD")))
        # if (idx_track+1)!=ord_track:
        #     raise Exception("ORD is inconsistent")
        track_num = int(check_none(track.get("TRACK_NUM")))
        stderr.write("[info] track num=%s\n" % track_num)

        if (idx_track + 1) != track_num:
            raise Exception("TRACK_NUM is inconsistent")
        track_title = check_none(track.get("TITLE_OFFICIAL").get("DISPLAY"))
        stderr.write("[info] track title=%s\n" % track_title)
        track_artist_json = track.get("ARTIST")
        if track_artist_json:
            track_artist = check_none(
                track_artist_json.get("NAME_OFFICIAL").get("DISPLAY"))
            stderr.write("[info] track artist=%s\n" % track_artist)

        stderr.write("[info] copying...")
        prev_fn = os.path.join(dir_mp3_prev, "track%02d.mp3" % track_num)
        mp3_fn = os.path.join(
            dir_mp3, "%02d - %s.mp3" % (track_num, valid_fn(track_title)))
        shutil.copyfile(prev_fn, mp3_fn)
        stderr.write("done\n")

        stderr.write("[info] entagging...")
        mp3 = mutagen.mp3.MP3(mp3_fn, ID3=mutagen.id3.ID3)
        mp3.add_tags(ID3=mutagen.id3.ID3)
        mp3["TIT2"] = mutagen.id3.TIT2(encoding=3, text=track_title)
        #if track_artist is not None:
        if track_artist_json:
            mp3["TPE1"] = mutagen.id3.TPE1(encoding=3, text=track_artist)
        else:
            mp3["TPE1"] = mutagen.id3.TPE1(encoding=3, text=album_artist)
        #if album_title is not None:
        mp3["TALB"] = mutagen.id3.TALB(encoding=3, text=album_title)
        #if album_artist is not None:
        mp3["TPE2"] = mutagen.id3.TPE2(encoding=3, text=album_artist)
        mp3["TRCK"] = mutagen.id3.TRCK(encoding=3,
                                       text="%s/%s" % (track_num, track_count))
        mp3["TPOS"] = mutagen.id3.TPOS(
            encoding=3,
            text="%s/%s" %
            (album_i.get("DISC_IN_SET"), album_i.get("TOTAL_IN_SET")))

        mp3.save()
        stderr.write("done\n")
counter_upd = 0
counter_left = 0

for track in gpod.sw_get_tracks( itdb):
    if track.artist is None or track.title is None or track.album is None:
        # silently ignore
        continue

    filename = gpod.itdb_filename_on_ipod( track)
    try:
        mp3 = mutagen.mp3.MP3(filename)
        if not mp3.tags:
            print ''
            print '%s has no id3 tags' % ( filename )
            print 'iTDB says: AR = %s, TI = %s, AL = %s' % ( track.artist, track.title, track.album )
            mp3.add_tags() # create header
            mp3.tags.add(mutagen.id3.TPE1(3,track.artist))
            mp3.tags.add(mutagen.id3.TALB(3,track.album))
            mp3.tags.add(mutagen.id3.TIT2(3,track.title))
            mp3.tags.add(mutagen.id3.TXXX(3,"Taggger","tagged from itdb with libgpod"))
            mp3.save()
            counter_upd += 1
            print 'wrote tags to: %s' % ( filename )
        else:
            counter_left += 1            
    except Exception, e:
        print 'informative debug output: something went wrong.. : %s' % e
        counter_left = counter_left + 1

print ''
print ' ++ results ++'
Example #4
0
counter_left = 0

for track in gpod.sw_get_tracks(itdb):
    if track.artist is None or track.title is None or track.album is None:
        # silently ignore
        continue

    filename = gpod.itdb_filename_on_ipod(track)
    try:
        mp3 = mutagen.mp3.MP3(filename)
        if not mp3.tags:
            print ''
            print '%s has no id3 tags' % (filename)
            print 'iTDB says: AR = %s, TI = %s, AL = %s' % (
                track.artist, track.title, track.album)
            mp3.add_tags()  # create header
            mp3.tags.add(mutagen.id3.TPE1(3, track.artist))
            mp3.tags.add(mutagen.id3.TALB(3, track.album))
            mp3.tags.add(mutagen.id3.TIT2(3, track.title))
            mp3.tags.add(
                mutagen.id3.TXXX(3, "Taggger",
                                 "tagged from itdb with libgpod"))
            mp3.save()
            counter_upd += 1
            print 'wrote tags to: %s' % (filename)
        else:
            counter_left += 1
    except Exception, e:
        print 'informative debug output: something went wrong.. : %s' % e
        counter_left = counter_left + 1