ffmeta
Media metadata files read, written and converted through one model: FFmpeg's ffmetadata, Vorbis comments, and cue sheets.
It is pure -- text in, text out: no ffmpeg, no file opened. A file read becomes one model -- its tags, its streams' tags, its chapters, a cue sheet's disc; written in another format, what that format cannot hold is told as a note, never dropped in silence.
| Format | What it is |
|---|---|
| ffmetadata | FFmpeg's ;FFMETADATA1 text: global and stream tags, chapters |
| Vorbis comment | NAME=value lines, as vorbiscomment and metaflac read and write |
| Cue sheet | the CDRWIN format: an album's tracks, their times and fields |
What crosses between them, field by field and with its reasons, is ffsuite's mappings skill.
Installing
pip install ffmeta
Python 3.13 or later; the standard library alone.
Using it
>>> import ffmeta
>>> text = ";FFMETADATA1\ntitle=Album\n\n[CHAPTER]\nTIMEBASE=1/1000\nSTART=0\nEND=60000\ntitle=One\n"
>>> meta = ffmeta.read(text, "ffmetadata", "album.ffmeta")
>>> converted = ffmeta.convert(meta, "ffmetadata", "vorbis")
>>> written = ffmeta.write(converted.meta, "vorbis")
>>> print(written.text, end="")
title=Album
CHAPTER000=00:00:00.000
CHAPTER000NAME=One
>>> converted.notes + written.notes
('chapter ends: Vorbis comments hold none (a chapter ends where the next begins): left out',)
>>> ffmeta.read("title=x\n", "ffmetadata", "bad.ffmeta")
Traceback (most recent call last):
...
ffmeta.Error: bad.ffmeta:1: not ffmetadata: the first line must begin ;FFMETADATA: title=x
What crosses into the target is converted; what does not is a note, from
convert (a field the target lacks) or write (a structure it lacks). A text
that cannot be read is refused: ffmeta.Error, its message the reason.
Licence
Part of ffsuite, beside ffman: its own package. Licensed under either of MIT or Apache-2.0, at your option.
Metadata
Release files for ffmeta 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ffmeta-0.1.1.tar.gz | 71.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ffmeta-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 116.1 kB
Release files / ffmeta-0.1.1.tar.gz
| Download URL | ffmeta-0.1.1.tar.gz |
|---|---|
| Size | 71.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbc8c4d5c3e06c5dda995609c019c0a4dbfb66a58e2a3ccd87d9631164f4da51
|
|
BLAKE2b-256 checksum How to use checksums |
041538eea72fe969c58388c187cb448b57e2e57dbf4fdd930ea61d4e41e58a67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency logRelease files / ffmeta-0.1.1-py3-none-any.whl
| Download URL | ffmeta-0.1.1-py3-none-any.whl |
|---|---|
| Size | 45.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8101f78ab01e037d90f4ae1fa5dedebc7b6c00c02ba5f6dcb0dd823c1712361e
|
|
BLAKE2b-256 checksum How to use checksums |
1b133c744b39542d211115ec1b5f4322d61e5475939d33fa99146b4de7ed42b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency log