How to get detail (Title,Artist) from .mp3 files in python using eyed3

后端 未结 5 1051
不思量自难忘°
不思量自难忘° 2021-01-15 15:57

Here is my code

import eyed3

audiofile = eyed3.load(\"19 Calvin Harris - Summer.mp3\")

print(audiofile.tag.artist)

This is an error

相关标签:
5条回答
  • I think the problem lies within the module.

    I did some debugging using this code:

    from eyed3 import id3
    
    tag = id3.Tag()
    tag.parse("myfile.mp3")
    print(tag.artist)
    

    In the parse function, the file is opened and then passed to _loadV2Tag(fileobject). Then, the module reads the first few lines of the file header and checks if it begins with ID3.

    if f.read(3) != "ID3":
        return False
    

    And here it returns false and I think this is where the error lies, because if I try to read the header myself, it is most definitely ID3.

    >>> f = open("myfile.mp3", "rb")
    >>> print(f.read(3))
    b'ID3'
    

    But full python3 support is not to be expected until version 0.8 according to https://bitbucket.org/nicfit/eyed3/issues/25/python-3-compatibilty which is available here: https://bitbucket.org/nicfit/eyed3/branch/py3

    0 讨论(0)
  • 2021-01-15 16:25

    Try this:

    if audiofile.tag is None:
                audiofile.tag = eyed3.id3.Tag()
                audiofile.tag.file_info = eyed3.id3.FileInfo("foo.id3")
        audiofile.tag.artist=unicode(artist, "utf-8")
    
    0 讨论(0)
  • 2021-01-15 16:25

    For Python 3 things have changed and my code runs on my Mac.

    @yask was correct as you should be checking for non-existent values and this is my example:

    Copy and paste and just adjust the path for your needs & can be used in a loop of file paths.

    """PlaceHolder."""
    import re
    
    from os import path as ospath
    
    from eyed3 import id3
    
    current_home = ospath.expanduser('~')
    file_path = ospath.join(current_home,
                            'Music',
                            'iTunes',
                            'iTunes Media',
                            'Music',
                            'Aerosmith',
                            'Big Ones',
                            '01 Walk On Water.mp3',
                            )
    
    
    def read_id3_artist(audio_file):
        """Module to read MP3 Meta Tags.
    
        Accepts Path like object only.
        """
        filename = audio_file
        tag = id3.Tag()
        tag.parse(filename)
        # =========================================================================
        # Set Variables
        # =========================================================================
        artist = tag.artist
        title = tag.title
        track_path = tag.file_info.name
        # =========================================================================
        # Check Variables Values & Encode Them and substitute back-ticks
        # =========================================================================
        if artist is not None:
            artist.encode()
            artistz = re.sub(u'`', u"'", artist)
        else:
            artistz = 'Not Listed'
        if title is not None:
            title.encode()
            titlez = re.sub(u'`', u"'", title)
        else:
            titlez = 'Not Listed'
        if track_path is not None:
            track_path.encode()
            track_pathz = re.sub(u'`', u"'", track_path)
        else:
            track_pathz = ('Not Listed, and you have an the worst luck, '
                           'because this is/should not possible.')
        # =========================================================================
        # print them out
        # =========================================================================
        try:
            if artist is not None and title is not None and track_path is not None:
                print('Artist: "{}"'.format(artistz))
                print('Track : "{}"'.format(titlez))
                print('Path  : "{}"'.format(track_pathz))
        except Exception as e:
            raise e
    
    
    read_id3_artist(file_path)
    
    # Show Case:
    # Artist: "Aerosmith"
    # Track : "Walk On Water"
    # Path  : "/Users/MyUserName/Music/iTunes/iTunes Media/Music/Aerosmith/Big Ones/01 Walk On Water.mp3"  # noqa
    
    0 讨论(0)
  • 2021-01-15 16:36

    Title and Artists are available through accessor functions of the Tag() return value. The example below shows how to get them using getArtist() and getTitle() methods.

     import eyed3
     tag = eyed3.Tag()
     tag.link("/some/file.mp3")
     print tag.getArtist()
     print tag.getTitle()
    
    0 讨论(0)
  • 2021-01-15 16:39

    Try this Code , it worked for me

    import eyed3
    
    def show_info():
        audio = eyed3.load("[PATH_TO_MP3]")
        print audio.tag.artist
        print audio.tag.album
        print audio.tag.title
    
    show_info()
    
    0 讨论(0)
提交回复
热议问题