Timecode
Timecode is good.
- class timecode.Timecode(timecode: str | int | Timecode, mode: CountingMode | None = None, rate: int | None = None)
Timecode representing a given frame number and rate
Specifying The Counting Mode
A CountingMode can be set during the creation of a Timecode object by setting the mode parameter.
NonDropFrame and DropFrame counting modes are available in the timecode.modes subpackage.
Timecode will default to NonDropFrame mode, unless otherwise specified.
>>> from timecode import Timecode
>>> from timecode.modes import DropFrame
..
>>> Timecode(86400, mode=DropFrame())
<Timecode 00;48;02;28 @ 30 DF>
The default counting mode can be set program-wide by assigning a CountingMode class to timecode.Timecode.DEFAULT_MODE
Note
Also included in the timecode.modes subpackage is an abstract class CountingMode, which can be subclassed to make your
own weird little counting modes. Give it a shot!
See also: Counting Modes
Specifying The Rate
Timecode will default to the DEFAULT_RATE set by the CountingMode. Or, it
may be explicitly set with the rate parameter.
>>> from timecode import Timecode
..
>>> Timecode("01:00:00:00", rate=30)
<Timecode 01:00:00:00 @ 30 NDF>
Warning
The CountingMode will validate the specified rate and may throw an exception if the rate is inappropriate. For example,
DropFrame only accepts frame rates which are multiples of 30.
Math
So you got all these timecodes goin’, but what do you do with them? Well I guess you can add them together:
>>> # Two Timecodes
>>> Timecode("01:00:01:00") + Timecode("02:03")
<Timecode 01:00:03:03 @ 24 NDF>
..
>>> # A Timecode and some frames
>>> Timecode("59:59:00") + 24
<Timecode 01:00:00:00 @ 24 NDF>
Oh! You can resample() from one kind to another:
>>> from timecode import Timecode
>>> from timecode.modes import DropFrame, NonDropFrame
..
>>> Timecode("00:48:20:12", mode=NonDropFrame()).resample(rate=30)
<Timecode 00:48:20:15 @ 30 NDF>
..
>>> Timecode("00:48:20:15", rate=30, mode=NonDropFrame()).resample(mode=DropFrame())
<Timecode 00;48;23;13 (88) @ 30 DF>
More Info
See timecode.Timecode in the API Documentation.