Access metadata of various audio and video file formats using Python - tinytag library - GeeksforGeeks

12 Nov, 2020
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.
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.
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 libraryfrom tinytag import TinyTag  # Pass the filename into the# Tinytag.get() method and store# the result in audio variableaudio = TinyTag.get("GeeksForGeeks_Audio.m4a")  # Use the attributes# and Displayprint("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 libraryfrom tinytag import TinyTag  # Pass the filename into the# Tinytag.get() method and store# the result in audio variablevideo = TinyTag.get("GeeksForGeeks_Video.mp4")  # Use the attributes# and displayprint("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.
python-modules
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Python | Pandas dataframe.groupby()
Defaultdict in Python
Python | Get unique values from a list
Python Classes and Objects
Python | os.path.join() method
Create a directory in Python