TimecodeKit icon indicating copy to clipboard operation
TimecodeKit copied to clipboard

AVFoundation Extensions Improvements

Open orchetect opened this issue 1 year ago • 1 comments

Currently, extension methods in TimecodeKit on AVFoundation objects (AVAsset, AVAssetTrack, AVMovie) are somewhat limited as far as reading and writing timecode track information.

1. Improve/Extend Functionality

Multiple timecode events are possible in a single timecode track, especially if a video track contains multiple edits.

The current implementation (as of TimecodeKit 2.0.10) covers the essential functionality of:

AVAsset Future Feature Roadmap

  • [ ] writing complex timelines with more than one timecode event
    • [ ] add an overload for addTimecodeTrack() and replaceTimecodeTrack() that takes a dictionary of [TimeInterval: Timecode] or something akin to it, keyed by time offsets from movie start with the timecode as values
  • [ ] refactor methods like timecodes() → [[Timecode]] to include time ranges
  • [ ] support negative timecode (using negative bit for 32 and 64 bit timecode encoding)
  • [ ] read/write Adobe Premiere XML data chunk in video file header, which contains timecode information
  • [ ] Final Cut Pro embed chunk?
  • [ ] Avid / Pro Tools embed chunk?

2. Improve async/await Support

Numerous AVFoundation methods being used by TimecodeKit in order to read/write AVAsset/AVMovie data are using legacy (deprecated) synchronous methods on AVFoundation objects. It would be ideal to add async variants to TimecodeKit methods to use the newer asynchronous counterparts.

  • [x] Refactor asynchronous completion closure-based methods to async (implemented in TimecodeKit 2.2.0)

orchetect avatar Jun 14 '24 23:06 orchetect

TimecodeKit was fully updated for Swift Concurrency (async/await) as of release 2.2.0.

Further functionality improvements for AVFoundation methods may still come in future releases.

orchetect avatar Oct 10 '24 03:10 orchetect