C++ library for reading and writing MP4/M4A/AAC (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Go to file
Martchus 6c6ab0e301 improved file handling
- don't override backup files
- allow saving files at a different location
- reduce code duplication for restoring backups
2016-05-01 20:02:44 +02:00
aac improved parsing ID3 genres 2016-02-23 20:33:00 +01:00
adts fixed includes 2015-09-06 19:57:33 +02:00
avc parsing AVC config 2016-02-17 20:19:05 +01:00
avi fixed includes 2015-09-06 19:57:33 +02:00
id3 small improvements 2016-03-18 21:43:09 +01:00
matroska improved file handling 2016-05-01 20:02:44 +02:00
mp4 improved file handling 2016-05-01 20:02:44 +02:00
mpegaudio fixed calculation of duration of MPEG 1/2 audio streams 2016-01-31 00:02:23 +01:00
ogg improved file handling 2016-05-01 20:02:44 +02:00
opus added parser for Opus identification header 2016-01-17 21:32:57 +01:00
tests added tests for overall MP3, MP4 and OGG parsing/making 2016-03-22 22:54:04 +01:00
vorbis fixed some OGG/Vorbis related issues 2016-03-22 22:52:36 +01:00
wav set format id 2015-09-23 00:03:05 +02:00
.gitignore ignore *.txt.user files 2016-01-25 19:11:26 +01:00
CMakeLists.txt improved file handling 2016-05-01 20:02:44 +02:00
LICENSE Initial commit 2015-04-22 19:11:19 +02:00
README.md fixed some OGG/Vorbis related issues 2016-03-22 22:52:36 +01:00
abstractattachment.cpp added methods to buffer attachments 2015-11-26 14:22:44 +01:00
abstractattachment.h fixed buffer being released instead of discarded 2015-12-21 00:03:04 +01:00
abstractchapter.cpp fixed includes 2015-09-06 19:57:33 +02:00
abstractchapter.h fixed includes 2015-09-06 19:57:33 +02:00
abstractcontainer.cpp improved document title / segment count API 2015-12-27 19:51:57 +01:00
abstractcontainer.h improved document title / segment count API 2015-12-27 19:51:57 +01:00
abstracttrack.cpp parsing AVC config 2016-02-17 20:19:05 +01:00
abstracttrack.h parsing AVC config 2016-02-17 20:19:05 +01:00
aspectratio.cpp parsing AVC config 2016-02-17 20:19:05 +01:00
aspectratio.h overall code cleanup 2016-04-24 22:10:45 +02:00
backuphelper.cpp improved file handling 2016-05-01 20:02:44 +02:00
backuphelper.h improved file handling 2016-05-01 20:02:44 +02:00
basicfileinfo.cpp improved file handling 2016-05-01 20:02:44 +02:00
basicfileinfo.h improved file handling 2016-05-01 20:02:44 +02:00
caseinsensitivecomparer.h fixed includes 2015-09-06 19:57:33 +02:00
download_testfiles.sh added tests for Matroska parsing/making 2016-03-15 15:44:44 +01:00
exceptions.cpp fixed spelling mistakes 2015-10-16 21:46:36 +02:00
exceptions.h First commit 2015-04-22 19:22:01 +02:00
fieldbasedtag.h removed useless destructors 2015-12-21 18:35:47 +01:00
genericcontainer.h fixed some OGG/Vorbis related issues 2016-03-22 22:52:36 +01:00
genericfileelement.h skip invalid bytes when parsing EBML 2016-03-13 22:00:23 +01:00
generictagfield.h fixed includes 2015-09-06 19:57:33 +02:00
localeawarestring.cpp First commit 2015-04-22 19:22:01 +02:00
localeawarestring.h added comments and move c'tor 2015-11-10 21:27:40 +01:00
margin.h parsing AVC config 2016-02-17 20:19:05 +01:00
mediafileinfo.cpp improved file handling 2016-05-01 20:02:44 +02:00
mediafileinfo.h improved file handling 2016-05-01 20:02:44 +02:00
mediaformat.cpp added media format MPEG-4 Timed Text 2016-02-20 01:42:01 +01:00
mediaformat.h added == operator to compare with GeneralMediaFormat 2016-03-13 18:23:36 +01:00
nestingsupportingtag.h First commit 2015-04-22 19:22:01 +02:00
notification.cpp fixed includes 2015-09-06 19:57:33 +02:00
notification.h fixed spelling mistake 2015-09-23 00:02:44 +02:00
positioninset.h small improvements 2016-03-18 21:43:09 +01:00
signature.cpp improved handling of unsupported files 2016-03-14 21:56:27 +01:00
signature.h improved handling of unsupported files 2016-03-14 21:56:27 +01:00
size.h added == operator 2016-03-13 18:17:41 +01:00
statusprovider.cpp fixed includes 2015-09-06 19:57:33 +02:00
statusprovider.h fixed includes 2015-09-06 19:57:33 +02:00
tag.cpp fixed includes 2015-09-06 19:57:33 +02:00
tag.h fixed includes 2015-09-06 19:57:33 +02:00
tagparser.doxygen First commit 2015-04-22 19:22:01 +02:00
tagtarget.cpp fixed includes 2015-09-06 19:57:33 +02:00
tagtarget.h allow specific targets to be created with createAppropriateTags() 2015-10-13 23:32:00 +02:00
tagvalue.cpp fixed some OGG/Vorbis related issues 2016-03-22 22:52:36 +01:00
tagvalue.h small improvements 2016-03-18 21:43:09 +01:00

README.md

Tag Parser

C++ library for reading and writing MP4 (iTunes), ID3, Vorbis and Matroska tags.

Supported formats

The tag library can read and write the following tag formats:

  • iTunes-style MP4 tags (MP4-DASH is supported)
  • ID3v1 and ID3v2 tags
  • Vorbis and Opus comments (cover art via "METADATA_BLOCK_PICTURE" is supported) in Ogg streams
  • Matroska/WebM tags and attachments

File layout options

Tag position

The library allows you to choose whether tags should be placed at the beginning or at the end of an MP4/Matroska file.

Padding

Padding allows adding additional tag information without rewriting the entire file or appending the tag. Usage of padding can be configured:

  • minimum/maximum padding: The file is rewritten if the padding would fall below/exceed the specifed limits.
  • preferred padding: If the file needs to be rewritten the preferred padding is used.

However, it is also possible to force rewriting the entire file.

Taking advantage of padding is currently not supported when dealing with Ogg streams.

Additional features

The library can also display technical information such as the ID, format, language, bitrate, duration, size, timestamps, sampling frequency, FPS and other information of the tracks.

It also allows to inspect and validate the element structure of MP4 and Matroska files.

Text encoding, Unicode support

The library does not do any conversions for you (eg. converting Latin1 to UTF-8). However the API provides a way to check which encoding is present (when reading) and which encoding(s) can be used (when writing).

Usage

For examples check out the command line interface of my Tag Editor (which is also on Git).

Bugs, stability

  • Matroska files composed of more than one segment aren't tested yet and might not work.
  • To add new features I've had to revise a lot of code since the last release. I always test the library with files produced by mkvmerge and ffmpeg and several other file but can't verify that it will work with all files. Hence I recommend you to create backups of your files.

Build instructions

The tagparser library depends on c++utilities and is built in the same way. It also depends on zlib.

TODO

  • Support more formats (EXIF, PDF metadata, Theora, ...).
  • Allow adding tags to specific streams when dealing with OGG.
  • Do tests with Matroska files which have multiple segments.