Skip to content

y5gfunc.source.wobbly.timecodes.v2

v2

V2 version timecode generator.

Classes:

Name Description
TimecodesV2Generator

V2 version timecode generator

TimecodesV2Generator

TimecodesV2Generator(project: ProjectData)

Bases: TimecodeGenerator

V2 version timecode generator

Initialize timecode generator

Parameters:

Name Type Description Default

project

ProjectData

Project data

required

Methods:

Name Description
generate

Generate V2 format timecode

Attributes:

Name Type Description
project
Source code in y5gfunc/source/wobbly/timecodes/base.py
def __init__(self, project: ProjectData):
    """
    Initialize timecode generator

    Args:
        project: Project data
    """
    self.project = project
    self.decimated_by_cycle, self.ranges = get_decimation_info(project)

project instance-attribute

project = project

generate

generate() -> str

Generate V2 format timecode

Returns:

Type Description
str

V2 format timecode string

Source code in y5gfunc/source/wobbly/timecodes/v2.py
def generate(self) -> str:
    """
    Generate V2 format timecode

    Returns:
        V2 format timecode string
    """
    tc = "# timecode format v2\n"

    numerators = [30000, 24000, 18000, 12000, 6000]
    denominator = 1001

    # Calculate total output frames
    total_frames = 0
    for range_info in self.ranges:
        start = range_info.start
        end = range_info.end
        total_frames += (
            frame_number_after_decimation(end - 1, self.decimated_by_cycle)
            - frame_number_after_decimation(start, self.decimated_by_cycle)
            + 1
        )

    current_frame = 0
    current_time_ms = 0.0

    for range_info in self.ranges:
        dropped = range_info.dropped
        fps = numerators[dropped] / denominator
        frame_duration_ms = 1000.0 / fps

        start_frame = frame_number_after_decimation(
            range_info.start, self.decimated_by_cycle
        )
        end_frame = frame_number_after_decimation(
            range_info.end - 1, self.decimated_by_cycle
        )

        for _ in range(start_frame, end_frame + 1):
            tc += f"{current_time_ms:.6f}\n"
            current_time_ms += frame_duration_ms
            current_frame += 1

    return tc