Python library to inspect and export metadata from MP4/M4V/M4A, MP3 and FLAC media files.
Project description
Metaspector
Metaspector is a powerful Python library and command-line tool designed for inspecting and extracting metadata from various media file formats. Whether you need to programmatically access track information, album art, or simply get a quick overview of a file's properties, Metaspector provides a clean and consistent interface.
✨ Features
-
Comprehensive Metadata Extraction: Retrieve detailed information like title, artist, album, genre, release date, track numbers, and more.
-
Audio and Video Track Details: Get specifics about video/audio codecs, channels, sample rates, bitrates, video dimensions, and more.
-
Subtitle Track Details: Get a wide variety of subtitle specific metadata like "forced only", "auxiliary content", "language translation" etc.
-
Cover Art Extraction: Easily extract embedded cover art.
-
Multi-Format Support: Easily work with major media formats like:
-
🎬 MP4/M4V/M4A (MPEG-4 incl. parsing of proprietary atoms often seen in M4V files distributed by Apple Inc.)
-
🎵 MP3 (MPEG-1 Audio Layer III)
-
🎧 FLAC (Free Lossless Audio Codec)
-
-
Multi-Codec Support: Easily work with major codec formats like:
-
🎬 Video Codecs AVC1, HEVC, AV1, VP9 (incl. Dolby Vision)
-
🎵 Audio Codecs E-AC3, AC3, AAC, MP3, FLAC (incl. Dolby Atmos)
-
📺💬 Subtitles tx3g, cea-608, mp4s, subp, clcp, text
-
-
Flexible Output:
-
CLI: Get human-readable JSON output directly in your terminal.
-
API: Integrate seamlessly into your Python applications.
-
-
Section-Specific Output: Request only the
metadata,video,audio, orsubtitlesections for focused data retrieval. -
Export Functionality: Export extracted metadata to JSON files or cover art to image files.
-
No Dependencies: Metaspector is a lightweight, self-contained library. It relies exclusively on built-in Python tools, requiring no external libraries to run.
-
Dolby Vision/Atoms Detection: Easily detect if a given video or audio track contains Dolby Vision or Atmos specific indicators
-
MP42Foundation oriented: Heavily oriented on MP42Foundation, also see https://github.com/SublerApp/MP42Foundation
-
ffmpeg oriented: Strives to be as compatible as possible with ffmpeg cli instructions
🚀 Installation
You can install metaspector directly from PyPI using pip:
pip install metaspector
For development or local usage, it's recommended to use a virtual environment.
# Create and activate a virtual environment (optional but recommended)
python3 -m venv .venv
source .venv/bin/activate
# Install in editable mode from your project's root directory
pip install -e .
💡 Usage
Command-Line Interface (CLI)
The metaspector CLI provides simple and direct access to the library's main functions.
Inspect a File
To inspect a file and print all of its metadata to the terminal as JSON, use the inspect command:
metaspector inspect "/path/to/your/file.mp4"
Inspect a Specific Section
You can specify a section to get a more focused output. For example, to view only the audio track details:
metaspector inspect "/path/to/your/file.m4a" --section audio
Export Metadata
To export the full metadata of a file to a JSON file, use the export command with the meta type:
metaspector export meta "/path/to/your/file.mp3" "./output/"
This command will create a file named your_file.json in the ./output/ directory.
Export Cover Art
To extract and save the embedded cover art, use the export command with the cover type:
metaspector export cover "/path/to/your/file.flac" "./output/"
This will save the image as your_file.jpg or your_file.png in the ./output/ directory.
Python API
Metaspector's API is designed for easy integration into your Python scripts.
Basic Inspection
To get all metadata from a file, instantiate MediaInspector and call the inspect() method:
from metaspector import MediaInspector
inspector = MediaInspector("/path/to/your/file.mp4")
metadata = inspector.inspect()
print(metadata)
Get Specific Sections
You can pass the section argument to the inspect() method to retrieve only a specific part of the metadata:
from metaspector import MediaInspector
inspector = MediaInspector("/path/to/your/file.m4a")
audio_data = inspector.inspect(section="audio")
print(audio_data)
Extract Cover Art
Use the get_cover_art() method to retrieve the raw image bytes, which you can then save to a file:
from metaspector import MediaInspector
inspector = MediaInspector("/path/to/your/file.flac")
cover_art_bytes = inspector.get_cover_art()
if cover_art_bytes:
with open("cover.jpg", "wb") as f:
f.write(cover_art_bytes)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metaspector-0.1.4.post5.tar.gz.
File metadata
- Download URL: metaspector-0.1.4.post5.tar.gz
- Upload date:
- Size: 50.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
334a8a954b6095ffde047d310bef8ba65be3a1429d0a9a7390845fa3880c07f5
|
|
| MD5 |
431acc43aeddf1610d77f78b8afd4f6b
|
|
| BLAKE2b-256 |
d591e87bea63d1b9df171f6a4b06521103053874c681be964328d103d2000fa4
|
Provenance
The following attestation bundles were made for metaspector-0.1.4.post5.tar.gz:
Publisher:
publish.yaml on rsmvdl/metaspector
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metaspector-0.1.4.post5.tar.gz -
Subject digest:
334a8a954b6095ffde047d310bef8ba65be3a1429d0a9a7390845fa3880c07f5 - Sigstore transparency entry: 377761985
- Sigstore integration time:
-
Permalink:
rsmvdl/metaspector@b3ca244fb7d5fa37fbea0fbd8faf0b4a8cb637e3 -
Branch / Tag:
refs/tags/v0.1.4.post5 - Owner: https://github.com/rsmvdl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@b3ca244fb7d5fa37fbea0fbd8faf0b4a8cb637e3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file metaspector-0.1.4.post5-py3-none-any.whl.
File metadata
- Download URL: metaspector-0.1.4.post5-py3-none-any.whl
- Upload date:
- Size: 57.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
958c224f911c0dd512c5ffce54eef756f0e00fe6ae3ba998a91b450c79163d60
|
|
| MD5 |
3446f072d1e7d32c137fe8227b8b6b75
|
|
| BLAKE2b-256 |
a82f65307eb09bf6af72a22221b6b881e302f5de0fe7bef12b097064a50a2064
|
Provenance
The following attestation bundles were made for metaspector-0.1.4.post5-py3-none-any.whl:
Publisher:
publish.yaml on rsmvdl/metaspector
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metaspector-0.1.4.post5-py3-none-any.whl -
Subject digest:
958c224f911c0dd512c5ffce54eef756f0e00fe6ae3ba998a91b450c79163d60 - Sigstore transparency entry: 377762015
- Sigstore integration time:
-
Permalink:
rsmvdl/metaspector@b3ca244fb7d5fa37fbea0fbd8faf0b4a8cb637e3 -
Branch / Tag:
refs/tags/v0.1.4.post5 - Owner: https://github.com/rsmvdl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@b3ca244fb7d5fa37fbea0fbd8faf0b4a8cb637e3 -
Trigger Event:
release
-
Statement type: