{"id":18365782,"url":"https://github.com/martchus/tagparser","last_synced_at":"2025-04-05T12:06:17.885Z","repository":{"id":30846773,"uuid":"34404255","full_name":"Martchus/tagparser","owner":"Martchus","description":"C++ library for reading and writing MP4/M4A/AAC (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags","archived":false,"fork":false,"pushed_at":"2025-03-28T17:25:27.000Z","size":2550,"stargazers_count":130,"open_issues_count":3,"forks_count":17,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-03-28T18:24:48.833Z","etag":null,"topics":["cpp-library","flac","hacktoberfest","id3","matroska","mp4","opus","tagging"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Martchus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-04-22T17:11:19.000Z","updated_at":"2025-03-28T17:25:31.000Z","dependencies_parsed_at":"2023-02-10T11:01:06.003Z","dependency_job_id":"39c037af-c09e-4c33-9e98-35630094c4d2","html_url":"https://github.com/Martchus/tagparser","commit_stats":null,"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Ftagparser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Ftagparser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Ftagparser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Ftagparser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Martchus","download_url":"https://codeload.github.com/Martchus/tagparser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332604,"owners_count":20921853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp-library","flac","hacktoberfest","id3","matroska","mp4","opus","tagging"],"created_at":"2024-11-05T23:14:31.578Z","updated_at":"2025-04-05T12:06:17.841Z","avatar_url":"https://github.com/Martchus.png","language":"C++","readme":"# Tag Parser\nC++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags.\n\n## Supported formats\nThe tag library can read and write the following tag formats:\n\n* iTunes-style MP4/M4A tags (MP4-DASH is supported)\n* ID3v1 and ID3v2 tags\n    * conversion between ID3v1 and different versions of ID3v2 is possible\n    * mainly for use in MP3 files but can be added to any kind of file\n* Vorbis, Opus and FLAC comments in Ogg streams\n    * cover art via \"METADATA_BLOCK_PICTURE\" is supported\n* Vorbis comments and \"METADATA_BLOCK_PICTURE\" in raw FLAC streams\n* Matroska/WebM tags and attachments\n\nFurther remarks:\n\n* Unsupported file contents (such as unsupported tag formats) are *generally* preserved as-is.\n* Note that APE tags are *not* supported. APE tags in the beginning of a file are strongly\n  unrecommended and thus discarded when applying changes. APE tags at the end of the file\n  are preserved as-is when applying changes.\n\n## File layout options\n### Tag position\nThe library allows you to choose whether tags should be placed at the beginning or at\nthe end of an MP4/Matroska file.\n\n### Padding\nPadding allows adding additional tag information without rewriting the entire file\nor appending the tag. Usage of padding can be configured:\n* minimum/maximum padding: The file is rewritten if the padding would fall below/exceed the specified limits.\n* preferred padding: If the file needs to be rewritten the preferred padding is used.\n\nDefault value for minimum and maximum padding is zero. Hence the library will almost always have to rewrite\nthe entire file to apply changes. To prevent this, set at least the maximum padding to a higher value.\n\nIt is also possible to force rewriting the entire file always.\n\nTaking advantage of padding is currently not supported when dealing with Ogg streams (it is supported when dealing with raw FLAC streams).\n\n## Additional features\nThe library can also display technical information such as the ID, format, language, bitrate,\nduration, size, timestamps, sampling frequency, FPS and other information of the tracks.\n\nIt also allows to inspect and validate the element structure of MP4 and Matroska files.\n\n## Text encoding, Unicode support\nThe library is aware of different text encodings and can convert between different encodings using iconv.\n\n## Usage\n* For building/installing the library, checkout the build instructions below.\n* To use the library with CMake, use its find module (e.g. `find_package(tagparser 10.1.0 REQUIRED)`) which\n  provides the imported target `tagparser` you can link against. Otherwise, use the `pkg-config` module\n  `tagparser` to query the required compiler/linker flags.\n* For a code example that shows how to read and write tag fields in a format-independent way, have\n  a look at [`example.cpp`](doc/example.cpp).\n* The most important class is `TagParser::MediaFileInfo` providing access to everything else.\n* IO errors are propagated via standard `std::ios_base::failure`.\n* Fatal processing errors are propagated by throwing a class derived from `TagParser::Failure`.\n* All operations which might generate warnings, non-fatal errors, ... take a `TagParser::Diagnostics` object to store\n  those messages.\n* All operations which might be aborted or might provide progress feedback take a `TagParser::AbortableProgressFeedback`\n  object for callbacks and aborting.\n* Field values are stored using `TagParser::TagValue` objects. Those objects erase the actual type similar to `QVariant`\n  from the Qt framework. The documentation of `TagParser::TagValue` covers how different types and encodings are\n  handled.\n\n### Further documentation\nFor more examples check out the command line interface of [Tag Editor](https://github.com/Martchus/tageditor).\nAPI documentation can be generated using Doxygen with `cmake --build … --target tagparser_apidoc`.\n\n## Bugs, stability\nBugs can be reported on GitHub.\n\nIt is recommend to create backups before editing because I can not test whether the library\nworks with all kinds of files. (When forcing rewrite a backup is always created.)\n\n## Build instructions\nThe tagparser library depends on [c++utilities](https://github.com/Martchus/cpp-utilities) and is built\nin the same way.\nIt also depends on zlib, [iso-codes](https://salsa.debian.org/iso-codes-team/iso-codes) and requires at\nleast CMake 3.19. Tests depend on CppUnit. For checking integrity of testfiles, the OpenSSL crypto library is\nrequired.\n\nThe location of the JSON file from iso-codes can be specified via the CMake variable `LANGUAGE_FILE_ISO_639_2`.\n\nFor building multiple projects in one go (c++utilities, tagparser and the tag editor), checkout\nthe [\"Building this straight\"](https://github.com/Martchus/tageditor#building-this-straight) instructions.\n\n## TODOs\n* Support more formats (EXIF, PDF metadata, Theora, ...)\n* Support adding cue-sheet to FLAC files\n\nMore TODOs are tracked in the [issue section at GitHub](https://github.com/Martchus/tagparser/issues).\n\n## Copyright notice and license\nCopyright © 2015-2025 Marius Kittler\n\nAll code is licensed under [GPL-2-or-later](LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartchus%2Ftagparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartchus%2Ftagparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartchus%2Ftagparser/lists"}