TimecodeKit

The definitive SMPTE timecode library for Swift.

MIT License

Stars
87
Committers
2

Bot releases are hidden (Show)

TimecodeKit - 2.2.0 Latest Release

Published by orchetect 24 days ago

[!IMPORTANT]
This bumps the minimum requirement for AVFoundation methods to macOS 12, iOS 15, tvOS 15, watchOS 8.
The requirements are only bumped for AVFoundation-specific methods. The core TimecodeKit functionality requirements remain the same as before.

Improvements

  • Modernized the library: Migrated all AVAsset and AVAssetTrack methods to Swift Concurrency

Added

  • Timecode.StringFormat: Added Identifiable and Sendable conformances
  • Timecode: Added UTType static constants
  • Timecode: Added Transferable conformance (conditionally available on supported platform versions)
  • Timecode: Added NSItemProvider encoding and decoding methods

Maintenance

  • Updated docs with fixes and usage guide for the newly-added UTType/Transferable/NSItemProvider features
  • Improved unit test performance for some slow tests
TimecodeKit - 2.1.0

Published by orchetect 29 days ago

Added

  • Fraction: Added stringValue property

Improvements

  • Added Identifiable conformance to all relevant types
TimecodeKit - 2.0.11

Published by orchetect 4 months ago

Improvements

  • Improved AVAsset add/replace timecode track reliability
  • Fixed rare compiler error on build pipelines using old minimum platform versions
TimecodeKit - 2.0.10

Published by orchetect 8 months ago

Added

  • Fraction: Added * and / math operators between two instances (#71)
TimecodeKit - 2.0.9

Published by orchetect 10 months ago

Added

  • Timecode: Added base parameter to converted(to:) instance method (to convert to a new sub-frames base if needed)
TimecodeKit - 2.0.8

Published by orchetect 10 months ago

Added

  • TimecodeInterval: Added init(realTime: TimeInterval)
  • Fraction: Added Sendable conformance
  • Timecode.Properties: Added Sendable conformance
  • Timecode.UpperLimit: Added Sendable conformance

Improvements

  • Fraction: Changed Equatable behavior to compare reduced values and not literal values
  • Fraction: init(fcpxmlString:) no longer reduces fraction implicitly
  • Fraction: fcpxmlStringValue property no longer reduces fraction implicitly
TimecodeKit - 2.0.7

Published by orchetect 11 months ago

  • Fraction: Added zero static constructor
  • Fraction: Added Comparable conformance
  • Fraction: Added + and - math operators between instances
TimecodeKit - 2.0.6

Published by orchetect 11 months ago

  • Fraction: Fixed bug where fraction might not normalize
  • Fraction: Improved conversion from Double
  • Fraction: Added init?(double:decimalPrecision:)
  • Fraction: Added decimalValue property
  • Fraction: Added isWholeInteger property
  • Fraction: Added init?(fcpxmlString:) and fcpxmlStringValue property
    This can init from and produce strings formatted like "60s" or "1125/500s"
  • Updated unit tests
TimecodeKit - 2.0.5

Published by orchetect 11 months ago

  • Fixed bug where performing math between two Timecode instances with different frame rates would produce incorrect results
  • Timecode description now includes subframes for better debugging
TimecodeKit - 2.0.4

Published by orchetect 12 months ago

  • Added Sendable conformance to all concrete types
TimecodeKit - 2.0.3

Published by orchetect about 1 year ago

Fixes

  • Timecode: Fixed potential overflow/underflow crash when raw component value(s) were very large
TimecodeKit - 2.0.2

Published by orchetect about 1 year ago

  • Resolved an issue that could prevent app archival
TimecodeKit - 2.0.1

Published by orchetect about 1 year ago

  • Hotfix release for regressions.
TimecodeKit - 2.0.0

Published by orchetect about 1 year ago

TimecodeKit 2.0.0

  • New cleaner, more consistent API
  • New DocC documentation
    • Browsable online
    • Buildable in Xcode's IDE to browse in Xcode's documentation browser
  • Minor improvements and fixes

For previous users of TimecodeKit 1.x, see the 2.x Migration Guide for details.

TimecodeKit - 1.6.13

Published by orchetect about 1 year ago

Fixes

  • Fixed visionOS 1.0 build

TimecodeKit 2: Coming Soon

Note: This is the last release of TimecodeKit 1.x before the forthcoming TimecodeKit 2 which maintains the same functionality but brings improved API and ease-of-use going forward.

TimecodeKit - 1.6.12

Published by orchetect over 1 year ago

Fixes

  • Fixed visionOS 1.0 beta (xrOS) build
TimecodeKit - 1.6.11

Published by orchetect over 1 year ago

Improvements

  • AVMutableMovie: add and replace Timecode Track methods allow omitting duration parameter to auto-detect video duration (#59)
TimecodeKit - 1.6.10

Published by orchetect over 1 year ago

  • AVAssetTrack: Added durationTimecode() method
  • CMTimeRange: Added timecodeRange() method
TimecodeKit - 1.6.9

Published by orchetect over 1 year ago

New

  • Added Feet+Frames conversion support (Avid / Pro Tools 35mm 4-perf standard)

    • New FeetAndFrames struct
    • Added related Timecode init and feetAndFramesValue property
  • Timecode / TimecodeFrameRate: Added 96 fps & 95.904 fps (96/1.001) (#57)

  • VideoFrameRate: Added 96p & 95.9p (#57)

  • VideoFrameRate: Added 59.94i

Improvements

  • Timecode.SubFramesBase: Added Identifiable conformance
  • VideoFrameRate: Added strict: Bool = false parameter to init(fps:interlaced:)

Fixes

  • VideoFrameRate: Fixed typo in _59_94p.stringValue string value
TimecodeKit - 1.6.8

Published by orchetect over 1 year ago

AVFoundation Related

It is now possible to fully read, mutate, and create timecode tracks in supported video file formats (.mov, .mp4).

  • AVAsset: Improved resiliency of reading timecode
  • AVMutableMovie
    • Added addTimecodeTrack(startTimecode:duration:extensions:fileType:)
    • Added replaceTimecodeTrack(startTimecode:duration:extensions:fileType:)
  • Timecode: Added cmFormatDescription(extensions:)

In a future release, some of the AVAsset methods will be improved to handle AVAsset timecode tracks with multiple samples (ie: not just a start timecode and total duration, but subranges as well if the track contains edit segments). For the time being, all origin timecodes are returned for timecode tracks without ranges. The first of which is the start timecode which is most important.

Timecode Comparison and Sorting

  • Timecode: Added compare(to:timelineStart:) method to return ComparisonResult
  • Collection of Timecode: Added mutating sort(ascending:timelineStart:)
  • Collection of Timecode: Added sorted(ascending:timelineStart:) -> [Timecode]
  • Collection of Timecode: Added isSorted(ascending:timelineStart:) -> Bool
  • Added new TimecodeSortComparator

Misc

  • Timecode: Added isZero property
  • Timecode.FrameCount: Added isZero property
  • Timecode.FrameCount.Value: Added isZero property
  • Readme updated
  • Unit tests updated