Metadata extraction is a necessary task while making music players or other related applications. The best python library to read music metadata of various audio and video file formats is tinytag. This library allows you to access metadata of various audio and video file formats like mp3, m4a, mp4, flac, wav etc.
The list of attributes you can access the album, album artist, artist, audio_offset, bitrate, comment, composer, disc, disc_total, duration, filesize, genre, sample rate, title, track, track_total, and year. Note that you can only read and not edit the metadata.
Installation:
This module does not come built-in with Python. To install this module type the below command in the terminal.
pip install tinytag
This library supports python 2.7+ and 3.4+ and pypy.
Extraction of metadata
First, import the Tinytag method from the tinytag library. Then, pass the file name to the Tinytag.get() method if it is present in the same directory, if not, pass the full path and assign this to any variable. Now, the attributes can be accessed using the following format: variable_name.attribute_name.
You can check if the file format you are using is supported or not using the method: TinyTag.is_supported(filename) which returns a bool value.
Note: Missing metadata will be shown as None
If you’d like to follow along, the download link for the audio and video file used in this article is given: m4a(audio) and mp4(video).
Example 1(Audio):
Python3
# Python3 program to illustrate # accessing of audio metadata # using tinytag library # Import Tinytag method from # tinytag library from tinytag import TinyTag # Pass the filename into the # Tinytag.get() method and store # the result in audio variable audio = TinyTag.get( "GeeksForGeeks_Audio.m4a" ) # Use the attributes # and Display print ( "Title:" + audio.title) print ( "Artist: " + audio.artist) print ( "Genre:" + audio.genre) print ( "Year Released: " + audio.year) print ( "Bitrate:" + str (audio.bitrate) + " kBits/s" ) print ( "Composer: " + audio.composer) print ( "Filesize: " + str (audio.filesize) + " bytes" ) print ( "AlbumArtist: " + audio.albumartist) print ( "Duration: " + str (audio.duration) + " seconds" ) print ( "TrackTotal: " + str (audio.track_total)) |
Output:
Title:GeeksForGeeks_Audio Artist: Neeraj Rana/GFG Genre:Geek Music Year Released: 2020 Bitrate:182.72 kBits/s Composer: GeeksForGeeks Team Filesize: 63076 bytes AlbumArtist: Voice Recorder Duration: 2.7306458333333334 seconds TrackTotal: None
Example 2(Video):
Python3
# Python3 program to illustrate # accessing of video metadata # using tinytag library # Import Tinytag method from # tinytag library from tinytag import TinyTag # Pass the filename into the # Tinytag.get() method and store # the result in audio variable video = TinyTag.get( "GeeksForGeeks_Video.mp4" ) # Use the attributes # and display print ( "Title:" + video.title) print ( "Artist: " + video.artist) print ( "Genre:" + video.genre) print ( "Year Released: " + video.year) print ( "Bitrate:" + str (video.bitrate) + " kBits/s" ) print ( "Composer: " + video.composer) print ( "Filesize: " + str (video.filesize) + " bytes" ) print ( "AlbumArtist: " + str (video.albumartist)) print ( "Duration: " + str (video.duration) + " seconds" ) print ( "TrackTotal: " + str (video.track_total)) |
Output:
Title:GeeksForGeeks_Video Artist: Neeraj Rana/GFG Genre:Geek Video Year Released: 2020 Bitrate:294651.393 kBits/s Composer: GFG Video Team Filesize: 511940 bytes AlbumArtist: None Duration: 1.8239333333333334 seconds TrackTotal: None
If you come across any TypeError, you can use typecasting.