TimecodeKit
TimecodeKit copied to clipboard
AVFoundation Extensions Improvements
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:
- [x] reading timecode track(s) and returning the start timecode (
startTimecode()) - [x] reading all timecode event(s) from all timecode track(s) (
timecodes()) - [x] writing a timecode track using a single origin timecode (
addTimecodeTrack()/replaceTimecodeTrack())
AVAsset Future Feature Roadmap
- [ ] writing complex timelines with more than one timecode event
- [ ] add an overload for
addTimecodeTrack()andreplaceTimecodeTrack()that takes a dictionary of [TimeInterval:Timecode] or something akin to it, keyed by time offsets from movie start with the timecode as values
- [ ] add an overload for
- [ ] 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)
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.