// Clip returns a filter that extracts a clip between begin and begin + duration (in seconds, starting at 0) // Il will try to include a key frame at the beginning, and keeps the same chunks as the origin media func Clip(m *mp4.MP4, begin, duration time.Duration) (ClipInterface, error) { end := begin + duration if begin < 0 { return nil, ErrClipOutside } if begin > m.Duration() { return nil, ErrClipOutside } if end > m.Duration() { end = m.Duration() } if end < 0 { return nil, ErrClipOutside } return &clipFilter{ m: m, end: end, begin: begin, }, nil }
// EncodeFiltered encodes a media to a writer, filtering the media using the specified filter func EncodeFiltered(w io.Writer, m *mp4.MP4, f Filter) error { err := m.Ftyp.Encode(w) if err != nil { return err } err = f.FilterMoov(m.Moov) if err != nil { return err } err = m.Moov.Encode(w) if err != nil { return err } for _, b := range m.Boxes() { if b.Type() != "ftyp" && b.Type() != "moov" && b.Type() != "mdat" { err = b.Encode(w) if err != nil { return err } } } return f.FilterMdat(w, m.Mdat) }