qtffilst

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2024 License: MIT Imports: 15 Imported by: 0

README

qtffilst

QuickTime File Format moov.udta.meta.ilst tag library.

Library Usage

go get github.com/tingtt/qtffilst
import "github.com/tingtt/qtffilst"
Read

Opening is omitted from the examples.

file, _ := os.Open("/path/to/track.m4a")
defer file.Close()

r, err := qtffilst.NewReader(file)
if err != nil {
	return err
}

itemListTag, err := r.Read()
if err != nil {
	return err
}
Read album title
itemListTag, err := r.Read()
if err != nil {
	panic(err)
}
fmt.Println(itemListTag.AlbumC.Text)
Write
file, _ := os.Open("/path/to/track.m4a")
defer file.Close()
tmp1, _ := os.Create("tmp1.m4a")
defer tmp1.Close()
defer func() { os.Remove(tmp1.Name()) } ()
tmp2, _ := os.Create("tmp2.m4a")
defer tmp2.Close()
defer func() { os.Remove(tmp2.Name()) } ()
dest, _ := os.Create("dest.m4a")
defer dest.Close()

rw, err := qtffilst.ParseReadWriter(file)
if err != nil {
	return err
}

// Sample: Set new title and remove subtitle.
err = rw.Write(dest, tmp1, tmp2,
	ilst.ItemList{TitleC: ilst.NewInternationalText("New title")},
	/* delete ilst */ []string{ /* subtitle */ "(c)st3"},
)
if err != nil {
	return err
}

CLI Usage

make build
probe
qtffprobe -f /path/to/music.m4a
edit
# Edit compilation title
qtffilst -f /path/to/music.m4a -o out.m4a -d "(c)nam=Title"

# Remove compilation title
qtffilst -f /path/to/music.m4a -o out.m4a -r "(c)nam"

References

Documentation

Index

Constants

View Source
const (
	ROOT_LEVEL = 0
	ROOT_PATH  = ""
)

Variables

View Source
var ErrBreakWalk = errors.New("break walk")
View Source
var (
	ErrIlstBoxDoesNotExist = errors.New(".moov.udta.meta.ilst does not exists")
)

Functions

func Walk

func Walk(rs io.ReadSeeker, size int64) iter.Seq2[Box, error]

func WalkSupportedBox added in v0.2.0

func WalkSupportedBox(rs io.ReadSeeker, size int64) iter.Seq2[Box, error]

func WalkSupportedWritabelBox added in v0.2.0

func WalkSupportedWritabelBox(rw iter.Seq2[WritableBox, error]) iter.Seq2[WritableBox, error]

func WritableWalk

func WritableWalk(rs io.ReadSeeker, size int64, dest io.Writer) iter.Seq2[WritableBox, error]

Types

type Box

type Box struct {
	Name          string
	Level         int8
	Path          string
	DataPosition  int64
	DataSize      int32
	IsContainable bool
}

type ReadWriter

type ReadWriter interface {
	Reader
	Writer
}

func Open

func Open(trackPath string) (ReadWriter, error)

func ParseReadWriter

func ParseReadWriter(f *os.File) (ReadWriter, error)

type Reader

type Reader interface {
	Read() (ilst.ItemList, error)
}

func NewReader

func NewReader(f fs.File) (Reader, error)

type WritableBox

type WritableBox struct {
	Box
	Write        func([]byte) (size int32, err error)
	InsertNewBox func(name string, data []byte) (size int32, err error)
}

type Writer

type Writer interface {
	Write(dest, tmpDest, tmpDest2 *os.File, tags ilst.ItemList, deleteIds []string) error
}

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL