Files
go-mp4tag/README.md
2022-06-14 10:42:04 +01:00

4.4 KiB

go-mp4tag

MP4 tagging library & CLI tagger written in Go.
Windows, Linux, macOS and Android binaries

Library

Setup

go get github.com/Sorrow446/go-mp4tag
import "github.com/Sorrow446/go-mp4tag"

Usage Examples

	tags := &mp4tag.Tags{
		Album: "album",
		AlbumArtist: "album artist",
		Title:       "title",
		TrackNumber: 1,
		TrackTotal:  20,
		Genre: "genre",
		DiskNumber:  3,
		DiskTotal:   10,
		Comment:     "comment",
	}
	err := mp4tag.Write("1.m4a", tags)
	if err != nil {
		panic(err)
	}

Write album, album artist, title, track number, track total, genre, disk number, disk total, and comment tags.

   tags := &mp4tag.Tags{
   	Custom: map[string]string{
   		"CUSTOMFIELD": "custom field",
   		"CUSTOMFIELD2": "custom field 2",
   	},
   	Delete: []string{"cover", "genre"},
   }
   err := mp4tag.Write("1.m4a", tags)
   if err != nil {
   	panic(err)
   }

Write two custom fields named CUSTOMFIELD and CUSTOMFIELD2, delete genre tag, and remove cover.

	coverBytes, err := ioutil.ReadFile("cover.jpg")
	if err != nil {
		panic(err)
	}
	tags := &mp4tag.Tags{
		Cover: coverBytes,
	}
	err = mp4tag.Write("1.m4a", tags)
	if err != nil {
		panic(err)
	}

Write cover from cover.jpg.

Misc

type Tags struct {
	Album       string
	AlbumArtist string
	Artist      string
	Comment     string
	Composer    string
	Cover       []byte
	Custom      map[string]string
	Delete      []string
	DiskNumber  int
	DiskTotal   int
	Genre       string
	Label       string
	Title       string
	TrackNumber int
	TrackTotal  int
	Year        string
}

iTunes-style metadata only.
Delete strings: album, albumartist, artist, comment, composer, cover, disk, genre, label, title, track, year.
Custom tag deletion is not implemented yet.

CLI

go-mp4tag also has a CLI version if you'd like to call it outside of Go.

Usage: mp4tag_x64.exe [--album ALBUM] [--albumArtist ALBUMARTIST] [--artist ARTIST] [--comment COMMENT] [--composer COMPOSER] [--cover COVER] [--custom CUSTOM] [--delete DELETE] [--diskNumber DISKNUMBER] [--diskTotal DISKTOTAL] [--genre GENRE] [--label LABEL] [--title TITLE] [--trackNumber TRACKNUMBER] [--trackTotal TRACKTOTAL] [--year YEAR] FILEPATH

Positional arguments:
  FILEPATH               Path of file to write to.

Options:
  --album ALBUM          Write album tag.
  --albumArtist ALBUMARTIST
                         Write album artist tag.
  --artist ARTIST        Write artist tag.
  --comment COMMENT      Write comment tag.
  --composer COMPOSER    Write composer tag.
  --cover COVER          Path of cover to write. JPEG is recommended.
  --custom CUSTOM        Write custom tags. Multiple tags with the same field name can be written.
                         Example: "--custom MYCUSTOMFIELD1=value1 MYCUSTOMFIELD2=value2"
  --delete DELETE, -d DELETE
                         Tags to delete.
                         Options: album, albumartist, artist, comment, composer, cover, disk, genre, label, title, track, year.
                         Example: "-d album albumartist"
  --diskNumber DISKNUMBER
                         Write disk number tag.
  --diskTotal DISKTOTAL
                         Write disk total tag. Can't be written without disk number tag.
  --genre GENRE          Write genre tag.
  --label LABEL          Write label tag.
  --title TITLE          Write title tag.
  --trackNumber TRACKNUMBER
                         Write track number tag.
  --trackTotal TRACKTOTAL
                         Write track total tag. Can't be written without track number tag.
  --year YEAR            Write year tag.
  --help, -h             display this help and exit

You must use double quotes for values with spaces in.

mp4tag_x64.exe 1.m4a --artist artist --albumArtist "album artist"
Write artist and album artist tags.

mp4tag_x64.exe 1.m4a --cover cover.jpg
Write cover from cover.jpg

mp4tag_x64.exe 1.m4a --custom "MY CUSTOM FIELD WITH SPACES"=value1 MYCUSTOMFIELD1="value with spaces" -d cover genre"
Write two custom fields named MY CUSTOM FIELD WITH SPACES, and MYCUSTOMFIELD1, delete genre tag, and remove cover.

Thank you

go-mp4tag relies heavily on abema's go-mp4 library.

Disclaimer

Although go-mp4tag has been thoroughly tested, I will not be responsible for the very tiny chance of any corruption to your MP4 files.