The most robust, precise and complete Swift library for working with SMPTE/EBU timecode. Supports 23 industry-standard 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 often used for video burn-in timecode (BITC), and display in a DAW (Digital Audio Workstation) or video playback/editing applications.
The following timecode rates and formats are supported.
| Film / ATSC / HD | PAL / SECAM / DVB / ATSC | NTSC / ATSC / PAL-M | NTSC Non-Standard | ATSC / HD | 
|---|---|---|---|---|
| 23.976 | 25 | 29.97 | 30 DF | 30 | 
| 24 | 50 | 29.97 DF | 60 DF | 60 | 
| 24.98 | 100 | 59.94 | 120 DF | 90 | 
| 47.952 | 59.94 DF | 120 | ||
| 48 | 119.88 | |||
| 95.904 | 119.88 DF | |||
| 96 | 
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 | 90p | |
| 96p | 119.88p | |
| 120p | 
- 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 CMTimeor 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 RangeorStridebetween two timecode instances
- Conforms to Codable
- Formatters
- A Formatterobject that can format timecode
- An AttributedStringshowing invalid timecode components using alternate attributes (such as red text color)
 
- A 
- SwiftUI Views
- A timecode entry text field
- A timecode string Textview emphasizing invalid timecode components using alternate attributes (such as red text color)
 
- AVAssetvideo file utilities to easily read/write timecode tracks and locate- AVPlayerto timecode locations
- Exhaustive unit tests ensuring accuracy
- 
Add TimecodeKit as a dependency using Swift Package Manager. - In an app project or framework, in Xcode:
Add the package to your target using 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.3.4") 
 
- In an app project or framework, in Xcode:
Add the package to your target using this URL: 
- 
Import the entire library to use all features (core, AV, UI): import TimecodeKitOr import individual targets as-needed: import TimecodeKitCore // core value types import TimecodeKitAV // AVFoundation extensions import TimecodeKitUI // UI components 
See the online documentation for library usage, getting started info, and 1.x → 2.x migration guide.
Also check out the Examples folder for sample code to see TimecodeKit in action.
- Wikipedia: SMPTE Timecode
Coded by a bunch of 🐹 hamsters in a trenchcoat that calls itself @orchetect.
Licensed under the MIT license. See LICENSE for details.
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.
Please do not email maintainers for technical support. Several options are available for issues and questions:
- 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 are welcome. Posting in Discussions first prior to new submitting PRs for features or modifications is encouraged.
