View Source Vtc.Framerate (vtc v0.8.0)

The rate at which a video file frames are played back.

Framerate is measured in frames-per-second (24/1 = 24 frames-per-second).

struct-fields

Struct Fields

  • playback: The rational representation of the real-world playback speed as a fraction in frames-per-second.

  • ntsc: Atom representing which, if any, NTSC convention this framerate adheres to.

playback-vs-timebase

Playback vs Timebase

For NTSC timecode, the timebase always runs at a whole number of frames-per-second, which the timecode pretends in the playback speed of the Media. This makes timecode string calculations clean and accurate, rather than having partial frames at second and minute boundaries.

So for footage shot at 23.98 NTSC, Timecode is caculated as-if the footage were running at 24fps, which Vtc calls the 'timebase'.

Link to this section Summary

Types

Options for new/2 and new!/2.

Enum of Ntsc types.

Type returned by new/2

t()

Type of Framerate

Parse

Creates a new Framerate with a playback speed or timebase.

As new/2 but raises an error instead.

Inspect

Returns true if the value represents and NTSC framerate.

The rational representation of the timecode's 'logical speed'.

Link to this section Types

@type new_opts() :: [ntsc: ntsc(), invert?: boolean()]

Options for new/2 and new!/2.

@type ntsc() :: :non_drop | :drop | nil

Enum of Ntsc types.

values

Values

  • :non_drop A non-drop NTSC value.
  • :drop A drop-frame ntsc value.
  • nil: Not an NTSC value

For more information on NTSC standards and framerate conventions, see Frame.io's blogpost on the subject.

@type parse_result() :: {:ok, t()} | {:error, Vtc.Framerate.ParseError.t()}

Type returned by new/2

@type t() :: %Vtc.Framerate{ntsc: ntsc(), playback: Ratio.t()}

Type of Framerate

Link to this section Parse

@spec new(Ratio.t() | number() | String.t(), new_opts()) :: parse_result()

Creates a new Framerate with a playback speed or timebase.

arguments

Arguments

  • rate: Either the playback rate or timebase. For NTSC framerates, the value will be rounded to the nearest correct value.

options

Options

  • ntsc: Atom representing the which (or whether an) NTSC standard is being used. Default: :non-drop.

  • invert?: If true, the resulting rational rate value will be flipped so that 1/24 becomes 24/1. This can be helpeful when you are parsing a rate given in seconds-per-frame rather than frames-per-second. Default: false.

Float Precision

Only floats representing a whole number can be passed for non-NTSC rates, as there is no fully precise way to convert fractional floats to rational values.

@spec new!(Ratio.t() | number() | String.t(), new_opts()) :: t()

As new/2 but raises an error instead.

Link to this section Inspect

@spec ntsc?(t()) :: boolean()

Returns true if the value represents and NTSC framerate.

Will return true on a Framerate with an :ntsc value of :non_drop and :drop.

@spec timebase(t()) :: Ratio.t()

The rational representation of the timecode's 'logical speed'.

Returned value is in frames-per-second.