Skip to content

The definitive SMPTE timecode library for Swift.

License

Notifications You must be signed in to change notification settings

arshiacont/TimecodeKit

 
 

Repository files navigation

TimecodeKit

TimecodeKit

CI Build Status Platforms - macOS 10.12 | iOS 9 | tvOS 9 | watchOS 2 | visionOS 1 Swift 5.5-5.9 Xcode 13-15 License: MIT

The most robust, precise and complete Swift library for working with SMPTE/EBU timecode. Supports 22 industry timecode frame rates, with a suite of conversions, calculations and integrations with Apple AV frameworks.

Timecode is a broadcast and post-production standard for addressing video frames. It is used for video burn-in timecode (BITC), and display in a DAW (Digital Audio Workstation) or video playback/editing applications.

Note: See the TimecodeKit 1.x → 2.x Migration Guide if you are moving from TimecodeKit 1.x.

Supported Timecode Frame Rates

The following timecode rates and formats are supported.

Film / ATSC / HD PAL / SECAM / DVB / ATSC NTSC / ATSC / PAL-M NTSC Non-Standard ATSC
23.976 25 29.97 30 DF 30
24 50 29.97 DF 60 DF 60
24.98 100 59.94 120 DF 120
47.952 59.94 DF
48 119.88
95.904 119.88 DF
96

Supported Video Frame Rates

The following video frame rates are supported. (Video rates)

Film / HD PAL NTSC
23.98p 25p / 25i 29.97p / 29.97i
24p 50p / 50i 30p
47.95p 100p 59.94p / 59.94i
48p 60p / 60i
95.9p 119.88p
96p 120p

Core Features

  • Convert timecode between:
    • timecode display string
    • total elapsed frame count
    • real wall-clock time
    • elapsed audio samples at any audio sample rate
    • rational time notation (such as CMTime or Final Cut Pro XML and AAF encoding)
    • feet + frames
  • Convert timecode and/or frame rate to a rational fraction, and vice-versa (including CMTime)
  • Support for Days as a timecode component (some DAWs including Cubase support > 24 hour timecode)
  • Support for Subframes
  • Math operations: add, subtract, multiply, divide
  • Granular timecode validation
  • Form a Range or Stride between two timecodes
  • Conforms to Codable
  • A Formatter object that can format timecode
  • A NSAttributedString showing invalid timecode components using alternate attributes (such as red text color)
  • A SwiftUI Text object showing invalid timecode components using alternate attributes (such as red text color)
  • AVAsset video file utilities to easily read/write timecode tracks and locate AVPlayer to timecode locations
  • Exhaustive unit tests ensuring accuracy

Installation

Swift Package Manager (SPM)

  1. Add TimecodeKit as a dependency using Swift Package Manager.
    • In an app project or framework, in Xcode:

      • Select the menu: File → Swift Packages → Add Package Dependency...
      • Enter this URL: https://github.com/orchetect/TimecodeKit
    • In a Swift Package, add it to the Package.swift dependencies:

      .package(url: "https://github.com/orchetect/TimecodeKit", from: "2.0.0")
  2. Import the library:
    import TimecodeKit

Documentation

See the online documentation for library usage, getting started info, and 1.x → 2.x migration guide.

References

Author

Coded by a bunch of 🐹 hamsters in a trenchcoat that calls itself @orchetect.

License

Licensed under the MIT license. See LICENSE for details.

Sponsoring

If you enjoy using TimecodeKit and want to contribute to open-source financially, GitHub sponsorship is much appreciated. Feedback and code contributions are also welcome.

Community & Support

Please do not email maintainers for technical support. Several options are available for questions and feature ideas:

  • Questions and feature ideas can be posted to Discussions.
  • If an issue is a verifiable bug with reproducible steps it may be posted in Issues.

Contributions

Contributions are welcome. Feel free to post in Discussions first before submitting a PR.

About

The definitive SMPTE timecode library for Swift.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%