imflib.cpl
st2067-2-2020: Composition Playlist
Composition Playlist and its related classes
Based on st-2067-3-2020: https://ieeexplore.ieee.org/document/9097510/
The Composition Playlist (Cpl
) combines the assets in an IMF to a timeline.
A CPL is divided into one or more Segment
s.
Each Segment
contains one or more Sequence
s, which are more or less analogous to tracks in a traditional NLE.
Each Sequence
references one or more Resource
s, which are analogous to subclips in a traditional NLE.
Resource
s comprised of external files are TrackFileResource
s. The file path to each TrackFileResouce
s can be
resolved by cross-referencing the UUID in TrackFileResource.track_file_id
with the UUID in imflib.pkl.Asset.id
and
imflib.assetmap.Asset.id
.
- class imflib.cpl.AudioResource(intrinsic_duration: int, id: ~uuid.UUID = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, edit_rate: ~typing.Optional[~imflib.cpl.EditRate] = None, entry_point: int = 0, source_duration: ~typing.Optional[int] = None, repeat_count: int = 1, _src_sequence: ~typing.Optional[~imflib.cpl.Sequence] = None, _src_offset: int = 0, source_encoding: ~uuid.UUID = <factory>, track_file_id: ~uuid.UUID = <factory>, key_id: ~typing.Optional[~uuid.UUID] = None, hash: ~typing.Optional[str] = None, hash_algorithm: ~typing.Optional[str] = None, edit_units_label: str = 'Hz')
Bases:
TrackFileResource
A main audio resource
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) AudioResource
Parse an audio resource from XML
- class imflib.cpl.BaseResource(intrinsic_duration: int, id: ~uuid.UUID = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, edit_rate: ~typing.Optional[~imflib.cpl.EditRate] = None, entry_point: int = 0, source_duration: ~typing.Optional[int] = None, repeat_count: int = 1, _src_sequence: ~typing.Optional[~imflib.cpl.Sequence] = None, _src_offset: int = 0)
Bases:
ABC
A BaseResource XSD within a sequence
- property edit_range: TimecodeRange
In/out point of subclip
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) BaseResource
- source_duration: Optional[int] = None
The desired duration of the playable region past the entry_point, in resource edit units
- property timecode_range: TimecodeRange
Timecode range relative to CPL
- class imflib.cpl.ContentKind(kind: str, scope: Optional[str] = 'http://www.smpte-ra.org/schemas/2067-3/2013#content-kind')
Bases:
object
The kind of content undelying the composition
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) ContentKind
Parse ContentKind from XML
- class imflib.cpl.ContentMaturityRating(rating: str, agency: str, audiences: dict[str, str] = <factory>)
Bases:
object
Content maturity rating and info
- classmethod from_xml(xml: Element, ns: Optional[dict]) ContentMaturityRating
Parse a ContentMaturtyRatingType from a ContentMaturityRatingList
- class imflib.cpl.ContentVersion(label: ~imflib.UserText, id: ~uuid.UUID = <factory>, additional_properties: list[xml.etree.ElementTree.Element] = <factory>)
Bases:
object
A version of the content represented in the CPL
- additional_properties: list[xml.etree.ElementTree.Element]
Additional properties of this content version
- classmethod from_xml(xml: ElementTree, ns: Optional[dict] = None) ContentVersion
Parse a ContentVersion from XML
- label: UserText
Description of the version of the content
- class imflib.cpl.Cpl(title: ~imflib.UserText, edit_rate: ~imflib.cpl.EditRate, id: ~uuid.UUID = <factory>, issue_date: ~datetime.datetime = <factory>, _segments: list['Segment'] = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, issuer: ~typing.Optional[~imflib.UserText] = None, creator: ~typing.Optional[~imflib.UserText] = None, content_originator: ~typing.Optional[~imflib.UserText] = None, content_kind: ~typing.Optional[~imflib.cpl.ContentKind] = None, total_runtime: ~typing.Optional[~datetime.timedelta] = None, tc_start: ~typing.Optional[~posttools.timecode.Timecode] = None, content_versions: set['ContentVersion'] = <factory>, locales: list['Locale'] = <factory>, essence_descriptors: list['EssenceDescriptor'] = <factory>, extension_properties: list['ExtensionProperty'] = <factory>, security: ~typing.Optional[~imflib.Security] = None)
Bases:
object
An IMF Composition Playlist
- content_kind: Optional[ContentKind] = None
The kind of work represented by this CPL
- content_originator: Optional[UserText] = None
The person or company that produced the content used in this CPL
- content_versions: set['ContentVersion']
The specific version or revision of the content in this CPL
- essence_descriptors: list['EssenceDescriptor']
Descriptors intended for scheduling and tracking content referenced by this CPL
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) Cpl
Parse an existing CPL from a given root XMLElementTree Element Intended to be called from Cpl.from_file(), but you do you.
- property resources: Iterator[BaseResource]
- property timecode_range: TimecodeRange
Timecode range of the CPL
- title: UserText
The title of the content in this CPL
- total_runtime: Optional[timedelta] = None
The approximate runtime of the content in this CPL, for informational purposes only
- class imflib.cpl.EssenceDescriptor(id: ~uuid.UUID = <factory>, descriptor_data: list[xml.etree.ElementTree.Element] = <factory>)
Bases:
object
A description of an essence
- descriptor_data: list[xml.etree.ElementTree.Element]
The raw XML data for this essence descriptor
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) EssenceDescriptor
Parse an essence descriptor from its XML
- class imflib.cpl.ExtensionProperty(raw_xml: str)
Bases:
object
Application extension
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) ExtensionProperty
Capture an extention property from the list
- class imflib.cpl.ISXDSequence(id: ~uuid.UUID = <factory>, track_id: ~uuid.UUID = <factory>, _resources: ~typing.List[~imflib.cpl.BaseResource] = <factory>, _src_segment: ~typing.Optional[~imflib.cpl.Segment] = None, _src_offset: int = 0)
Bases:
Sequence
SMPTE RDD 47-2018 isochronous sequence
See: https://ieeexplore.ieee.org/document/8552735/
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) ISXDSequence
Parse ISXDSequence from XML
- class imflib.cpl.ImageResource(intrinsic_duration: int, id: ~uuid.UUID = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, edit_rate: ~typing.Optional[~imflib.cpl.EditRate] = None, entry_point: int = 0, source_duration: ~typing.Optional[int] = None, repeat_count: int = 1, _src_sequence: ~typing.Optional[~imflib.cpl.Sequence] = None, _src_offset: int = 0, source_encoding: ~uuid.UUID = <factory>, track_file_id: ~uuid.UUID = <factory>, key_id: ~typing.Optional[~uuid.UUID] = None, hash: ~typing.Optional[str] = None, hash_algorithm: ~typing.Optional[str] = None, edit_units_label: str = 'fps')
Bases:
TrackFileResource
A main image resource
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) ImageResource
Parse an image resource from XML
- class imflib.cpl.Locale(languages: list[str] = <factory>, regions: list[str] = <factory>, content_maturity_ratings: list[imflib.cpl.ContentMaturityRating] = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None)
Bases:
object
Locale-specific information
- content_maturity_ratings: list[imflib.cpl.ContentMaturityRating]
Content maturity ratings for this locale
- class imflib.cpl.MainAudioSequence(id: ~uuid.UUID = <factory>, track_id: ~uuid.UUID = <factory>, _resources: ~typing.List[~imflib.cpl.BaseResource] = <factory>, _src_segment: ~typing.Optional[~imflib.cpl.Segment] = None, _src_offset: int = 0)
Bases:
Sequence
Main audio sequence of a segment
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) MainImageSequence
Parse from XML
- class imflib.cpl.MainImageSequence(id: ~uuid.UUID = <factory>, track_id: ~uuid.UUID = <factory>, _resources: ~typing.List[~imflib.cpl.BaseResource] = <factory>, _src_segment: ~typing.Optional[~imflib.cpl.Segment] = None, _src_offset: int = 0)
Bases:
Sequence
An XSD MainImageSequenceType from IMF Core Constraints
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) MainImageSequence
Parse from XML
- class imflib.cpl.MarkerResource(intrinsic_duration: int, id: ~uuid.UUID = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, edit_rate: ~typing.Optional[~imflib.cpl.EditRate] = None, entry_point: int = 0, source_duration: ~typing.Optional[int] = None, repeat_count: int = 1, _src_sequence: ~typing.Optional[~imflib.cpl.Sequence] = None, _src_offset: int = 0, label: ~imflib.cpl.MarkerResource.MarkerLabel = <factory>, offset: int = 0)
Bases:
BaseResource
A CPL Marker
- class MarkerLabel(label_text: str = '', scope: str = 'http://www.smpte-ra.org/schemas/2067-3/2013#standardmarkers')
Bases:
object
The marker label
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) MarkerLabel
Parse Label from XML
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) MarkerResource
Parse a Marker resource from XML
- label: MarkerLabel
The textual representation of the marker
- class imflib.cpl.MarkerSequence(id: ~uuid.UUID = <factory>, track_id: ~uuid.UUID = <factory>, _resources: ~typing.List[~imflib.cpl.BaseResource] = <factory>, _src_segment: ~typing.Optional[~imflib.cpl.Segment] = None, _src_offset: int = 0)
Bases:
Sequence
Marker sequence
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) MarkerSequence
Parse a Marker sequence from XML
- class imflib.cpl.Segment(annotation: ~typing.Optional[~imflib.UserText] = None, id: ~uuid.UUID = <factory>, _sequences: ~typing.List[~imflib.cpl.Sequence] = <factory>, _src_cpl: ~typing.Optional[~imflib.cpl.Cpl] = None, _src_offset: int = 0)
Bases:
object
A CPL segment
- property resources: List[BaseResource]
- property timecode_range: TimecodeRange
Timecode range relative to CPL
- class imflib.cpl.Sequence(id: ~uuid.UUID = <factory>, track_id: ~uuid.UUID = <factory>, _resources: ~typing.List[~imflib.cpl.BaseResource] = <factory>, _src_segment: ~typing.Optional[~imflib.cpl.Segment] = None, _src_offset: int = 0)
Bases:
object
A sequence within a segment
- property resources: Iterator[BaseResource]
- property timecode_range: TimecodeRange
Timecode range relative to CPL
- class imflib.cpl.TrackFileResource(intrinsic_duration: int, id: ~uuid.UUID = <factory>, annotation: ~typing.Optional[~imflib.UserText] = None, edit_rate: ~typing.Optional[~imflib.cpl.EditRate] = None, entry_point: int = 0, source_duration: ~typing.Optional[int] = None, repeat_count: int = 1, _src_sequence: ~typing.Optional[~imflib.cpl.Sequence] = None, _src_offset: int = 0, source_encoding: ~uuid.UUID = <factory>, track_file_id: ~uuid.UUID = <factory>, key_id: ~typing.Optional[~uuid.UUID] = None, hash: ~typing.Optional[str] = None, hash_algorithm: ~typing.Optional[str] = None)
Bases:
BaseResource
A file-based resource
- classmethod from_xml(xml: Element, ns: Optional[dict] = None) TrackFileResource
Parse a file-based resource from XML