Library for reading and writing metadata in media files
Перейти к файлу
Yury Malich 74687bfe57 Fixed KeyNotFoundException in IFDReader: added synchronization locks to protect class members ifd_offsets and ifd_loopdetect_refs from being modified from multiple thread simultaneously. 2024-08-31 12:01:48 -06:00
.github/workflows undo github actions change 2024-08-31 11:46:34 -06:00
examples Bump to net462, netstandard2.0, netcoreapp3.1 2020-04-26 14:00:04 -06:00
src Fixed KeyNotFoundException in IFDReader: added synchronization locks to protect class members ifd_offsets and ifd_loopdetect_refs from being modified from multiple thread simultaneously. 2024-08-31 12:01:48 -06:00
.editorconfig Overhaul TaglibSharp, lots of changes 2019-01-20 21:39:55 -07:00
.gitattributes Add .gitattributes 2020-09-20 10:51:00 +01:00
.gitignore Overhaul TaglibSharp, lots of changes 2019-01-20 21:39:55 -07:00
.gitmodules Overhaul TaglibSharp, lots of changes 2019-01-20 21:39:55 -07:00
AUTHORS Overhaul TaglibSharp, lots of changes 2019-01-20 21:39:55 -07:00
COPYING Initial import of taglib-sharp; moved from forge 2006-08-26 00:25:52 +00:00
ChangeLog build: Prepare for 2.1.0.0 release 2012-07-03 09:39:11 -07:00
Directory.Build.props Inital bump to net6.0 2022-07-29 18:54:43 -06:00
Directory.Build.targets Overhaul TaglibSharp, lots of changes 2019-01-20 21:39:55 -07:00
NEWS build: Prepare for 2.1.0.0 release 2012-07-03 09:39:11 -07:00
README.md Update Readme 2022-07-29 17:07:46 -06:00
TaglibSharp.sln Remove old Monodevelop section 2022-07-29 17:07:46 -06:00
taglib-sharp.pc.in Bump version to 2.4.0.0 2022-07-29 18:40:50 -06:00
taglib-sharp.snk Initial import of taglib-sharp; moved from forge 2006-08-26 00:25:52 +00:00

README.md

TagLib#

Join the chat at https://gitter.im/mono/taglib-sharp

(aka Taglib-sharp) is a .NET platform-independent library (tested on Windows/Linux) for reading and writing metadata in media files, including video, audio, and photo formats. This is a convenient one-stop-shop to present or tag all your media collection, regardless of which format/container these might use. You can read/write the standard or more common tags/properties of a media, or you can also create and retrieve your own custom tags.

It supports the following formats (by file-extensions):

  • Video: mkv, ogv, avi, wmv, asf, mp4 (m4p, m4v), mpeg (mpg, mpe, mpv, mpg, m2v)
  • Audio: aa, aax, aac, aiff, ape, dsf, flac, m4a, m4b, m4p, mp3, mpc, mpp, ogg, oga, wav, wma, wv, webm
  • Images: bmp, gif, jpeg, pbm, pgm, ppm, pnm, pcx, png, tiff, dng, svg

It is API stable, with only API additions (not changes or removals) occuring in the 2.0 series.

Examples

Read/write metadata from a video

var tfile = TagLib.File.Create(@"C:\My video.avi");
string title = tfile.Tag.Title;
TimeSpan duration = tfile.Properties.Duration;
Console.WriteLine("Title: {0}, duration: {1}", title, duration);

// change title in the file
tfile.Tag.Title = "my new title";
tfile.Save();

Read/write metadata from a Audio file

var tfile = TagLib.File.Create(@"C:\My audio.mp3");
string title = tfile.Tag.Title;
TimeSpan duration = tfile.Properties.Duration;
Console.WriteLine("Title: {0}, duration: {1}", title, duration);

// change title in the file
tfile.Tag.Title = "my new title";
tfile.Save();

Read/write metadata from an Image

var tfile = TagLib.File.Create(@"C:\My picture.jpg");
string title = tfile.Tag.Title;
var tag =  tfile.Tag as TagLib.Image.CombinedImageTag;
DateTime? snapshot = tag.DateTime;
Console.WriteLine("Title: {0}, snapshot taken on {1}", title, snapshot);

// change title in the file
tfile.Tag.Title = "my new title";
tfile.Save();

Read/write custom tags from a specific format

var tfile = TagLib.File.Create(@"C:\My song.flac");
var custom = (TagLib.Ogg.XiphComment) tfile.GetTag(TagLib.TagTypes.Xiph);

// Read
string [] myfields = custom.GetField("MY_TAG");
Console.WriteLine("First MY_TAG entry: {0}", myfields[0]);

// Write
custom.SetField("MY_TAG", new string[] { "value1", "value2" });
custom.RemoveField("OTHER_FIELD");
rgFile.Save();

Website

TagLib# is available on GitHub: https://github.com/mono/taglib-sharp

Installation From NuGet

TagLib# is available on NuGet: https://www.nuget.org/packages/TagLibSharp

Install from package manager:

PM> Install-Package TagLibSharp -Version 2.3.0

Building and Running

Command Line

To Build From Git:

git clone https://github.com/mono/taglib-sharp.git
cd taglib-sharp
dotnet build

To Test:

dotnet test

Build in IDE (Visual Studio, Visual Studio for Mac, Rider, etc):

You can open it in Visual Studio by using TaglibSharp.sln

Running regression by using Nunit 3 Test Adapter:

  1. Ensure NuGet packages have been restored
    1. See: https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore
  2. In Visual Studio, go to menu: Tools > Extensions and Updates > Online (In Visual Studio 2019, use Extensions > Manage Extensions)
  3. Search: Nunit 3 Test Adapter
  4. Download and install it
  5. Open from menu: Test > Windows > Test Explorer (In Visual Studio 2019, use Test > Test Explorer)
  6. You can run your tests from this panel (not using the "Start" button)
  7. You can debug your tests from this panel:
    1. Double click on a test. Set some breakpoints in the test in the editor panel.
    2. right-click on the same test, select "Debug Selected tests".

To test some scenarios and take advantage of the debugger:

  1. Make the "debug" project the Startup project (Right-click on the project, select: "Set as StartUp Project")
  2. Just modify the "Program.cs"
  3. Set some breakpoints and hit the "Start" button

They also use TagLib#

Non exhaustive list of projects that use TagLib#:

And you, what do you use TagLib# for? Reply here

Contributions

TagLib# is free/open source software, released under the LGPL. We welcome contributions! Please try to match our coding style, and include unit tests with any patches. Patches can be submitted by issuing a Pull Request (Git).