audio-metadata

audio-metadata is a library for reading and, in the future, writing audio metadata.

Getting Started

Install audio-metadata with pip.

$ pip install -U audio-metadata

Overview

The goals of audio-metadata are to provide a nice API and good UX while keeping the codebase as clean and simple as possible.

Features and functionality that set it apart:

  • Uses the Python standard load(s)/dump(s) API.
    • Can load filepaths, os.PathLike objects, file-like objects, and bytes-like objects.

  • Metadata objects look like a dict and act like a dict.
    • Some common libraries shadow the representation of a dict and/or dict methods but do not behave like a dict.

    • Supports attribute-style access that can be mixed with dict key-subscription.

  • All metadata objects have user-friendly representations.
    • This includes humanized representations of certain values like filesize, bitrate, duration, and sample rate.

>>> import audio_metadata

>>> metadata = audio_metadata.load('05 - Heart of Hearts.flac')

>>> metadata
<FLAC ({
        'filepath': '05 - Heart of Hearts.flac',
        'filesize': '44.23 MiB',
        'pictures': [],
        'seektable': <FLACSeekTable (37 seekpoints)>,
        'streaminfo': <FLACStreamInfo ({
                'bit_depth': 16,
                'bitrate': '1022 Kbps',
                'channels': 2,
                'duration': '06:03',
                'md5': '3ae700893d099a5d281a5d8db7847671',
                'sample_rate': '44.1 KHz',
        })>,
        'tags': <VorbisComment ({
                'album': ['Myth Takes'],
                'artist': ['!!!'],
                'bpm': ['119'],
                'date': ['2007'],
                'genre': ['Dance Punk'],
                'title': ['Heart of Hearts'],
                'tracknumber': ['05'],
        })>,
})>

>>> metadata['streaminfo']
<FLACStreamInfo ({
        'bit_depth': 16,
        'bitrate': '1022 Kbps',
        'channels': 2,
        'duration': '06:03',
        'md5': '3ae700893d099a5d281a5d8db7847671',
        'sample_rate': '44.1 KHz',
})>

>>> metadata.streaminfo.bitrate
1022134.0362995076

>>> metadata.streaminfo['duration']
362.9066666666667

>>> metadata['streaminfo'].sample_rate
44100

See the full API Reference.