mdb.objects

The OMF/Avid class vocabulary. Laid out as a package, mirroring pyavb’s module layout: base, attributes, locators, descriptors, misc, components, trackgroups, effects, parameters, trackers, media. Everything is re-exported from mdb.objects (and from mdb itself), so mdb.Mob and mdb.objects.Mob are the same class.

The OMF / Avid class vocabulary.

The property tables in the modules below were derived by census over the two reference samples – every property name the files’ own schema registry declares, with the type each declares for it – then named against the OMF Interchange 2.1 specification and pyavb’s equivalent vocabulary for the AVB container. Where the two disagree, the file wins and the divergence is noted in the class’s docstring.

Many of these classes never appear in the reference samples, and that is the expected result rather than a gap: an MDB indexes media files, so it carries mobs, descriptors and locators in quantity, and carries effects, markers and embedded essence only if something unusual has happened. They are defined anyway because the samples’ schema declares them – 759 property names across roughly a hundred class prefixes – so a file that does use one reads as a typed object rather than as a bag of names.

The modules mirror pyavb’s layout:

base

OMFObject, HEAD

attributes

ATTR / ATTB – the Avid attribute tree

locators

WINL, MSML and the rest of the path classes

descriptors

MDES and every essence descriptor

misc

links, markers, list containers, CLSD

components

CPNT and its clips

trackgroups

TRKG, MOBJ, TRAK, SLCT

effects

TKFX, TNFX, the time warps

parameters

PRIT, PRLS, FXPS and friends

trackers

the TKMN tracker family

media

embedded essence, which an MDB never carries

Everything is re-exported here, so from mdb.objects import Mob keeps working and import mdb; mdb.Mob does too.

Import order matters only in that each module imports the ones above it in the table; there are no cycles.

base

The two objects everything else hangs off: OMFObject and HEAD.

HEAD is unusual – it shares object 1 with Bento’s own container object, so the OMF layer and the container layer describe the same TOC entries from two directions.

class OMFObject(root, object_id, entries)[source]

Bases: MDBObject

Common ancestry: every OMF object carries a class tag and a version.

AMEVersion is declared for nearly every class in the schema but written for none of them in the reference samples; it is bound here once rather than repeated on ninety subclasses, since an absent property simply reads as None.

propertydefs: Sequence[PropertyDef] = [<PropertyDef obj_id -> OMFI:ObjID>, <PropertyDef minor_version -> OMFI:MinorVersion>]
class Header(root, object_id, entries)[source]

Bases: OMFObject

The OMFi HEAD, which shares object 1 with Bento’s container object.

Its four aggregate indexes are written at close time, which is why they sit in their own region of the heap starting exactly at container_offset_at_close.

class_id: Optional[str] = 'HEAD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef byte_order -> OMFI:ByteOrder>, <PropertyDef version -> OMFI:Version>, <PropertyDef last_modified -> OMFI:LastModified>, <PropertyDef object_spine -> OMFI:ObjectSpine>, <PropertyDef source_mobs -> OMFI:SourceMobs>, <PropertyDef composition_mobs -> OMFI:CompositionMobs>, <PropertyDef class_dictionary -> OMFI:ClassDictionary>, <PropertyDef num_del_mobs -> OMFI:NumDelMobs>, <PropertyDef del_blobs_size -> OMFI:DelBlobsSize>, <PropertyDef container_offset_at_close -> OMFI:ContainerOffsetAtClose>, <PropertyDef toc_offset_at_close -> OMFI:TOCOffsetAtClose>, <PropertyDef author -> OMFI:Author>, <PropertyDef copyright -> OMFI:Copyright>, <PropertyDef date -> OMFI:Date>, <PropertyDef character_set -> OMFI:CharacterSet>, <PropertyDef media_data -> OMFI:MediaData>, <PropertyDef external_files -> OMFI:ExternalFiles>, <PropertyDef blobs -> OMFI:Blobs>, <PropertyDef attributes -> OMFI:Attributes>]
mobs()[source]

Top-level mobs, from ObjectSpine.

Return type:

List[Mob]

attributes

ATTR / ATTB – where most Avid-specific data lives.

Attributes nest: an ATTB of kind object can point at another ATTR, at a locator, or at a bin link, so these form trees exactly as they do in AVB bins. Bin membership, project name and the source-file metadata Media Composer shows in bin columns all arrive through here rather than through a typed property.

class AttributeList(root, object_id, entries)[source]

Bases: OMFObject

ATTR – an ordered list of ATTB name/value pairs.

Attributes nest: an ATTB of kind object can point at another ATTR (or at a locator), so these form trees exactly as they do in AVB bins.

class_id: Optional[str] = 'ATTR'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef attr_refs -> OMFI:ATTR:AttrRefs>]
attributes()[source]
Return type:

List[Attribute]

get_attribute(name, default=None)[source]
Return type:

Any

to_attribute_dict(recursive=False, _depth=0)[source]

Flatten to {name: value}; later duplicates win.

With recursive, nested ATTR values become nested dicts. Depth is capped so a cyclic attribute tree cannot hang the caller.

Return type:

Dict[str, Any]

class Attribute(root, object_id, entries)[source]

Bases: OMFObject

ATTB – one Avid attribute.

kind says which value property is populated: 1 int, 2 string, 3 object reference, 4 “bob” blob (BobData plus BobSize). value picks the right one for you.

class_id: Optional[str] = 'ATTB'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef kind -> OMFI:ATTB:Kind>, <PropertyDef name -> OMFI:ATTB:Name>, <PropertyDef int_value -> OMFI:ATTB:IntAttribute>, <PropertyDef string_value -> OMFI:ATTB:StringAttribute>, <PropertyDef object_value -> OMFI:ATTB:ObjAttribute>, <PropertyDef bob_data -> OMFI:ATTB:BobData>, <PropertyDef bob_size -> OMFI:ATTB:BobSize>]
property value: Any

The populated value, chosen by kind.

Falls back to whichever value property is present when the kind is unrecognised, so a new kind still yields data.

locators

Locators – how an object says where something lives.

Two families share one base. File locators (WINL, DOSL, MACL, UNXL) name a file; directory locators (DL, MACDL, UNXDL) name the folder around it. TXTL is a free-text locator, and MSML – Avid’s media-stream link – is a TXTL subclass, which is why a descriptor’s MDES:Locator array mixes paths and volume names in one list.

Each concrete class also declares its own PathName alongside the shared FL:PathName. Media Composer writes the shared one; the per-class spellings are in the schema of both reference samples and are bound here so a file that uses them still reads.

class Locator(root, object_id, entries)[source]

Bases: OMFObject

Base for the locator classes: a path, in one or more spellings.

Avid writes both a legacy code-page FL:PathName and a FL:PathNameUTF8 twin, and a locator can carry more than one of either (an empty one plus the real path is common), so all values are exposed.

Subclasses may add their own path spelling – UNXL:PathName, DOSL:PathName, DL:PathNameUTF8. path and all_paths() consider every path-shaped property the class declares, UTF-8 first, so a subclass gets the right answer without overriding anything.

path_properties = ('OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef path_name -> OMFI:FL:PathName>, <PropertyDef path_name_utf8 -> OMFI:FL:PathNameUTF8>, <PropertyDef path_name_posix -> OMFI:FL:POSIXPathName>]
property path: str | None

the last non-empty UTF-8 value, else legacy.

Type:

The best available path

all_paths()[source]

Every distinct non-empty path spelling this locator carries.

Return type:

List[str]

class WindowsLocator(root, object_id, entries)[source]

Bases: Locator

WINL – a Windows path, usually UNC.

class_id: Optional[str] = 'WINL'

OMF 4CC; None on abstract bases

class DOSLocator(root, object_id, entries)[source]

Bases: Locator

DOSL – a DOS path. Declared in the schema; not seen in the samples.

class_id: Optional[str] = 'DOSL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:DOSL:PathName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef dos_path_name -> OMFI:DOSL:PathName>]
class MacLocator(root, object_id, entries)[source]

Bases: Locator

MACL – a Macintosh path.

class_id: Optional[str] = 'MACL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:MACL:FileName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef mac_file_name -> OMFI:MACL:FileName>, <PropertyDef vref -> OMFI:MACL:VRef>, <PropertyDef dir_id -> OMFI:MACL:DirID>, <PropertyDef sds_address -> OMFI:MACL:SDSAddress>, <PropertyDef sds_mob_id -> OMFI:MACL:SDSMobID>]
class UnixLocator(root, object_id, entries)[source]

Bases: Locator

UNXL – a Unix path.

class_id: Optional[str] = 'UNXL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:UNXL:PathName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef unix_path_name -> OMFI:UNXL:PathName>]
class TextLocator(root, object_id, entries)[source]

Bases: Locator

TXTL – a free-text locator; parent class of MSML.

class_id: Optional[str] = 'TXTL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:TXTL:Name', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef text_name -> OMFI:TXTL:Name>]

Bases: TextLocator

MSML – mob to volume: which drive the media was last seen on.

class_id: Optional[str] = 'MSML'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:MSML:MobID>, <PropertyDef last_known_volume -> OMFI:MSML:LastKnownVolume>, <PropertyDef last_known_volume_utf8 -> OMFI:MSML:LastKnownVolumeUTF8>, <PropertyDef domain_type -> OMFI:MSML:DomainType>]
property volume: str | None
class DirectoryLocator(root, object_id, entries)[source]

Bases: Locator

DL – a directory rather than a file.

Declared in the schema of both samples and written in neither. It shares the FL-style path pair, so path behaves the same.

class_id: Optional[str] = 'DL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:DL:PathNameUTF8', 'OMFI:DL:PathName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef dir_path_name -> OMFI:DL:PathName>, <PropertyDef dir_path_name_utf8 -> OMFI:DL:PathNameUTF8>]
class MacDirectoryLocator(root, object_id, entries)[source]

Bases: DirectoryLocator

MACDL – a classic Mac OS directory, addressed by volume reference and directory ID rather than by path.

class_id: Optional[str] = 'MACDL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:MACDL:FileName', 'OMFI:DL:PathNameUTF8', 'OMFI:DL:PathName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef vref -> OMFI:MACDL:VRef>, <PropertyDef dir_id -> OMFI:MACDL:DirID>, <PropertyDef file_name -> OMFI:MACDL:FileName>]
class UnixDirectoryLocator(root, object_id, entries)[source]

Bases: DirectoryLocator

UNXDL – a Unix directory.

class_id: Optional[str] = 'UNXDL'

OMF 4CC; None on abstract bases

path_properties = ('OMFI:UNXDL:PathName', 'OMFI:DL:PathNameUTF8', 'OMFI:DL:PathName', 'OMFI:FL:PathNameUTF8', 'OMFI:FL:PathName', 'OMFI:FL:POSIXPathName')

OMF property names, most preferred first, that this class may spell a path in. Subclasses prepend their own; the shared FL pair is the fallback every locator understands.

propertydefs: Sequence[PropertyDef] = [<PropertyDef unix_dir_path -> OMFI:UNXDL:PathName>]
class DomainLocator(root, object_id, entries)[source]

Bases: TextLocator

DOML – a locator naming a domain rather than a filesystem.

The class dictionary of both samples declares DOML -> TXTL; the only property the schema carries for it is the near-universal AMEVersion, so what a domain name looks like here is unverified.

class_id: Optional[str] = 'DOML'

OMF 4CC; None on abstract bases

class AssetManagerLocator(root, object_id, entries)[source]

Bases: OMFObject

OMML – an asset-management reference: which system owns this media.

Written by Interplay and similar asset managers. Absent from both reference samples; the two properties below are the whole of what the schema declares.

class_id: Optional[str] = 'OMML'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef asset_id -> OMFI:OMML:AssetID>, <PropertyDef asset_manager -> OMFI:OMML:AssetManager>]

descriptors

MDES and its descendants – what the essence is.

A mob’s PhysicalMedia points here, and this is where a troubleshooting session usually ends up: codec, raster, sample rate, and the locators that say where the file was last seen.

The hierarchy below follows the class dictionary written in the reference samples themselves (MDTP -> MDES, DIDD -> MDFL, CDCI -> DIDD, JPED -> CDCI, MPGI -> CDCI), not the OMF specification, where they differ. Classes the samples’ schema declares but never instantiates are included: they read as typed objects the moment a file uses them, and as nothing at all until then.

class MediaDescriptor(root, object_id, entries)[source]

Bases: OMFObject

MDES – the base “physical media” descriptor.

MDES:Locator is an ObjRefArray, not a single reference: one descriptor can name several locators.

class_id: Optional[str] = 'MDES'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef locator_refs -> OMFI:MDES:Locator>, <PropertyDef mob_kind -> OMFI:MDES:MobKind>, <PropertyDef intermediate -> OMFI:MDES:MC:Intermediate>, <PropertyDef acf_uid -> OMFI:AMDL:acfUID>, <PropertyDef acf_wchar -> OMFI:AMDL:acfWChar>, <PropertyDef amdl_attributes -> OMFI:AMDL:Attributes>, <PropertyDef version -> OMFI:MDES:Version>]
locators()[source]
Return type:

List[Locator]

summary()[source]

One line describing the essence, for listings.

Return type:

str

class TapeDescriptor(root, object_id, entries)[source]

Bases: MediaDescriptor

MDTP – media that lives on a videotape.

The class dictionary of both samples declares MDTP -> MDES. A tape descriptor carries no path, because there is no file: identity is the tape name on the mob and the timecode on its track. Absent from both samples, whose media was imported and transcoded rather than captured.

class_id: Optional[str] = 'MDTP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef cframe -> OMFI:MDTP:CFrame>]
summary()[source]

One line describing the essence, for listings.

Return type:

str

class FilmDescriptor(root, object_id, entries)[source]

Bases: MediaDescriptor

MDFM – media that lives on film stock.

Declared in the schema of both samples; the schema gives it no properties of its own beyond the near-universal AMEVersion, so everything useful sits on MDES and on the ECCP edge-code track.

class_id: Optional[str] = 'MDFM'

OMF 4CC; None on abstract bases

summary()[source]

One line describing the essence, for listings.

Return type:

str

class NagraDescriptor(root, object_id, entries)[source]

Bases: MediaDescriptor

MDNG – audio on a Nagra field recorder.

Declared in the schema of both samples with no properties of its own.

class_id: Optional[str] = 'MDNG'

OMF 4CC; None on abstract bases

summary()[source]

One line describing the essence, for listings.

Return type:

str

class FileDescriptor(root, object_id, entries)[source]

Bases: MediaDescriptor

MDFL – media stored in a file: length, rate, and where it starts.

class_id: Optional[str] = 'MDFL'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef length -> OMFI:MDFL:Length>, <PropertyDef sample_rate -> OMFI:MDFL:SampleRate>, <PropertyDef data_offset -> OMFI:MDFL:dataOffset>, <PropertyDef is_omfi -> OMFI:MDFL:IsOMFI>, <PropertyDef version -> OMFI:MDFL:Version>]
summary()[source]

One line describing the essence, for listings.

Return type:

str

class MultiDescriptor(root, object_id, entries)[source]

Bases: FileDescriptor

MULD – one file holding several essence streams.

Used where a single media file carries, say, video plus interleaved audio: descriptors holds one child descriptor per stream. Absent from both reference samples, where Avid writes one file per stream.

class_id: Optional[str] = 'MULD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef count -> OMFI:MULD:Count>, <PropertyDef descriptors -> OMFI:MULD:Descriptor>, <PropertyDef descriptor_ids -> OMFI:MULD:DescriptorIDs>]
children()[source]

The per-stream descriptors, resolved.

Return type:

List[MediaDescriptor]

summary()[source]

One line describing the essence, for listings.

Return type:

str

class DigitalImageDescriptor(root, object_id, entries)[source]

Bases: FileDescriptor

DIDD – picture essence geometry and coding.

Avid writes the full OMF raster model (stored / sampled / display / valid rectangles, each as a numerator-denominator pair) plus its own DIDCompressMethod 4CC and the AAF-style EssenceCompression label.

class_id: Optional[str] = 'DIDD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef stored_width -> OMFI:DIDD:StoredWidth>, <PropertyDef stored_height -> OMFI:DIDD:StoredHeight>, <PropertyDef sampled_width -> OMFI:DIDD:SampledWidth>, <PropertyDef sampled_height -> OMFI:DIDD:SampledHeight>, <PropertyDef sampled_x_offset -> OMFI:DIDD:SampledXOffset>, <PropertyDef sampled_y_offset -> OMFI:DIDD:SampledYOffset>, <PropertyDef display_width -> OMFI:DIDD:DisplayWidth>, <PropertyDef display_height -> OMFI:DIDD:DisplayHeight>, <PropertyDef display_x_offset -> OMFI:DIDD:DisplayXOffset>, <PropertyDef display_y_offset -> OMFI:DIDD:DisplayYOffset>, <PropertyDef frame_layout -> OMFI:DIDD:FrameLayout>, <PropertyDef image_aspect_ratio -> OMFI:DIDD:ImageAspectRatio>, <PropertyDef video_line_map -> OMFI:DIDD:VideoLineMap>, <PropertyDef alpha_transparency -> OMFI:DIDD:AlphaTransparency>, <PropertyDef compression -> OMFI:DIDD:Compression>, <PropertyDef compress_method -> OMFI:DIDD:DIDCompressMethod>, <PropertyDef essence_compression -> OMFI:DIDD:EssenceCompression>, <PropertyDef coding_equations -> OMFI:DIDD:CodingEquations>, <PropertyDef color_primaries -> OMFI:DIDD:ColorPrimaries>, <PropertyDef transfer_characteristic -> OMFI:DIDD:TransferCharacteristic>, <PropertyDef resolution_id -> OMFI:DIDD:DIDResolutionID>, <PropertyDef image_size -> OMFI:DIDD:DIDImageSize>, <PropertyDef frame_sample_size -> OMFI:DIDD:FrameSampleSize>, <PropertyDef first_frame_offset -> OMFI:DIDD:FirstFrameOffset>, <PropertyDef frame_index_byte_order -> OMFI:DIDD:FrameIndexByteOrder>, <PropertyDef offset_to_rle_frame_indexes -> OMFI:DIDD:OffsetToRLEFrameIndexes>, <PropertyDef offset_to_frame_indexes -> OMFI:JPED:OffsetToFrameIndexes>, <PropertyDef client_fill_start -> OMFI:DIDD:ClientFillStart>, <PropertyDef client_fill_end -> OMFI:DIDD:ClientFillEnd>, <PropertyDef image_alignment_factor -> OMFI:DIDD:ImageAlignmentFactor>, <PropertyDef uniformness -> OMFI:DIDD:Uniformness>, <PropertyDef video_line_map_size -> OMFI:DIDD:VideoLineMapSize>, <PropertyDef stored_f2_offset -> OMFI:DIDD:StoredF2Offset>, <PropertyDef frame_start_offset -> OMFI:DIDD:FrameStartOffset>, <PropertyDef essence_element_size_kind -> OMFI:DIDD:EssenceElementSizeKind>, <PropertyDef frame_sample_size_checked -> OMFI:DIDD:FrameSampleSizeHasBeenCheckedWithMapper>, <PropertyDef reformatting_option -> OMFI:DIDD:ReformattingOption>, <PropertyDef has_premultiplied_alpha -> OMFI:DIDD:HasPremultipliedAlpha>, <PropertyDef needs_vertical_flip -> OMFI:DIDD:NeedsVerticalFlip>, <PropertyDef next_descriptor -> OMFI:DIDD:NextDIDDesc>]
RECTANGLES = ('Valid', 'Essence', 'Source', 'Framing')

The four exact-rational rectangles, in the order OMF defines them. Each is eight properties – <name>XNum/XDen and so on – which rect() reassembles into a Rect.

structural_properties: Sequence[str] = ('OMFI:DIDD:ValidXNum', 'OMFI:DIDD:ValidXDen', 'OMFI:DIDD:ValidYNum', 'OMFI:DIDD:ValidYDen', 'OMFI:DIDD:ValidWidthNum', 'OMFI:DIDD:ValidWidthDen', 'OMFI:DIDD:ValidHeightNum', 'OMFI:DIDD:ValidHeightDen', 'OMFI:DIDD:EssenceXNum', 'OMFI:DIDD:EssenceXDen', 'OMFI:DIDD:EssenceYNum', 'OMFI:DIDD:EssenceYDen', 'OMFI:DIDD:EssenceWidthNum', 'OMFI:DIDD:EssenceWidthDen', 'OMFI:DIDD:EssenceHeightNum', 'OMFI:DIDD:EssenceHeightDen', 'OMFI:DIDD:SourceXNum', 'OMFI:DIDD:SourceXDen', 'OMFI:DIDD:SourceYNum', 'OMFI:DIDD:SourceYDen', 'OMFI:DIDD:SourceWidthNum', 'OMFI:DIDD:SourceWidthDen', 'OMFI:DIDD:SourceHeightNum', 'OMFI:DIDD:SourceHeightDen', 'OMFI:DIDD:FramingXNum', 'OMFI:DIDD:FramingXDen', 'OMFI:DIDD:FramingYNum', 'OMFI:DIDD:FramingYDen', 'OMFI:DIDD:FramingWidthNum', 'OMFI:DIDD:FramingWidthDen', 'OMFI:DIDD:FramingHeightNum', 'OMFI:DIDD:FramingHeightDen')

OMF property names this class reads structurally rather than through a PropertyDef – the parallel per-point, per-band and per-keyframe columns, and the numerator/denominator pairs that make up a rectangle. They have no single sensible attribute name (there are n of each), so a method assembles them instead; listing them here keeps them visible to known_properties() and to the coverage tests, so a property cannot be quietly forgotten.

rect(name)[source]

One of the exact-rational rectangles, or None if absent.

name is one of RECTANGLES. Each component comes back as a (numerator, denominator) pair rather than a float, because that is what the file holds and rounding here would be lossy.

Return type:

Optional[Rect]

rects()[source]

Every rectangle the file wrote, keyed by name.

Return type:

dict

property raster: str | None
summary()[source]

One line describing the essence, for listings.

Return type:

str

class CDCIDescriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

CDCI – colour-difference component image (Y’CbCr).

class_id: Optional[str] = 'CDCI'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef component_width -> OMFI:CDCI:ComponentWidth>, <PropertyDef horizontal_subsampling -> OMFI:CDCI:HorizontalSubsampling>, <PropertyDef vertical_subsampling -> OMFI:CDCI:VerticalSubsampling>, <PropertyDef color_siting -> OMFI:CDCI:ColorSiting>, <PropertyDef black_reference_level -> OMFI:CDCI:BlackReferenceLevel>, <PropertyDef white_reference_level -> OMFI:CDCI:WhiteReferenceLevel>, <PropertyDef color_range -> OMFI:CDCI:ColorRange>, <PropertyDef alpha_sampled_width -> OMFI:CDCI:AlphaSamledWidth>, <PropertyDef ignore_bw_ref_and_color_range -> OMFI:CDCI:IgnoreBWRefLevelAndColorRange>]
property subsampling: str | None

Chroma subsampling as 4:2:2 / 4:2:0 / 4:4:4.

summary()[source]

One line describing the essence, for listings.

Return type:

str

class RGBADescriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

RGBA – RGB(A) image essence.

class_id: Optional[str] = 'RGBA'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef pixel_layout -> OMFI:RGBA:PixelLayout>, <PropertyDef pixel_structure -> OMFI:RGBA:PixelStructure>, <PropertyDef component_min_ref -> OMFI:RGBA:ComponentMinRef>, <PropertyDef component_max_ref -> OMFI:RGBA:ComponentMaxRef>, <PropertyDef has_comp_min_ref -> OMFI:RGBA:HasCompMinRef>, <PropertyDef has_comp_max_ref -> OMFI:RGBA:HasCompMaxRef>, <PropertyDef offset_to_frame_indexes -> OMFI:RGBA:OffsetToFrameIndexes>, <PropertyDef pixel_layout_size -> OMFI:RGBA:PixelLayoutSize>, <PropertyDef pixel_structure_size -> OMFI:RGBA:PixelStructureSize>, <PropertyDef alpha_min_ref -> OMFI:RGBA:AlphaMinRef>, <PropertyDef alpha_max_ref -> OMFI:RGBA:AlphaMaxRef>, <PropertyDef palette -> OMFI:RGBA:Palette>, <PropertyDef palette_size -> OMFI:RGBA:PaletteSize>, <PropertyDef palette_layout -> OMFI:RGBA:PaletteLayout>, <PropertyDef palette_layout_size -> OMFI:RGBA:PaletteLayoutSize>, <PropertyDef palette_structure -> OMFI:RGBA:PaletteStructure>, <PropertyDef palette_structure_size -> OMFI:RGBA:PaletteStructureSize>]
class JPEGDescriptor(root, object_id, entries)[source]

Bases: CDCIDescriptor

JPED – Avid’s motion-JPEG resolutions (AVR, JFIF).

The class dictionary of both samples declares JPED -> CDCI. The quantisation tables are carried inline; JPEGTableID names a table Media Composer already knows, in which case they are omitted.

class_id: Optional[str] = 'JPED'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef jpeg_table_id -> OMFI:JPED:JPEGTableID>, <PropertyDef quantization_tables -> OMFI:JPED:QuantizationTables>, <PropertyDef quantization_tables_length -> OMFI:JPED:QuantizationTables Length>, <PropertyDef image_start_alignment -> OMFI:JPED:ImageStartAlignment>]
class MPEGDescriptor(root, object_id, entries)[source]

Bases: CDCIDescriptor

MPGI – long-GOP MPEG picture essence (XDCAM and friends).

The class dictionary of both samples declares MPGI -> CDCI. Because the GOP means a frame is not independently decodable, the descriptor carries what a random-access seek needs: the GOP structure, the leading and trailing frames to discard, and a copy of the sequence header.

class_id: Optional[str] = 'MPGI'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef mpeg_version -> OMFI:MPGI:MPEGVersion>, <PropertyDef is_mpeg1 -> OMFI:MPGI:isMPEG1>, <PropertyDef stream_type -> OMFI:MPGI:StreamType>, <PropertyDef profile_and_level -> OMFI:MPGI:ProfileAndLevel>, <PropertyDef gop_structure -> OMFI:MPGI:GOPStructure>, <PropertyDef min_gop_length -> OMFI:MPGI:omMPGIMinGOPLength>, <PropertyDef max_gop_length -> OMFI:MPGI:omMPGIMaxGOPLength>, <PropertyDef random_access -> OMFI:MPGI:RandomAccess>, <PropertyDef leading_discard -> OMFI:MPGI:LeadingDiscard>, <PropertyDef trailing_discard -> OMFI:MPGI:TrailingDiscard>, <PropertyDef sequence_header -> OMFI:MPGI:SequenceHdr>, <PropertyDef sequence_header_length -> OMFI:MPGI:SequenceHdrLen>, <PropertyDef offset_to_frame_indexes -> OMFI:MPGI:OffsetToFrameIndexes>]
class TIFFDescriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

TIFD – TIFF stills and the older Avid TIFF-wrapped resolutions.

IsContiguous and IsUniform are the pair that decides whether a frame can be found by arithmetic or needs the frame index.

class_id: Optional[str] = 'TIFD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef is_uniform -> OMFI:TIFD:IsUniform>, <PropertyDef is_contiguous -> OMFI:TIFD:IsContiguous>, <PropertyDef leading_lines -> OMFI:TIFD:LeadingLines>, <PropertyDef trailing_lines -> OMFI:TIFD:TrailingLines>, <PropertyDef jpeg_table_id -> OMFI:TIFD:JPEGTableID>, <PropertyDef first_ifd -> OMFI:TIFD:FirstIFD>, <PropertyDef summary -> OMFI:TIFD:Summary>, <PropertyDef buf_len -> OMFI:TIFD:BufLen>, <PropertyDef rle_desc -> OMFI:TIFD:RLEDesc>, <PropertyDef uncomp_desc -> OMFI:TIFD:UncompDesc>, <PropertyDef tiff_uniformness -> OMFI:TIFD:Uniformness>, <PropertyDef version -> OMFI:TIFD:Version>]
class DVDescriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

DVRD – DV / DVCPRO essence.

Property names carry Avid’s Hungarian l prefix, which is preserved on the OMF side and dropped on the Python side.

class_id: Optional[str] = 'DVRD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef dv_id -> OMFI:DVRD:szID>, <PropertyDef dv_version -> OMFI:DVRD:lVersion>, <PropertyDef data_offset -> OMFI:DVRD:lDataOffset>, <PropertyDef index_offset -> OMFI:DVRD:lIndexOffset>, <PropertyDef data_rate -> OMFI:DVRD:lDataRate>, <PropertyDef field_count -> OMFI:DVRD:lFieldCount>, <PropertyDef is_pal -> OMFI:DVRD:lPAL>, <PropertyDef q_factor -> OMFI:DVRD:lQFactor>, <PropertyDef dyna_q -> OMFI:DVRD:lDynaQ>, <PropertyDef x_extent -> OMFI:DVRD:lXExtent>, <PropertyDef y_extent -> OMFI:DVRD:lYExtent>]
class VideoDescriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

MDVI – Avid’s own video-media descriptor.

Predates the OMF DIDD raster model and describes the capture hardware’s view of the signal: which lines were captured, in what format, with what mask. Absent from both reference samples.

class_id: Optional[str] = 'MDVI'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef width -> OMFI:MDVI:Width>, <PropertyDef height -> OMFI:MDVI:Height>, <PropertyDef fields -> OMFI:MDVI:Fields>, <PropertyDef video_format -> OMFI:MDVI:VideoFormat>, <PropertyDef source_format -> OMFI:MDVI:SourceFormat>, <PropertyDef capture_mask -> OMFI:MDVI:CaptureMask>, <PropertyDef capture_shift -> OMFI:MDVI:CaptureShift>, <PropertyDef uniform -> OMFI:MDVI:Uniform>, <PropertyDef vc_id -> OMFI:MDVI:TypevcID>, <PropertyDef video_modifier -> OMFI:MDVI:TypeVideoModifier>]
class VC1Descriptor(root, object_id, entries)[source]

Bases: DigitalImageDescriptor

VC1D – SMPTE VC-1 (Windows Media) picture essence.

class_id: Optional[str] = 'VC1D'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef profile -> OMFI:VC1D:Profile>, <PropertyDef level -> OMFI:VC1D:Level>, <PropertyDef average_bit_rate -> OMFI:VC1D:AverageBitRate>, <PropertyDef max_bit_rate -> OMFI:VC1D:MaxBitRate>, <PropertyDef max_gop -> OMFI:VC1D:MaxGOP>, <PropertyDef b_picture_count -> OMFI:VC1D:BPictureCount>, <PropertyDef identical_gop -> OMFI:VC1D:IdenticalGOP>, <PropertyDef single_sequence -> OMFI:VC1D:SingleSequence>, <PropertyDef coded_content_scanning -> OMFI:VC1D:CodedContentScanning>, <PropertyDef initialization_metadata -> OMFI:VC1D:InitializationMetadata>]
class AudioDescriptor(root, object_id, entries)[source]

Bases: FileDescriptor

The MDAU property group, shared by every audio descriptor.

MDAU is not a class – it never appears in the class dictionary and no object is ever tagged with it – but it is a property namespace that PCMA, MPGA, WAVD, AIFD and SD2D all draw on. Binding it once here means descriptor.num_channels works whatever the wrapper, which is what a caller actually wants to ask.

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_channels -> OMFI:MDAU:NumChannels>, <PropertyDef number_of_channels -> OMFI:MDAU:NumberOfChannels>, <PropertyDef number_of_samples -> OMFI:MDAU:NumberOfSamples>, <PropertyDef bits_per_sample -> OMFI:MDAU:BitsPerSample>, <PropertyDef bytes_per_sample -> OMFI:MDAU:BytesPerSample>, <PropertyDef mdau_sampling_rate -> OMFI:MDAU:AudioSamplingRate>, <PropertyDef mdau_coding_format -> OMFI:MDAU:AudioCodingFormat>, <PropertyDef mdau_ref_level -> OMFI:MDAU:AudioRefLevel>, <PropertyDef mdau_dial_norm -> OMFI:MDAU:DialNorm>, <PropertyDef mdau_electro_spatial_formulation -> OMFI:MDAU:ElectroSpatialFormulation>, <PropertyDef mdau_locked -> OMFI:MDAU:Locked>, <PropertyDef clock_rate -> OMFI:MDAU:ClockRate>, <PropertyDef clock_divisor -> OMFI:MDAU:ClockDivisor>, <PropertyDef pull_down -> OMFI:MDAU:PullDown>]
property sampling_rate

The audio sample rate, whichever spelling the wrapper used.

summary()[source]

One line describing the essence, for listings.

Return type:

str

class PCMADescriptor(root, object_id, entries)[source]

Bases: AudioDescriptor

PCMA – linear PCM audio, with BWF peak-envelope metadata.

This is what Avid writes for the .mxf audio it manages itself, and it is the only audio descriptor present in either reference sample.

class_id: Optional[str] = 'PCMA'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef audio_sampling_rate -> OMFI:PCMA:AudioSamplingRate>, <PropertyDef block_alignment -> OMFI:PCMA:BlockAlignment>, <PropertyDef average_bytes_per_second -> OMFI:PCMA:AverageBytesPerSecond>, <PropertyDef sequence_offset -> OMFI:PCMA:SequenceOffset>, <PropertyDef audio_coding_format -> OMFI:PCMA:AudioCodingFormat>, <PropertyDef audio_ref_level -> OMFI:PCMA:AudioRefLevel>, <PropertyDef dial_norm -> OMFI:PCMA:DialNorm>, <PropertyDef electro_spatial_formulation -> OMFI:PCMA:ElectroSpatialFormulation>, <PropertyDef locked -> OMFI:PCMA:Locked>, <PropertyDef has_peak_envelope_data -> OMFI:PCMA:HasPeakEnvelopeData>, <PropertyDef peak_channel_count -> OMFI:PCMA:PeakChannelCount>, <PropertyDef peak_frame_count -> OMFI:PCMA:PeakFrameCount>, <PropertyDef peak_envelope_version -> OMFI:PCMA:PeakEnvelopeVersion>, <PropertyDef peak_envelope_format -> OMFI:PCMA:PeakEnvelopeFormat>, <PropertyDef peak_envelope_block_size -> OMFI:PCMA:PeakEnvelopeBlockSize>, <PropertyDef peak_envelope_timestamp -> OMFI:PCMA:PeakEnvelopeTimestamp>, <PropertyDef peak_of_peaks_offset -> OMFI:PCMA:PeakOfPeaksOffset>, <PropertyDef points_per_peak_value -> OMFI:PCMA:PointsPerPeakValue>, <PropertyDef version -> OMFI:PCMA:Version>, <PropertyDef peak_envelope_data -> OMFI:PCMA:PeakEnvelopeData>, <PropertyDef subframe_alignment -> OMFI:PCMA:SubframeAlignment>, <PropertyDef smpte_ebu_timestamp -> OMFI:PCMA:SmpteEbuTimestamp>, <PropertyDef timecode_frame_rate -> OMFI:PCMA:TimecodeFrameRate>]
class MPEGAudioDescriptor(root, object_id, entries)[source]

Bases: AudioDescriptor

MPGA – MPEG audio (layer II / III).

Everything about the sound itself is in the shared MDAU group; what MPGA adds is what a decoder needs to find a frame boundary.

class_id: Optional[str] = 'MPGA'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef bit_rate -> OMFI:MPGA:BitRate>, <PropertyDef subframe_alignment -> OMFI:MPGA:SubframeAlignment>, <PropertyDef origin -> OMFI:MPGA:Origin>, <PropertyDef version -> OMFI:MPGA:Version>]
class WAVEDescriptor(root, object_id, entries)[source]

Bases: AudioDescriptor

WAVD – a Broadcast WAVE file.

Summary holds the file’s own RIFF chunks verbatim, which is where the originator, the bext timestamp and the channel layout live – Avid keeps the header rather than re-describing it.

Note the class split, which pyavb does not make: in OMF the descriptor is WAVD and the media data is WAVE (WAVEData). pyavb folds them together under WAVE because the AVB container does; the MDB schema declares both names separately, so both are bound here.

class_id: Optional[str] = 'WAVD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef summary -> OMFI:WAVD:Summary>, <PropertyDef version -> OMFI:WAVD:Version>]
class AIFCDescriptor(root, object_id, entries)[source]

Bases: AudioDescriptor

AIFD – an AIFF-C file. The AIFF twin of WAVEDescriptor.

class_id: Optional[str] = 'AIFD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef summary -> OMFI:AIFD:Summary>, <PropertyDef data_pos -> OMFI:AIFD:MC:DataPos>, <PropertyDef version -> OMFI:AIFD:Version>]
class SoundDesignerDescriptor(root, object_id, entries)[source]

Bases: AudioDescriptor

SD2D – Sound Designer II, the Pro Tools legacy format.

Unusually, the schema gives this one both descriptor properties and a Data/MobID pair, so it doubles as its own media-data class.

class_id: Optional[str] = 'SD2D'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef sd2_num_channels -> OMFI:SD2D:NumChannels>, <PropertyDef sd2_bits_per_sample -> OMFI:SD2D:BitsPerSample>, <PropertyDef data -> OMFI:SD2D:Data>, <PropertyDef mob_id -> OMFI:SD2D:MobID>]
class DataDescriptor(root, object_id, entries)[source]

Bases: FileDescriptor

DATD – essence that is neither picture nor sound.

The frame-index properties are the same shape as DIDD’s, because the problem is the same: a file of variable-size samples needs an index to be seekable.

class_id: Optional[str] = 'DATD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef is_filler -> OMFI:DATD:IsFiller>, <PropertyDef min_sample_size -> OMFI:DATD:MinSampleSize>, <PropertyDef max_sample_size -> OMFI:DATD:MaxSampleSize>, <PropertyDef first_frame_offset -> OMFI:DATD:FirstFrameOffset>, <PropertyDef offset_to_frame_indexes -> OMFI:DATD:OffsetToFrameIndexes>, <PropertyDef offset_to_frame_indexes_valid -> OMFI:DATD:IsOffsetToFrameIndexesValid>]
summary()[source]

One line describing the essence, for listings.

Return type:

str

class ANCDataDescriptor(root, object_id, entries)[source]

Bases: DataDescriptor

ANCD – SMPTE 291 ancillary data: captions, AFD, timecode packets.

The manifest lists which DIDs and SDIDs the stream carries, so a caller can tell a caption track from a metadata track without decoding it.

class_id: Optional[str] = 'ANCD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef manifest -> OMFI:ANCD:ManifestArray>, <PropertyDef manifest_element_count -> OMFI:ANCD:ManifestElementCount>]
summary()[source]

One line describing the essence, for listings.

Return type:

str

class VBIDataDescriptor(root, object_id, entries)[source]

Bases: DataDescriptor

VBID – vertical-blanking-interval data, the analogue-era twin of ANCDataDescriptor.

class_id: Optional[str] = 'VBID'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef manifest -> OMFI:VBID:ManifestArray>, <PropertyDef manifest_element_count -> OMFI:VBID:ManifestElementCount>]
summary()[source]

One line describing the essence, for listings.

Return type:

str

class Rect(x, y, width, height)[source]

Bases: object

One of the DIDD rectangles, as four exact rationals.

Avid stores each rectangle as eight properties – an X, Y, width and height, each a separate numerator and denominator – so the geometry survives non-integer scaling. This groups them back up.

x
y
width
height

misc

The odds and ends: links, markers, list containers, class descriptors.

What these have in common is that they hang off other objects rather than standing on their own. Two of them matter constantly in an MDB – MCBR answers “which bin is this clip in?” and MCMR answers “where in the timeline?” – and the rest are declared by the schema against the day a file uses them.

Bases: OMFObject

MCBR – mob to bin: which .avb bins reference this media.

class_id: Optional[str] = 'MCBR'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef bin_id_high -> OMFI:MCBR:MC:binID.high>, <PropertyDef bin_id_low -> OMFI:MCBR:MC:binID.low>, <PropertyDef bin_name_legacy -> OMFI:MCBR:MC:binName>, <PropertyDef bin_name_utf8 -> OMFI:MCBR:MC:binNameUTF8>, <PropertyDef ame_version -> OMFI:MCBR:AMEVersion>]
property bin_name: str | None
property bin_id: int | None
class MobReference(root, object_id, entries)[source]

Bases: OMFObject

MCMR – a mob reference with a position, joined by MobID.

class_id: Optional[str] = 'MCMR'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:MCMR:MC:MobID>, <PropertyDef position -> OMFI:MCMR:MC:Position>, <PropertyDef mob_id_bare -> OMFI:MCMR:MobID>, <PropertyDef position_bare -> OMFI:MCMR:Position>]
property mob

The mob this reference names, or None if the file has no such mob.

class Marker(root, object_id, entries)[source]

Bases: MobReference

TMBC – a locator/marker: a coloured note pinned to a frame.

Modelled as a MobReference subclass because that is what pyavb found in the AVB container and the property sets agree. Note that the MDB class dictionary declares TMBC and MCMR as separate roots with no parent, so this inheritance is pyavb’s reading rather than the file’s own claim; nothing depends on it, since properties are looked up by OMF name either way.

class_id: Optional[str] = 'TMBC'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef name -> OMFI:TMBC:Name>, <PropertyDef comp_offset -> OMFI:TMBC:MC:CompOffset>, <PropertyDef offset -> OMFI:TMBC:Offset>, <PropertyDef marker_attributes -> OMFI:TMBC:MC:Attributes>, <PropertyDef attrs -> OMFI:TMBC:Attrs>, <PropertyDef color -> OMFI:TMBC:MC:CarbonAPI::RGBColor>, <PropertyDef simple_color -> OMFI:TMBC:Color>, <PropertyDef parent -> OMFI:TMBC:Parent>, <PropertyDef handled_bad_control_codes -> OMFI:TMBC:MC:handledBadControlCodes>]
property rgb: tuple | None

The marker colour as (r, g, b), each 0-65535, if one is set.

class TimeCrumbList(root, object_id, entries)[source]

Bases: OMFObject

TMCS – the list of markers (“crumbs”) on a track.

class_id: Optional[str] = 'TMCS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef crumbs -> OMFI:TMCS:MC:Crumbs>, <PropertyDef num_crumbs -> OMFI:TMCS:MC:NumCrumbs>, <PropertyDef crumbs_bare -> OMFI:TMCS:Crumbs>, <PropertyDef num_crumbs_bare -> OMFI:TMCS:NumCrumbs>, <PropertyDef crumb -> OMFI:TMCS:Crumb>]
markers()[source]
Return type:

List[Marker]

class SortedList(root, object_id, entries)[source]

Bases: OMFObject

SMLS – a fixed-stride list of records stored as one blob.

ListItems is ListCount records of ItemSize bytes each rather than a list of objects, so records() slices it. FXPS inherits from this in the class dictionary of both samples.

class_id: Optional[str] = 'SMLS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef list_items -> OMFI:SMLS:MC:ListItems>, <PropertyDef list_count -> OMFI:SMLS:MC:ListCount>, <PropertyDef item_size -> OMFI:SMLS:MC:ItemSize>, <PropertyDef entry_number -> OMFI:SMLS:MC:EntryNumber>]
records()[source]

The blob sliced into fixed-size records.

Returns [] rather than guessing when the stride is missing or the blob does not divide by it – a partial record is a sign the file is damaged, not something to paper over.

Return type:

List[bytes]

class ListItem(root, object_id, entries)[source]

Bases: OMFObject

LITM – one entry of a list, carrying its payload as a blob.

class_id: Optional[str] = 'LITM'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef entry_data -> OMFI:LITM:MC:EntryData>]
class ClassDescriptor(root, object_id, entries)[source]

Bases: OMFObject

CLSD – one entry of HEAD’s class dictionary.

The dictionary declares only Avid’s extension classes and their inheritance; built-in OMF1 classes are assumed known and never appear.

class_id: Optional[str] = 'CLSD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef class_4cc -> OMFI:CLSD:ClassID>, <PropertyDef parent -> OMFI:CLSD:ParentClass>]
property parent_4cc: str | None

Bases: OMFObject

MFML – the file-level twin of MSML.

Where MSML names the volume a mob’s media was last seen on, MFML names it for a single file, keyed by a 64-bit link UID split across two 32-bit properties.

class_id: Optional[str] = 'MFML'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef last_known_volume -> OMFI:MFML:LastKnownVolume>, <PropertyDef link_uid_high -> OMFI:MFML:LinkUIDHigh>, <PropertyDef link_uid_low -> OMFI:MFML:LinkUIDLow>, <PropertyDef track_type -> OMFI:MFML:TrackType>]
class MediaFileBlock(root, object_id, entries)[source]

Bases: OMFObject

MFMB – one contiguous run of bytes inside a media file.

class_id: Optional[str] = 'MFMB'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef byte_offset -> OMFI:MFMB:ByteOffset>, <PropertyDef byte_length -> OMFI:MFMB:ByteLength>, <PropertyDef is_slide -> OMFI:MFMB:IsSlide>]
class ControlCode(root, object_id, entries)[source]

Bases: OMFObject

CNSC – a control code with a rational value, used on control tracks.

class_id: Optional[str] = 'CNSC'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef control_code -> OMFI:CNSC:ControlCode>, <PropertyDef control_sub_code -> OMFI:CNSC:ControlSubCode>, <PropertyDef control_type_code -> OMFI:CNSC:ControlTypeCode>, <PropertyDef numerator -> OMFI:CNSC:Numerator>, <PropertyDef denominator -> OMFI:CNSC:Denominator>]
class AttributeClip(root, object_id, entries)[source]

Bases: OMFObject

ATCP – a clip whose whole content is an attribute list.

class_id: Optional[str] = 'ATCP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef attributes -> OMFI:ATCP:Attributes>, <PropertyDef version -> OMFI:ATCP:Version>]
class MediaStreamProject(root, object_id, entries)[source]

Bases: OMFObject

MSP – project and library metadata attached to a media stream.

class_id: Optional[str] = 'MSP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef project_data -> OMFI:MSP:ProjectData>, <PropertyDef library_data -> OMFI:MSP:LibraryData>]
class Domain(root, object_id, entries)[source]

Bases: OMFObject

DOMN – a domain. Purpose unverified.

Sits next to DOML (DomainLocator) in the schema, which suggests the pair is a name and a reference to it, but nothing in either sample confirms that.

class_id: Optional[str] = 'DOMN'

OMF 4CC; None on abstract bases

Bases: OMFObject

SDSL – purpose unverified.

The neighbouring SD2D (SoundDesignerDescriptor) makes a Sound Designer link the obvious reading, and MACL declares SDSAddress and SDSMobID properties that would fit. Unconfirmed.

class_id: Optional[str] = 'SDSL'

OMF 4CC; None on abstract bases

class UserProperty(root, object_id, entries)[source]

Bases: OMFObject

USPR – purpose unverified.

Most likely a user-defined property, by analogy with AVUP (UserParameter), but the schema declares no properties for it and neither sample contains one.

class_id: Optional[str] = 'USPR'

OMF 4CC; None on abstract bases

components

CPNT and its descendants – the things that occupy time on a track.

The hierarchy is OMF’s own:

Component (CPNT)
  Clip (CLIP)
    SourceClip (SCLP)      the derivation link
    Filler (FILL)
    Timecode (TCCP)
    Edgecode (ECCP)        film edge numbers
    TrackRef (TRKR)
    ParamClip (PRCL)       an animated parameter
    ControlClip (CTRL)     the older control-point form
  Sequence (SEQU)
  TrackGroup (TRKG)        -- see :mod:`mdb.objects.trackgroups`

PRCL and CTRL carry their control points as flat, parallel properties (NumPts plus per-point values) rather than as sub-objects, so the point list is assembled by ParamClip.control_points() rather than being a property in its own right.

class Component(root, object_id, entries)[source]

Bases: OMFObject

CPNT – anything with an edit rate and a track kind.

class_id: Optional[str] = 'CPNT'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef edit_rate -> OMFI:CPNT:EditRate>, <PropertyDef name -> OMFI:CPNT:Name>, <PropertyDef track_kind -> OMFI:CPNT:TrackKind>, <PropertyDef attributes -> OMFI:CPNT:Attributes>, <PropertyDef session_attrs -> OMFI:CPNT:SessionAttrs>, <PropertyDef effect_id -> OMFI:CPNT:EffectID>, <PropertyDef param_list -> OMFI:CPNT:ParamList>, <PropertyDef precomputed -> OMFI:CPNT:Precomputed>]
attribute_list()[source]
Return type:

Optional[AttributeList]

attribute(name, default=None)[source]

Look up one Avid attribute by name, e.g. mob.attribute('_PJ').

Return type:

Any

attribute_dict()[source]
Return type:

Dict[str, Any]

class Clip(root, object_id, entries)[source]

Bases: Component

CLIP – a component with a duration.

class_id: Optional[str] = 'CLIP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef length -> OMFI:CLIP:Length>]
class SourceClip(root, object_id, entries)[source]

Bases: Clip

SCLP – the derivation link.

source_id names the previous-generation mob by short UID; the OMF1 sentinel 0-0-0 means “this is the original”.

class_id: Optional[str] = 'SCLP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef source_id -> OMFI:SCLP:SourceID>, <PropertyDef source_position -> OMFI:SCLP:SourcePosition>, <PropertyDef source_track -> OMFI:SCLP:SourceTrack>]
property is_original: bool

True when this clip has no upstream source (the 0-0-0 sentinel).

source_mob()[source]

Resolve source_id to a mob.

Media Composer writes a full 32-byte UMID here, though OMF1 allows the 12-byte short UID that HEAD’s MobIndex uses; both are handled, and both ultimately match on the 8-byte material number.

Return type:

Optional[Mob]

class Filler(root, object_id, entries)[source]

Bases: Clip

FILL – silence / black.

class_id: Optional[str] = 'FILL'

OMF 4CC; None on abstract bases

class Timecode(root, object_id, entries)[source]

Bases: Clip

TCCP – a timecode track’s start, rate and flags.

class_id: Optional[str] = 'TCCP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef start_tc -> OMFI:TCCP:StartTC>, <PropertyDef fps -> OMFI:TCCP:FPS>, <PropertyDef flags -> OMFI:TCCP:Flags>]
property drop_frame: bool | None
timecode_string()[source]

Format start_tc as HH:MM:SS:FF (; for drop-frame).

Return type:

Optional[str]

class Edgecode(root, object_id, entries)[source]

Bases: Clip

ECCP – film edge numbers, the film-side twin of TCCP.

Absent from both reference samples (an MDB indexes digital media, and film mobs arrive only on projects that captured from film). The property set is taken from the schema of both samples; the semantics are OMF 2.1’s.

class_id: Optional[str] = 'ECCP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef start_ec -> OMFI:ECCP:StartEC>, <PropertyDef film_kind -> OMFI:ECCP:FilmKind>, <PropertyDef code_format -> OMFI:ECCP:CodeFormat>, <PropertyDef base_perf -> OMFI:ECCP:BasePerf>, <PropertyDef header -> OMFI:ECCP:Header>]
class TrackRef(root, object_id, entries)[source]

Bases: Clip

TRKR – a reference to another track in the same mob.

class_id: Optional[str] = 'TRKR'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef relative_scope -> OMFI:TRKR:RelativeScope>, <PropertyDef relative_track -> OMFI:TRKR:RelativeTrack>]
class Sequence(root, object_id, entries)[source]

Bases: Component

SEQU – an ordered list of components on one track.

class_id: Optional[str] = 'SEQU'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef components -> OMFI:SEQU:Sequence>]
class ParamClip(root, object_id, entries)[source]

Bases: _PointList

PRCL – an animated effect parameter: a curve of control points.

The value at each point can be an integer, a double or a user blob; ValueType says which, and control_points() returns whichever the file wrote. Absent from both reference samples – effects live in the .avb bin, and only their rendered media reaches the MDB.

class_id: Optional[str] = 'PRCL'

OMF 4CC; None on abstract bases

point_properties: tuple = (('offset_num', 'OMFI:PRCL:OffsetNum'), ('offset_den', 'OMFI:PRCL:OffsetDen'), ('time_scale', 'OMFI:PRCL:TimeScale'), ('value_integer', 'OMFI:PRCL:ValueInteger'), ('value_double', 'OMFI:PRCL:ValueDouble'), ('value_user', 'OMFI:PRCL:ValueUser'), ('pp_code', 'OMFI:PRCL:PPCode'), ('pp_type', 'OMFI:PRCL:PPType'), ('pp_integer', 'OMFI:PRCL:PPInteger'), ('pp_double', 'OMFI:PRCL:PPDouble'))

(python name, OMF property) pairs read once per point, in order.

structural_properties: Sequence[str] = ('OMFI:PRCL:OffsetNum', 'OMFI:PRCL:OffsetDen', 'OMFI:PRCL:TimeScale', 'OMFI:PRCL:ValueInteger', 'OMFI:PRCL:ValueDouble', 'OMFI:PRCL:ValueUser', 'OMFI:PRCL:PPCode', 'OMFI:PRCL:PPType', 'OMFI:PRCL:PPInteger', 'OMFI:PRCL:PPDouble')

OMF property names this class reads structurally rather than through a PropertyDef – the parallel per-point, per-band and per-keyframe columns, and the numerator/denominator pairs that make up a rectangle. They have no single sensible attribute name (there are n of each), so a method assembles them instead; listing them here keeps them visible to known_properties() and to the coverage tests, so a property cannot be quietly forgotten.

propertydefs: Sequence[PropertyDef] = [<PropertyDef interp_kind -> OMFI:PRCL:InterpKind>, <PropertyDef extrap_kind -> OMFI:PCRL:ExtrapKind>, <PropertyDef value_type -> OMFI:PRCL:ValueType>, <PropertyDef value_range -> OMFI:PRCL:ValueRange>, <PropertyDef num_points -> OMFI:PRCL:NumPts>, <PropertyDef num_point_properties -> OMFI:PRCL:NumPPs>, <PropertyDef has_value -> OMFI:PRCL:HasValue>, <PropertyDef fields -> OMFI:PRCL:Fields>, <PropertyDef control_point_refs -> OMFI:PRCL:ControlPoints>, <PropertyDef point_property_refs -> OMFI:PRCL:PPs>]
class ControlClip(root, object_id, entries)[source]

Bases: _PointList

CTRL – the older, rational-valued control curve PRCL replaced.

Same shape as ParamClip but with numerator/denominator values and an interpolation-quality (IQ) block. Absent from both reference samples.

class_id: Optional[str] = 'CTRL'

OMF 4CC; None on abstract bases

point_properties: tuple = (('offset_num', 'OMFI:CTRL:OffsetNum'), ('offset_den', 'OMFI:CTRL:OffsetDen'), ('time_scale', 'OMFI:CTRL:TimeScale'), ('value_num', 'OMFI:CTRL:ValueNum'), ('value_den', 'OMFI:CTRL:ValueDen'), ('pp_code', 'OMFI:CTRL:PPCode'), ('pp_num', 'OMFI:CTRL:PPNum'), ('pp_den', 'OMFI:CTRL:PPDen'))

(python name, OMF property) pairs read once per point, in order.

structural_properties: Sequence[str] = ('OMFI:CTRL:OffsetNum', 'OMFI:CTRL:OffsetDen', 'OMFI:CTRL:TimeScale', 'OMFI:CTRL:ValueNum', 'OMFI:CTRL:ValueDen', 'OMFI:CTRL:PPCode', 'OMFI:CTRL:PPNum', 'OMFI:CTRL:PPDen', 'OMFI:INTL:IQKind0', 'OMFI:INTL:IQKind1', 'OMFI:INTL:IQKind2', 'OMFI:INTL:IQKind3', 'OMFI:INTL:IQKind4', 'OMFI:INTL:IQKind5', 'OMFI:INTL:IQKind6', 'OMFI:INTL:IQKind7', 'OMFI:INTL:IQKind8', 'OMFI:INTL:IQKind9', 'OMFI:INTL:IQNum0', 'OMFI:INTL:IQNum1', 'OMFI:INTL:IQNum2', 'OMFI:INTL:IQNum3', 'OMFI:INTL:IQNum4', 'OMFI:INTL:IQNum5', 'OMFI:INTL:IQNum6', 'OMFI:INTL:IQNum7', 'OMFI:INTL:IQNum8', 'OMFI:INTL:IQNum9', 'OMFI:INTL:IQDen0', 'OMFI:INTL:IQDen1', 'OMFI:INTL:IQDen2', 'OMFI:INTL:IQDen3', 'OMFI:INTL:IQDen4', 'OMFI:INTL:IQDen5', 'OMFI:INTL:IQDen6', 'OMFI:INTL:IQDen7', 'OMFI:INTL:IQDen8', 'OMFI:INTL:IQDen9')

OMF property names this class reads structurally rather than through a PropertyDef – the parallel per-point, per-band and per-keyframe columns, and the numerator/denominator pairs that make up a rectangle. They have no single sensible attribute name (there are n of each), so a method assembles them instead; listing them here keeps them visible to known_properties() and to the coverage tests, so a property cannot be quietly forgotten.

propertydefs: Sequence[PropertyDef] = [<PropertyDef interp_kind -> OMFI:CTRL:InterpKind>, <PropertyDef value -> OMFI:CTRL:Value>, <PropertyDef value_range -> OMFI:CTRL:ValueRange>, <PropertyDef num_points -> OMFI:CTRL:NumPts>, <PropertyDef num_point_properties -> OMFI:CTRL:NumPPs>, <PropertyDef num_iqs -> OMFI:CTRL:NumIQs>, <PropertyDef has_value -> OMFI:CTRL:HasValue>, <PropertyDef control_point_refs -> OMFI:CTRL:ControlPoints>, <PropertyDef point_property_refs -> OMFI:CTRL:PPs>, <PropertyDef iq_refs -> OMFI:CTRL:IQs>]
interpolation_qualities()[source]

The INTL interpolation-quality block, if the file carries one.

The schema spells this as ten numbered triples (IQKind0..9 / IQNum0..9 / IQDen0..9) written flat on the clip rather than as a list, so it is read by index.

Return type:

List[Dict[str, Any]]

trackgroups

TRKG and its descendants – components made of parallel tracks.

MOBJ is the one that matters in an MDB: a mob is the unit of media identity, and everything else joins to it. The rest of the family (selectors, effects, time warps) belongs to composition editing and reaches an MDB only when a rendered effect produces media of its own – see mdb.objects.effects for those.

class TrackGroup(root, object_id, entries)[source]

Bases: Component

TRKG – a component made of parallel tracks.

class_id: Optional[str] = 'TRKG'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef tracks -> OMFI:TRKG:Tracks>, <PropertyDef group_length -> OMFI:TRKG:GroupLength>, <PropertyDef mode -> OMFI:TRKG:MC:Mode>, <PropertyDef type_code -> OMFI:TRKG:TypeCode>, <PropertyDef numerator -> OMFI:TRKG:Numerator>, <PropertyDef denominator -> OMFI:TRKG:Denominator>, <PropertyDef num_scalars -> OMFI:TRKG:NumScalars>, <PropertyDef control_scalars -> OMFI:TRKG:ControlScalars>, <PropertyDef isolation -> OMFI:TRKG:Isolation>, <PropertyDef locks_suspended -> OMFI:TRKG:LocksSuspended>]
components()[source]

The component on each track, skipping tracks that carry none.

Return type:

Iterator[MDBObject]

class Mob(root, object_id, entries)[source]

Bases: TrackGroup

MOBJ – a media object: the unit of media identity.

Everything joins on mob_id. PhysicalMedia leads to the descriptor (codec, raster, rate) and from there to the locators that name the media file on disk.

class_id: Optional[str] = 'MOBJ'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:MOBJ:MobID>, <PropertyDef usage_code -> OMFI:MOBJ:UsageCode>, <PropertyDef physical_media -> OMFI:MOBJ:PhysicalMedia>, <PropertyDef start_position -> OMFI:MOBJ:StartPosition>, <PropertyDef last_modified -> OMFI:MOBJ:LastModified>, <PropertyDef creation_time -> OMFI:MOBJ:_CreationTime>]
property descriptor: MediaDescriptor | None
locators()[source]
Return type:

List[Locator]

paths()[source]

Every distinct file path this mob’s locators name, UTF-8 preferred.

MSML links share the locator list but carry a volume rather than a path, so they contribute nothing here – see volumes().

Return type:

List[str]

sequences()[source]
Return type:

List[Sequence]

source_clips()[source]

Every SCLP under this mob’s tracks (one level of sequence deep).

Return type:

List[SourceClip]

sources()[source]

The previous-generation mobs this mob derives from.

Return type:

List[Mob]

derivation_chain(max_depth=32)[source]

Walk SCLP:SourceID upstream until the 0-0-0 sentinel.

Cycles and runaway depth are guarded: a damaged file should not hang the caller.

Return type:

List[Mob]

The MSML volume links for this mob.

MSML is a locator subclass (MSML -> TXTL in the class dictionary), so it hangs off the descriptor alongside the file locators – it is not found by scanning for a matching MobID, though it does carry a copy of one for the reverse lookup.

Return type:

List[MediaStreamLink]

volumes()[source]

Distinct last-known volumes this mob’s media was seen on.

Return type:

List[str]

The MCBR bin links for this mob.

MCBR carries no MobID. It is reached through the attribute tree: MOBJ -> CPNT:Attributes -> ATTR -> ATTB('_ORG_BIN', kind=object) -> MCBR.

Return type:

List[BinLink]

bins()[source]

Names of the .avb bins that reference this mob.

Return type:

List[str]

mob_references()[source]

MCMR objects hanging off this mob’s attribute tree.

Return type:

List[MobReference]

class RepeatSet(root, object_id, entries)[source]

Bases: TrackGroup

RSET – Avid extension: a set of alternate representations.

class_id: Optional[str] = 'RSET'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef rep_set_type -> OMFI:RSET:repSetType>]
class Track(root, object_id, entries)[source]

Bases: OMFObject

TRAK – one slot of a track group.

class_id: Optional[str] = 'TRAK'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef component -> OMFI:TRAK:TrackComponent>, <PropertyDef label_number -> OMFI:TRAK:LabelNumber>, <PropertyDef opt_flags -> OMFI:TRAK:OptFlags>, <PropertyDef filler_proxy -> OMFI:TRAK:FillerProxy>, <PropertyDef attributes -> OMFI:TRAK:Attributes>, <PropertyDef session_attrs -> OMFI:TRAK:SessionAttrs>, <PropertyDef start_position -> OMFI:TRAK:StartPos>, <PropertyDef control_code -> OMFI:TRAK:ControlCode>, <PropertyDef control_sub_code -> OMFI:TRAK:ControlSubCode>, <PropertyDef lock_number -> OMFI:TRAK:LockNubmer>, <PropertyDef track_label -> OMFI:trkt:Track.trkLNum>, <PropertyDef track_type -> OMFI:trkt:Track.trkType>]
property track_kind
property track_kind_name: str
class Selector(root, object_id, entries)[source]

Bases: TrackGroup

SLCT – one track chosen from several alternatives.

The classic use is a multi-camera group or an effect’s “before” leg: selected indexes into tracks, and the rest are kept but not played. Absent from both reference samples.

class_id: Optional[str] = 'SLCT'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef is_ganged -> OMFI:SLCT:IsGanged>, <PropertyDef selected -> OMFI:SLCT:SelectedTrack>]
selected_track()[source]

The chosen track, or None if the index does not address one.

Return type:

Optional[Track]

effects

Effects: the TRKG descendants that transform their tracks.

None of these appears in either reference sample, and that is the expected result rather than a gap – an effect lives in the .avb bin, and only its rendered media reaches the MDB, as an ordinary mob with an ordinary descriptor. They are defined here because the class dictionary of both samples declares them, so a file that does carry one (a precompute written back into the media folder, or a future Media Composer that indexes more) reads as a typed object rather than as a bag of properties.

The inheritance below is the one the samples’ own class dictionary states:

TRKG -> TKFX -> PVOL
             -> EQMB
             -> ASPI
TRKG -> WARP -> STRB
TRAN -> TNFX

which differs from pyavb’s AVB reading in one place: pyavb makes MASK, SPED and REPT WARP subclasses, and the MDB dictionary declares only STRB. The others are still modelled as time warps here, with this note, because the property sets agree and nothing dispatches on it.

class TrackEffect(root, object_id, entries)[source]

Bases: TrackGroup

TKFX – the base for every rendered track effect.

The GlobalInfo block is spelled with a TNFX prefix even on a TKFX object, because the two classes share the structure and Avid named the properties after the first class to use them. Both spellings are bound.

class_id: Optional[str] = 'TKFX'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef left_length -> OMFI:TKFX:MC:LeftLength>, <PropertyDef right_length -> OMFI:TKFX:MC:RightLength>, <PropertyDef keyframes -> OMFI:TKFX:MC:KeyFrameList>, <PropertyDef trackman -> OMFI:TKFX:MC:TrackMan>, <PropertyDef force_software -> OMFI:TKFX:MC:ForceSoftware>, <PropertyDef never_hardware -> OMFI:TKFX:MC:NeverHardware>, <PropertyDef global_info -> OMFI:TKFX:MC:GlobalInfo>, <PropertyDef global_info_version -> OMFI:TKFX:MC:GlobalInfoVersion>, <PropertyDef info_version -> OMFI:TNFX:MC:GlobalInfoVersion>, <PropertyDef info_minor_version -> OMFI:TNFX:MC:GlobalInfoMinorVersion>, <PropertyDef info_current -> OMFI:TNFX:MC:GlobalInfo.kfCurrent>, <PropertyDef info_smooth -> OMFI:TNFX:MC:GlobalInfo.kfSmooth>, <PropertyDef info_color_item -> OMFI:TNFX:MC:GlobalInfo.colorItem>, <PropertyDef info_quality -> OMFI:TNFX:MC:GlobalInfo.quality>, <PropertyDef info_is_reversed -> OMFI:TNFX:MC:GlobalInfo.isReversed>, <PropertyDef info_aspect_on -> OMFI:TNFX:MC:GlobalInfo.aspectOn>, <PropertyDef info_unique_id_1 -> OMFI:TNFX:MC:GlobalInfo.UniqueId1>, <PropertyDef info_unique_id_2 -> OMFI:TNFX:MC:GlobalInfo.UniqueId2>]
class PanVolumeEffect(root, object_id, entries)[source]

Bases: TrackEffect

PVOL – audio level and pan.

Level and Pan are fixed-point integers, not dB and not a -1..1 float; level_db converts, and returns None at silence rather than negative infinity.

class_id: Optional[str] = 'PVOL'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef level -> OMFI:PVOL:MC:Level>, <PropertyDef level_ex -> OMFI:PVOL:MC:LevelEx>, <PropertyDef pan -> OMFI:PVOL:MC:Pan>, <PropertyDef level_set -> OMFI:PVOL:MC:LevelSet>, <PropertyDef pan_set -> OMFI:PVOL:MC:PanSet>, <PropertyDef suppress_validation -> OMFI:PVOL:MC:SuppressValidation>, <PropertyDef supports_separate_gain -> OMFI:PVOL:MC:DoesSuprtSeprtClipG>, <PropertyDef is_trim_gain_effect -> OMFI:PVOL:MC:IsTrimGainEffect>]
UNITY_LEVEL = 65536

Level is stored as a fixed-point fraction of unity gain.

property level_db: float | None

level as decibels relative to unity gain.

None when the level is unset or zero – silence has no dB value, and returning -inf would poison any arithmetic downstream.

class AudioSuitePluginEffect(root, object_id, entries)[source]

Bases: TrackEffect

ASPI – a rendered AudioSuite (Pro Tools) plug-in.

The plug-in’s own state is opaque: bag_of_bits and the per-chunk chunkfData are the plug-in’s private format, and are exposed as bytes without interpretation.

Two of this class’s property IDs collide with FXPS’s in the schema of both samples (ASPI:tracksToAffect with FXPS:ccNumParams, and ASPI:renderingMode with FXPS:colorCorrection). Both bindings are kept by the container; mdb validate reports the collision.

class_id: Optional[str] = 'ASPI'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_plugins -> OMFI:ASPI:numOfPlugIns>, <PropertyDef plugin_refs -> OMFI:ASPI:omfiAudioSuitePlugIn>, <PropertyDef plugin_name -> OMFI:ASPI:plugInName>, <PropertyDef manufacturer_id -> OMFI:ASPI:plugInfManufacturerID>, <PropertyDef product_id -> OMFI:ASPI:plugInfProductID>, <PropertyDef plugin_id -> OMFI:ASPI:plugInfPlugInID>, <PropertyDef num_chunks -> OMFI:ASPI:plugInNumOfChunks>, <PropertyDef source_mob_id -> OMFI:ASPI:sourceMasterClipMobID>, <PropertyDef mark_in -> OMFI:ASPI:markInForSourceMasterClip>, <PropertyDef mark_out -> OMFI:ASPI:markOutForSourceMasterClip>, <PropertyDef tracks_to_affect -> OMFI:ASPI:tracksToAffect>, <PropertyDef rendering_mode -> OMFI:ASPI:renderingMode>, <PropertyDef padding_secs -> OMFI:ASPI:paddingSecs>, <PropertyDef preset_path -> OMFI:ASPI:presetPath>, <PropertyDef preset_path_length -> OMFI:ASPI:presetPathLength>, <PropertyDef bag_of_bits -> OMFI:ASPI:BagOfBits>]
structural_properties: Sequence[str] = ('OMFI:ASPI:chunkfChunkID', 'OMFI:ASPI:chunkfChunkName', 'OMFI:ASPI:chunkfVersion', 'OMFI:ASPI:chunkfData', 'OMFI:ASPI:chunkfDataSize')

OMF property names this class reads structurally rather than through a PropertyDef – the parallel per-point, per-band and per-keyframe columns, and the numerator/denominator pairs that make up a rectangle. They have no single sensible attribute name (there are n of each), so a method assembles them instead; listing them here keeps them visible to known_properties() and to the coverage tests, so a property cannot be quietly forgotten.

chunks()[source]

The plug-in’s settings chunks, assembled from parallel properties.

Return type:

List[Dict[str, Any]]

class EqualizerMultiBand(root, object_id, entries)[source]

Bases: TrackEffect

EQMB – the multi-band audio EQ.

class_id: Optional[str] = 'EQMB'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_bands -> OMFI:EQMB:AV:NumBands>, <PropertyDef band_refs -> OMFI:EQMB:AV:Bands>, <PropertyDef effect_enable -> OMFI:EQMB:AV:EffectEnable>, <PropertyDef filter_name -> OMFI:EQMB:AV:FilterName>, <PropertyDef suppress_validation -> OMFI:EQMB:AV:SuppressValidation>]
bands()[source]

The EQ bands, whichever way the file wrote them.

Prefers real EQBD objects from EQMB:AV:Bands; falls back to the inline form, where the five band properties are repeated on this object once per band and a band is assembled by index.

Return type:

list

class EqualizerBand(root, object_id, entries)[source]

Bases: OMFObject

EQBD – one band of an EqualizerMultiBand.

Declared as a class in the dictionary of both samples, so in a Bento container the bands are most likely separate objects reached through EQMB:AV:Bands. pyavb reads them inline instead, because the AVB byte stream writes them that way – so EqualizerMultiBand.bands() handles both shapes and this class covers the object one.

class_id: Optional[str] = 'EQBD'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef type -> OMFI:EQBD:AV:BandType>, <PropertyDef freq -> OMFI:EQBD:AV:BandFreq>, <PropertyDef gain -> OMFI:EQBD:AV:BandGain>, <PropertyDef q -> OMFI:EQBD:AV:BandQ>, <PropertyDef enable -> OMFI:EQBD:AV:BandEnable>]
class TimeWarp(root, object_id, entries)[source]

Bases: TrackGroup

WARP – the base for effects that change the rate of time.

class_id: Optional[str] = 'WARP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef phase_offset -> OMFI:WARP:PhaseOffset>, <PropertyDef warp_edit_rate -> OMFI:WARP:EditRate>, <PropertyDef version -> OMFI:WARP:Version>]
class CaptureMask(root, object_id, entries)[source]

Bases: TimeWarp

MASK – the field-dropping mask used by film-to-video pulldown.

Declared in neither sample’s class dictionary; modelled as a time warp on pyavb’s reading of the AVB container, where MASK -> WARP.

class_id: Optional[str] = 'MASK'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef is_double -> OMFI:MASK:IsDouble>, <PropertyDef mask_bits -> OMFI:MASK:MaskBits>, <PropertyDef version -> OMFI:MASK:Version>]
class StrobeEffect(root, object_id, entries)[source]

Bases: TimeWarp

STRB – hold every n-th frame. STRB -> WARP in the class dictionary of both samples.

class_id: Optional[str] = 'STRB'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef strobe_value -> OMFI:STRB:MC:StrobeVal>]
class MotionEffect(root, object_id, entries)[source]

Bases: TimeWarp

SPED – a speed change.

The ratio is a plain numerator over denominator: 2/1 is double speed, 1/2 is half. Three of its four properties are misspelled OMIF rather than OMFI in the schema of both samples – Avid’s typo, and it is bound as written because that is what the file says.

class_id: Optional[str] = 'SPED'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef numerator -> OMFI:SPED:Numerator>, <PropertyDef denominator -> OMFI:SPED:Denominator>, <PropertyDef version -> OMFI:SPED:Version>, <PropertyDef offset_adjust -> OMIF:SPED:OffsetAdjust>, <PropertyDef source_param_list -> OMIF:SPED:SourceParamList>, <PropertyDef new_source_calculation -> OMIF:SPED:NewSourceCalculation>]
property speed: float | None

The speed ratio as a float, or None if it is not set.

class Repeat(root, object_id, entries)[source]

Bases: TimeWarp

REPT – loop the tracks below.

Carries no properties of its own beyond version stamps: the repeat count falls out of the group length against the source length.

class_id: Optional[str] = 'REPT'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef version -> OMFI:REPT:Version>]
class Transition(root, object_id, entries)[source]

Bases: TrackGroup

TRAN – a transition between two adjacent components.

cut_point is where the cut would have been without the transition, which is what a conform needs in order to place it.

class_id: Optional[str] = 'TRAN'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef cut_point -> OMFI:TRAN:CutPoint>, <PropertyDef version -> OMFI:TRAN:Version>]
class TransitionEffect(root, object_id, entries)[source]

Bases: Transition

TNFX – a transition realised by an effect (a dissolve, a wipe).

TNFX -> TRAN in the class dictionary of both samples. Everything past the cut point is the same GlobalInfo block TKFX carries, which is why the property names below share the TNFX prefix with it.

class_id: Optional[str] = 'TNFX'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef left_length -> OMFI:TNFX:MC:LeftLength>, <PropertyDef right_length -> OMFI:TNFX:MC:RightLength>, <PropertyDef keyframes -> OMFI:TNFX:MC:KeyFrameList>, <PropertyDef trackman -> OMFI:TNFX:MC:TrackMan>, <PropertyDef force_software -> OMFI:TNFX:MC:ForceSoftware>, <PropertyDef never_hardware -> OMFI:TNFX:MC:NeverHardware>, <PropertyDef global_info -> OMFI:TNFX:MC:GlobalInfo>, <PropertyDef info_version -> OMFI:TNFX:MC:GlobalInfoVersion>, <PropertyDef info_minor_version -> OMFI:TNFX:MC:GlobalInfoMinorVersion>, <PropertyDef info_current -> OMFI:TNFX:MC:GlobalInfo.kfCurrent>, <PropertyDef info_smooth -> OMFI:TNFX:MC:GlobalInfo.kfSmooth>, <PropertyDef info_color_item -> OMFI:TNFX:MC:GlobalInfo.colorItem>, <PropertyDef info_quality -> OMFI:TNFX:MC:GlobalInfo.quality>, <PropertyDef info_is_reversed -> OMFI:TNFX:MC:GlobalInfo.isReversed>, <PropertyDef info_aspect_on -> OMFI:TNFX:MC:GlobalInfo.aspectOn>, <PropertyDef info_unique_id_1 -> OMFI:TNFX:MC:GlobalInfo.UniqueId1>, <PropertyDef info_unique_id_2 -> OMFI:TNFX:MC:GlobalInfo.UniqueId2>]
class InlineEqualizerBand(type=None, freq=None, gain=None, q=None, enable=None)[source]

Bases: object

A band read from the flat, inline form.

Used when EQMB:AV:Bands holds no object references and the five band properties are written directly on the parent, one repetition per band. Duck-type compatible with EqualizerBand for the five values.

type
freq
gain
q
enable

parameters

Effect parameters: PRIT, PRLS, AVUP, FXPS, GRFX.

A modern Avid effect keeps its settings as a PRLS list of PRIT parameters, each identified by a GUID rather than by name, so the same parameter survives being renamed in the UI. FXPS is the older, flat form: one record per keyframe with every possible field present, which is why its property list is forty-odd entries long and mostly empty in any given file.

None of these appears in either reference sample.

class ParameterItem(root, object_id, entries)[source]

Bases: OMFObject

PRIT – one effect parameter.

Identified by uuid, not by name: name is a display label and may be absent or localised. A parameter that animates has no single value – control_track points at the PRCL curve instead, and multiple_value says so.

class_id: Optional[str] = 'PRIT'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef uuid -> OMFI:PRIT:GUID>, <PropertyDef name -> OMFI:PRIT:Name>, <PropertyDef value -> OMFI:PRIT:Value>, <PropertyDef value_type -> OMFI:PRIT:ValueType>, <PropertyDef enabled -> OMFI:PRIT:Enabled>, <PropertyDef multiple_value -> OMFI:PRIT:MultipleValue>, <PropertyDef control_track -> OMFI:PRIT:ControlTrack>, <PropertyDef contributes_to_signature -> OMFI:PRIT:ContributesToSignature>, <PropertyDef id_high -> OMFI:PRIT:IDHigh>, <PropertyDef id_low -> OMFI:PRIT:IDLow>]
property id: int | None
class ParameterList(root, object_id, entries)[source]

Bases: OMFObject

PRLS – the list of PRIT parameters belonging to one effect.

class_id: Optional[str] = 'PRLS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef param_refs -> OMFI:PRLS:ParamItems>, <PropertyDef num_items -> OMFI:PRLS:NumItems>]
parameters()[source]
Return type:

List[ParameterItem]

to_dict(deref=False)[source]

{name or GUID: value} – the flat view of an effect’s settings.

Return type:

Dict[str, Any]

class UserParameter(root, object_id, entries)[source]

Bases: OMFObject

AVUP – a CoreFoundation-typed user parameter.

The payload is opaque bytes plus a type GUID and its own byte order, which is how Avid round-trips plug-in settings whose structure it does not know.

class_id: Optional[str] = 'AVUP'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef byte_order -> OMFI:AVUP:ByteOrder>, <PropertyDef type_id -> OMFI:AVUP:TypeID>, <PropertyDef data -> OMFI:AVUP:ValueData>, <PropertyDef data_size -> OMFI:AVUP:ValueDataSize>]
class EffectParamList(root, object_id, entries)[source]

Bases: SortedList

FXPS – the older, flat keyframe list.

FXPS -> SMLS in the class dictionary of both samples, so the keyframes themselves are a fixed-stride blob reachable through records(). The named properties below are the per-keyframe fields, written once per keyframe; they are declared multi so obj.pos_x gives the whole track rather than just the last value.

class_id: Optional[str] = 'FXPS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef original_length -> OMFI:FXPS:originalLength>, <PropertyDef window_offset -> OMFI:FXPS:omFXwindowOffset>, <PropertyDef keyframe_size -> OMFI:FXPS:keyFrameSize>, <PropertyDef num_keyframes -> OMFI:FXPS:numKeyFrames>, <PropertyDef attr_list -> OMFI:FXPS:attrList>, <PropertyDef attr_effect_id -> OMFI:FXPS:attrEffectID>, <PropertyDef attr_effect_id_len -> OMFI:FXPS:attrEffectIDLen>, <PropertyDef percent_time -> OMFI:FXPS:percentTime>, <PropertyDef level -> OMFI:FXPS:level>, <PropertyDef selected -> OMFI:FXPS:selected>, <PropertyDef enable_key_flags -> OMFI:FXPS:enableKeyFlags>, <PropertyDef pos_x -> OMFI:FXPS:posX>, <PropertyDef pos_y -> OMFI:FXPS:posY>, <PropertyDef floor_x -> OMFI:FXPS:xFloor>, <PropertyDef ceil_x -> OMFI:FXPS:xCeiling>, <PropertyDef floor_y -> OMFI:FXPS:yFloor>, <PropertyDef ceil_y -> OMFI:FXPS:yCeiling>, <PropertyDef scale_x -> OMFI:FXPS:xScale>, <PropertyDef scale_y -> OMFI:FXPS:yScale>, <PropertyDef crop_left -> OMFI:FXPS:cropLeft>, <PropertyDef crop_right -> OMFI:FXPS:cropRight>, <PropertyDef crop_top -> OMFI:FXPS:cropTop>, <PropertyDef crop_bottom -> OMFI:FXPS:cropBottom>, <PropertyDef box_left -> OMFI:FXPS:boxLeft>, <PropertyDef box_right -> OMFI:FXPS:boxRight>, <PropertyDef box_top -> OMFI:FXPS:boxTop>, <PropertyDef box_bottom -> OMFI:FXPS:boxBottom>, <PropertyDef box_x_scale -> OMFI:FXPS:boxLvl2Xscale>, <PropertyDef box_y_scale -> OMFI:FXPS:boxLvl2Yscale>, <PropertyDef box_x_pos -> OMFI:FXPS:FXboxLvl2Xpos>, <PropertyDef box_y_pos -> OMFI:FXPS:omFXboxLvl2Ypos>, <PropertyDef border_width -> OMFI:FXPS:borderWidth>, <PropertyDef border_soft -> OMFI:FXPS:borderSoft>, <PropertyDef spill_gain -> OMFI:FXPS:spillGain>, <PropertyDef spill_gain_2 -> OMFI:FXPS:spillSecondGain>, <PropertyDef spill_soft -> OMFI:FXPS:spillSoft>, <PropertyDef spill_soft_2 -> OMFI:FXPS:spillSecondSoft>, <PropertyDef colors -> OMFI:FXPS:colors>, <PropertyDef num_colors -> OMFI:FXPS:nColors>, <PropertyDef user_param -> OMFI:FXPS:userParam>, <PropertyDef user_param_size -> OMFI:FXPS:userParamSize>, <PropertyDef color_correction -> OMFI:FXPS:colorCorrection>, <PropertyDef cc_num_params -> OMFI:FXPS:ccNumParams>]
keyframes()[source]

The per-keyframe fields, zipped into one dict per keyframe.

Only fields the file actually wrote appear; a keyframe that set nothing is dropped rather than returned as an empty dict.

Return type:

List[Dict[str, Any]]

class GraphicEffect(root, object_id, entries)[source]

Bases: OMFObject

GRFX – an imported still or matte, held as a picture blob.

class_id: Optional[str] = 'GRFX'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef pict_data -> OMFI:MC:GRFX:PictData>, <PropertyDef pict_size -> OMFI:MC:GRFX:PictSize>, <PropertyDef vc_id -> OMFI:MC:GRFX:vcID>]
class ColorCorrection(root, object_id, entries)[source]

Bases: OMFObject

ATRE – an effect reference carrying a colour-correction payload.

The schema declares exactly one property for it, misspelled EfffectID with three fs. Bound as written.

class_id: Optional[str] = 'ATRE'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef effect_id -> OMFI:ATRE:EfffectID>]

trackers

The tracker family: TKMN, TKDS, TKPS, TKDA, TKPA.

Media Composer’s stabiliser and corner-pin trackers store their analysis separately from the effect that consumes it, so the same tracking data can drive several parameters. The shape is:

TKMN (manager)
  -> TKDS (data slots)   -> TKDA (tracking data)   -> tracker clips
  -> TKPS (param slots)  -> TKPA (tracked param)

The class dictionary of both reference samples declares all five as roots with no parent, and none of them appears in either sample. Settings blobs are left as bytes: they are Media Composer’s private serialisation, and guessing at their layout would be inventing rather than reading.

class TrackerManager(root, object_id, entries)[source]

Bases: OMFObject

TKMN – the root of one effect’s tracking setup.

class_id: Optional[str] = 'TKMN'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef data_slots -> OMFI:TKMN:TrackerDataSlots>, <PropertyDef param_slots -> OMFI:TKMN:TrackedParamSlots>]
class TrackerDataSlot(root, object_id, entries)[source]

Bases: OMFObject

TKDS – a slot holding one or more TrackerData analyses.

class_id: Optional[str] = 'TKDS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_data_slots -> OMFI:TKDS:NumDataSlots>, <PropertyDef tracker_data -> OMFI:TKDS:TrackerData>, <PropertyDef tracker_data_ids -> OMFI:TKDS:TrackerDataIDs>, <PropertyDef track_foreground -> OMFI:TKDAS:TrackForeground>]
class TrackerParameterSlot(root, object_id, entries)[source]

Bases: OMFObject

TKPS – a slot binding tracking data to the parameters it drives.

class_id: Optional[str] = 'TKPS'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_param_slots -> OMFI:TKPS:NumParamSlots>, <PropertyDef tracked_param -> OMFI:TKPS:TrackedParam>, <PropertyDef tracker_param_ids -> OMFI:TKPS:TrackerParamIDs>, <PropertyDef effect_settings -> OMFI:TKPS:EffectSettings>, <PropertyDef effect_settings_size -> OMFI:TKPS:EffectSettingsSize>]
class TrackerData(root, object_id, entries)[source]

Bases: OMFObject

TKDA – one tracker’s analysis: its settings and its clips.

class_id: Optional[str] = 'TKDA'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef num_tracker_clips -> OMFI:TKDA:NumTrackerClips>, <PropertyDef tracker_clips -> OMFI:TKDA:TrackerClip>, <PropertyDef tracker_clip_ids -> OMFI:TKDA:TrackerClipIDs>, <PropertyDef tracker_clip_version -> OMFI:TKDA:TrackerClipVersion>, <PropertyDef settings -> OMFI:TKDA:TrackerSettings>, <PropertyDef settings_size -> OMFI:TKDA:TrackerSettingsSize>, <PropertyDef smoothing -> OMFI:TKDA:TrackerSmoothing>, <PropertyDef jitter_removal -> OMFI:TKDA:TrackerJitterRemoval>, <PropertyDef filter_data_amount -> OMFI:TKDA:TrackerFilterDataAmt>, <PropertyDef offset_tracking -> OMFI:TKDA:TrackerOffsetTracking>]
clips()[source]

Every tracker clip, flattened – TrackerClip repeats per clip.

Return type:

List[object]

class TrackerParameter(root, object_id, entries)[source]

Bases: OMFObject

TKPA – one parameter driven by tracking data.

class_id: Optional[str] = 'TKPA'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef settings -> OMFI:TKPA:ParamSettings>, <PropertyDef settings_size -> OMFI:TKPA:ParamSettingsSize>]

media

Media-data classes: essence carried inside the container.

An OMF file may embed its essence; an MDB never does – it is an index of files on disk, which is why HEAD:MediaData is empty in both reference samples and every class here is unused in them. They are bound because the schema declares them, and because the same class names appear in OMF files that a caller may hand to this reader by mistake: getting a typed WAVEData back with an empty data property is a better answer than a generic object.

Each of these joins to its mob by MobID value rather than by object reference, the same way MSML does.

Note the naming split against pyavb: in OMF the descriptor and the media data are separate classes (WAVD describes, WAVE holds), and both are declared in the MDB schema. pyavb folds them together under the data-class name because the AVB container does. The descriptors live in mdb.objects.descriptors.

class MediaData(root, object_id, entries)[source]

Bases: OMFObject

MDAT – the base for embedded essence: a MobID and a payload.

class_id: Optional[str] = 'MDAT'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:MDAT:MobID>]
data_property: Optional[str] = None

The OMF property this subclass keeps its payload in.

property data

The payload bytes, or None when the class carries none.

property size: int | None
class WAVEData(root, object_id, entries)[source]

Bases: MediaData

WAVE – embedded Broadcast WAVE essence.

Described by WAVEDescriptor (WAVD).

class_id: Optional[str] = 'WAVE'

OMF 4CC; None on abstract bases

data_property: Optional[str] = 'OMFI:WAVE:Data'

The OMF property this subclass keeps its payload in.

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:WAVE:MobID>, <PropertyDef wave_data -> OMFI:WAVE:Data>, <PropertyDef version -> OMFI:WAVE:Version>]
class AIFCData(root, object_id, entries)[source]

Bases: MediaData

AIFC – embedded AIFF-C essence.

Described by AIFCDescriptor (AIFD).

class_id: Optional[str] = 'AIFC'

OMF 4CC; None on abstract bases

data_property: Optional[str] = 'OMFI:AIFC:Data'

The OMF property this subclass keeps its payload in.

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:AIFC:MobID>, <PropertyDef aifc_data -> OMFI:AIFC:Data>, <PropertyDef version -> OMFI:AIFC:Version>]
class TIFFData(root, object_id, entries)[source]

Bases: MediaData

TIFF – embedded TIFF essence.

Described by TIFFDescriptor (TIFD).

class_id: Optional[str] = 'TIFF'

OMF 4CC; None on abstract bases

data_property: Optional[str] = 'OMFI:TIFF:Data'

The OMF property this subclass keeps its payload in.

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:TIFF:MobID>, <PropertyDef tiff_data -> OMFI:TIFF:Data>, <PropertyDef version -> OMFI:TIFF:Version>]
class AvidMediaData(root, object_id, entries)[source]

Bases: MediaData

MVC1 – embedded essence in an Avid-private codec.

class_id: Optional[str] = 'MVC1'

OMF 4CC; None on abstract bases

data_property: Optional[str] = 'OMFI:MVC1:Data'

The OMF property this subclass keeps its payload in.

propertydefs: Sequence[PropertyDef] = [<PropertyDef mob_id -> OMFI:MVC1:MobID>, <PropertyDef mvc1_data -> OMFI:MVC1:Data>]
class ImageData(root, object_id, entries)[source]

Bases: MediaData

IDAT – embedded image essence, the generic form.

class_id: Optional[str] = 'IDAT'

OMF 4CC; None on abstract bases

data_property: Optional[str] = 'OMFI:IDAT:ImageData'

The OMF property this subclass keeps its payload in.

propertydefs: Sequence[PropertyDef] = [<PropertyDef image_data -> OMFI:IDAT:ImageData>]
class JPEGFrameIndex(root, object_id, entries)[source]

Bases: OMFObject

JPEG – the frame index for motion-JPEG essence.

Separate from JPEGDescriptor (JPED): the descriptor says how to decode a frame, this says where each one starts.

class_id: Optional[str] = 'JPEG'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef frame_index -> OMFI:JPEG:FrameIndex>]
class MPEGFrameIndex(root, object_id, entries)[source]

Bases: OMFObject

MPEG – the frame index for MPEG essence.

class_id: Optional[str] = 'MPEG'

OMF 4CC; None on abstract bases

propertydefs: Sequence[PropertyDef] = [<PropertyDef frame_index -> OMFI:MPEG:FrameIndex>]