The most robust, precise and complete Swift library for working with SMPTE/EBU timecode. Supports 23 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.
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
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
orStride
between two timecode instances - Conforms to
Codable
- Formatters
- A
Formatter
object that can format timecode - An
AttributedString
showing invalid timecode components using alternate attributes (such as red text color)
- A
- SwiftUI Views
- A timecode entry text field
- A timecode string
Text
view emphasizing invalid timecode components using alternate attributes (such as red text color)
AVAsset
video file utilities to easily read/write timecode tracks and locateAVPlayer
to 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.1")
- In an app project or framework, in Xcode:
Add the package to your target using this URL:
- Import the library:
import TimecodeKit
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 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 are welcome. Feel free to post in Discussions first before submitting a PR.