Skip to main content

Video Metadata Ontology

Document Metadata
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 08 October 2026
Audio Overview
FLOW ALGEBRA

Ontology: Video Metadata Ontology
Domain: Metadata Ontologies > Document Metadata
Canonical URL: https://kirethresearch.org/booksai-core/ontologies/metadata-ontologies/document-metadata/video-metadata-ontology.html

Authors: Mark Anthony Higgins — Sky (Recursive AI)

flow "VideoMetadataOntology" v1.0

# ---------- DOMAIN ----------
domain:
  class: MetadataOntology
  category: DocumentMetadata
  subject: VideoMetadata
  purpose:
    - represent metadata describing video resources and video representations
    - preserve video identity, duration, format, codecs, frame properties, audio tracks, captions, rights, integrity, and provenance
    - support video discovery, validation, accessibility, retrieval, transformation, and reuse
    - distinguish audiovisual content from technical file representations and derived versions
    - enable machine-readable reasoning over video lifecycles

# ---------- CORE ENTITY ----------
entity VideoMetadata:
  type: DocumentMetadata
  describes: VideoResource
  may_include:
    - video_identifier
    - title
    - description
    - creator
    - producer
    - recording_date
    - creation_date
    - modification_date
    - duration
    - video_format
    - media_type
    - video_codec
    - audio_codec
    - width
    - height
    - aspect_ratio
    - frame_rate
    - bitrate
    - colour_metadata
    - audio_tracks
    - subtitle_tracks
    - captions
    - chapters
    - thumbnails
    - language
    - location_metadata
    - subject_metadata
    - rights
    - licence
    - checksum
    - version
    - provenance

entity VideoResource:
  type: MediaResource
  may_be:
    - Film
    - Recording
    - Documentary
    - LectureVideo
    - InterviewVideo
    - Tutorial
    - ScreenRecording
    - ScientificVideo
    - SurveillanceVideo
    - Animation
    - GeneratedVideo

entity VideoIdentifier:
  type: Identifier
  identifies: VideoResource

# ---------- RELATIONSHIPS ----------
relationships:
  VideoMetadata -> DESCRIBES -> VideoResource
  VideoResource -> IDENTIFIED_BY -> VideoIdentifier
  VideoResource -> HAS_REPRESENTATION -> VideoRepresentation
  VideoRepresentation -> HAS_FORMAT -> VideoFormat
  VideoRepresentation -> USES_VIDEO_CODEC -> VideoCodec
  VideoRepresentation -> MAY_USE_AUDIO_CODEC -> AudioCodec
  VideoRepresentation -> HAS_DURATION -> VideoDuration
  VideoRepresentation -> HAS_FRAME_GEOMETRY -> FrameGeometry
  VideoRepresentation -> MAY_HAVE_FRAME_RATE -> FrameRate
  VideoRepresentation -> MAY_HAVE_BITRATE -> VideoBitrate
  VideoResource -> MAY_HAVE_AUDIO_TRACK -> AudioTrack
  VideoResource -> MAY_HAVE_SUBTITLE_TRACK -> SubtitleTrack
  VideoResource -> MAY_HAVE_CAPTION_TRACK -> CaptionTrack
  VideoResource -> MAY_HAVE_CHAPTER -> VideoChapter
  VideoResource -> MAY_HAVE_THUMBNAIL -> Thumbnail
  VideoResource -> MAY_HAVE_VERSION -> VideoVersion
  VideoMetadata -> MAY_REFERENCE -> VideoProvenance

# ---------- VIDEO IDENTITY ----------
rule video_identity:
  VideoResource SHOULD have stable VideoIdentifier
  where persistent reference or provenance is required

rule filename_not_identity:
  filename MUST NOT be assumed globally unique video identity

rule representation_identity:
  VideoResource != VideoRepresentation

rule derived_representation:
  transcoded, resized, or recompressed video MAY preserve same underlying VideoResource
  while creating distinct VideoRepresentation

# ---------- DURATION ----------
entity VideoDuration:
  type: TemporalMetadata
  may_include:
    - duration_value
    - unit

rule duration:
  VideoDuration MUST be non_negative

rule duration_precision:
  duration SHOULD preserve sufficient precision
  for frame or timestamp alignment where required

# ---------- FORMAT ----------
entity VideoFormat:
  type: RepresentationMetadata
  examples:
    - MP4
    - WebM
    - MOV
    - MKV
    - AVI
    - MPEG_TS
    - OGV

rule format:
  VideoFormat != VideoCodec

rule extension:
  filename extension MUST NOT be treated as definitive VideoFormat identity

rule media_type:
  MediaType SHOULD preserve applicable video MIME semantics

# ---------- VIDEO CODEC ----------
entity VideoCodec:
  type: EncodingMetadata
  examples:
    - H264
    - H265
    - VP8
    - VP9
    - AV1
    - MPEG2
    - ProRes

rule video_codec:
  VideoCodec describes encoded video stream

rule codec_container:
  VideoCodec != container format

# ---------- FRAME GEOMETRY ----------
entity FrameGeometry:
  type: SpatialMetadata
  may_include:
    - width
    - height
    - pixel_aspect_ratio
    - display_aspect_ratio

rule dimensions:
  width and height MUST be positive

rule aspect_ratio:
  frame dimensions != display aspect ratio
  when pixel aspect ratio or display metadata modifies presentation

# ---------- FRAME RATE ----------
entity FrameRate:
  type: TemporalSamplingMetadata
  may_include:
    - frames_per_second
    - mode

frame_rate_modes:
  - constant
  - variable

rule frame_rate:
  FrameRate MUST be positive

rule variable_frame_rate:
  variable frame rate SHOULD preserve timing information
  rather_than assuming constant frame intervals

# ---------- BITRATE ----------
entity VideoBitrate:
  type: MeasurementMetadata
  may_include:
    - value
    - unit
    - mode

rule bitrate:
  bitrate SHOULD preserve whether value is:
    - constant
    - variable
    - average
    - peak

# ---------- COLOUR ----------
entity VideoColourMetadata:
  type: RepresentationMetadata
  may_include:
    - colour_space
    - transfer_characteristic
    - matrix_coefficients
    - colour_primaries
    - dynamic_range
    - bit_depth

rule colour:
  colour metadata SHOULD be preserved
  where accurate rendering depends on it

rule hdr:
  HDR metadata SHOULD preserve transfer and mastering context
  where available

# ---------- AUDIO TRACKS ----------
entity AudioTrack:
  type: MediaTrack
  may_include:
    - track_identifier
    - language
    - codec
    - channel_layout
    - sample_rate
    - bitrate
    - role

audio_track_roles:
  - primary
  - commentary
  - description
  - alternate_language
  - music
  - effects

rule audio_track:
  multiple AudioTracks SHOULD remain separately identifiable

# ---------- SUBTITLES ----------
entity SubtitleTrack:
  type: TimedTextTrack
  may_include:
    - track_identifier
    - language
    - format
    - hearing_impaired_metadata
    - forced_status

rule subtitle:
  SubtitleTrack SHOULD preserve timing and language

rule subtitle_caption_distinction:
  subtitle != caption
  where accessibility semantics distinguish them

# ---------- CAPTIONS ----------
entity CaptionTrack:
  type: AccessibilityMetadata
  may_include:
    - track_identifier
    - language
    - timing
    - speaker_labels
    - sound_descriptions
    - generation_method

rule captions:
  captions SHOULD preserve spoken content and relevant non-speech audio
  according_to accessibility purpose

rule automated_caption:
  automatically generated captions MUST remain distinguishable
  from human-verified captions

# ---------- AUDIO DESCRIPTION ----------
entity AudioDescriptionTrack:
  subtype_of: AudioTrack
  role: description

rule audio_description:
  AudioDescriptionTrack SHOULD remain separately identifiable
  from primary audio

# ---------- CHAPTERS ----------
entity VideoChapter:
  type: MediaFragment
  may_include:
    - chapter_identifier
    - title
    - start_time
    - end_time

rule chapter_time:
  REQUIRE start_time <= end_time

rule chapter_bounds:
  chapter end_time SHOULD NOT exceed VideoDuration
  where duration is known

# ---------- THUMBNAILS ----------
entity Thumbnail:
  type: ImageResource
  may_include:
    - timestamp
    - width
    - height
    - format
    - provenance

rule thumbnail:
  Thumbnail SHOULD preserve relationship to source VideoResource

# ---------- RECORDING METADATA ----------
entity VideoRecordingMetadata:
  type: TechnicalMetadata
  may_include:
    - camera
    - lens
    - recording_device
    - recording_date
    - location
    - frame_rate
    - resolution
    - operator

rule recording:
  recording metadata SHOULD remain distinguishable
  from later editing and encoding metadata

rule recording_date:
  recording_date != file_creation_date

# ---------- LOCATION ----------
entity VideoLocationMetadata:
  type: SpatialMetadata
  may_include:
    - capture_location
    - depicted_location
    - coordinate_reference

rule location:
  capture_location != depicted_location
  unless explicitly established

# ---------- SUBJECT / CONTENT ----------
entity VideoSubjectMetadata:
  type: SemanticMetadata
  may_include:
    - depicted_entity
    - event
    - concept
    - scene
    - activity
    - keyword

rule automated_tag:
  machine-generated video tag MUST remain distinguishable
  from human-verified annotation

# ---------- GENERATED VIDEO ----------
entity GeneratedVideo:
  subtype_of: VideoResource
  generated_by: AIModelOrRenderingProcess

rule generated_video:
  generated video SHOULD preserve generating process
  where provenance is required

rule generated_recorded_distinction:
  generated video != captured video
  unless composite provenance explicitly includes captured source

# ---------- EDITING / TRANSFORMATION ----------
entity VideoTransformation:
  type: ProcessingActivity
  may_include:
    - trim
    - splice
    - crop
    - resize
    - transcode
    - stabilise
    - colour_grade
    - overlay
    - compositing
    - frame_interpolation
    - audio_replacement

rule transformation:
  transformed VideoRepresentation SHOULD preserve:
    - source_video
    - operation
    - parameters
    - software_or_agent
    - timestamp
    - output_representation

# ---------- RIGHTS ----------
entity VideoRights:
  type: RightsMetadata
  may_include:
    - creator
    - copyright_holder
    - licence
    - usage_rights
    - attribution_requirement
    - restrictions

rule rights:
  VideoRights SHOULD remain distinct
  from technical metadata and access state

# ---------- INTEGRITY ----------
entity VideoChecksum:
  type: IntegrityMetadata
  may_include:
    - algorithm
    - digest

rule checksum:
  checksum applies to specific VideoRepresentation byte sequence

rule perceptual_fingerprint:
  perceptual video fingerprint != cryptographic integrity hash

# ---------- VERSION ----------
entity VideoVersion:
  type: VersionMetadata
  may_include:
    - version_identifier
    - predecessor
    - successor
    - creation_time
    - change_description

rule version:
  material audiovisual or semantic change MAY create distinguishable VideoVersion

rule representation_change:
  pure transcoding MAY create new VideoRepresentation
  without creating new semantic VideoVersion

# ---------- PROVENANCE ----------
entity VideoProvenance:
  type: ProvenanceMetadata
  may_include:
    - creator
    - producer
    - recording_device
    - source_video
    - generation_process
    - editing_history
    - transcoding_history
    - software
    - timestamps

rule provenance:
  VideoMetadata SHOULD preserve origin and transformation history
  at granularity available

# ---------- VALIDATION ----------
validation:
  require:
    - identifiable_video_resource

  validate_if_present:
    - video_identifier
    - duration
    - format
    - video_codec
    - audio_codec
    - frame_geometry
    - frame_rate
    - bitrate
    - colour_metadata
    - audio_tracks
    - subtitle_tracks
    - captions
    - chapters
    - rights
    - checksum
    - provenance

  reject:
    - negative_video_duration
    - invalid_frame_dimensions
    - invalid_frame_rate
    - contradictory_format_codec_metadata
    - chapter_outside_video_bounds
    - automated_caption_presented_as human_verified_without evidence
    - perceptual_fingerprint_presented_as cryptographic_integrity_proof
    - generated_video_presented_as captured_video_without provenance

# ---------- SEMANTIC EQUIVALENCE ----------
SEMANTIC_EQUIVALENCE:
  "video metadata" ~= "metadata about video"
  "video duration" ~= "recording duration" WHEN recording semantics apply
  "video format" ~= "video file format"
  "frame rate" ~= "frames per second" WHEN rate is constant or appropriately contextualised
  "video captions" ~= "closed captions" WHEN timed accessibility text is intended
  "video provenance" ~= "video origin and editing history"

  PRESERVE distinctions:
    video_resource != video_representation
    format != video_codec
    video_codec != audio_codec
    frame_dimensions != display_aspect_ratio
    frame_rate != bitrate
    subtitle != caption
    recording_date != file_creation_date
    capture_location != depicted_location
    automated_caption != human_verified_caption
    perceptual_fingerprint != cryptographic_hash
    transcoding != semantic_video_change
    generated_video != captured_video

# ---------- CONFIDENCE ----------
CONFIDENCE:
  explicit_video_metadata:
    score: 1.00

  parser_validated_video_format:
    score: 0.99

  explicit_stream_metadata:
    score: 0.98

  cryptographic_checksum_match:
    score: 0.99

  human_verified_caption:
    score: 0.99

  automated_caption:
    score: dependent_on_caption_confidence

  machine_generated_subject_tag:
    score: <= 0.85

  extension_inferred_format:
    score: <= 0.70

  ambiguous_video_metadata:
    score: <= 0.60
    action: preserve uncertainty

# ---------- UPDATE MODEL ----------
UPDATE_MODEL:
  on_video_creation:
    - assign VideoIdentifier
    - record representation and stream metadata
    - record creator or recording metadata
    - calculate integrity metadata where required
    - initialise provenance

  on_video_transformation:
    - preserve source VideoResource
    - create transformed representation or version
    - record operation and parameters
    - recalculate checksum
    - update provenance

  on_caption_creation:
    - preserve VideoResource identity
    - create CaptionTrack
    - record generation method
    - preserve timing and confidence
    - update provenance

  on_format_conversion:
    - preserve VideoResource identity where semantics are unchanged
    - create new VideoRepresentation
    - record source and target formats/codecs
    - preserve transcoding provenance

# ---------- FLOW HASH ----------
FLOW_HASH:
  inputs:
    - ontology
    - video_entities
    - relationships
    - identity_rules
    - representation_rules
    - track_rules
    - accessibility_rules
    - integrity_rules
    - provenance_rules
    - validation
    - semantic_equivalence
    - confidence
    - update_model

  canonicalisation:
    - normalise_whitespace
    - preserve_case_sensitive_identifiers
    - sort_unordered_property_sets
    - preserve_rule_order

  output:
    deterministic_semantic_hash

# ---------- AI CONSUMPTION ----------
AI_CONSUMPTION:
  interpret_as:
    - document metadata ontology
    - video resource and representation model
    - audiovisual track and accessibility structure
    - video provenance and integrity model

  operations:
    - identify video resources
    - resolve video representations
    - inspect duration and format
    - resolve video and audio codecs
    - inspect frame geometry and frame rate
    - inspect bitrate and colour metadata
    - enumerate audio, subtitle, and caption tracks
    - inspect chapters and thumbnails
    - inspect recording and location metadata
    - distinguish generated and captured video
    - trace transformations
    - verify integrity
    - preserve provenance

  constraints:
    - do_not_equate_filename_with_identity
    - do_not_equate_format_with_codec
    - do_not_equate_subtitles_with_captions_when semantics differ
    - do_not_present_automated_captions_as human_verified
    - do_not_equate_perceptual_fingerprint_with cryptographic_integrity
    - preserve_source_representation_tracks_transformations_rights_and_provenance

# ---------- QUERY MODEL ----------
query:
  input:
    - video_identifier
    - video_type
    - creator
    - format
    - video_codec
    - duration
    - frame_rate
    - language
    - caption
    - version
    - checksum

  resolve:
    1. identify VideoResource
    2. resolve VideoIdentifier
    3. inspect VideoRepresentations
    4. inspect duration, format, and codecs
    5. inspect frame geometry, frame rate, bitrate, and colour
    6. inspect audio, subtitle, and caption tracks
    7. inspect chapters, thumbnails, recording, and subject metadata
    8. traverse versions and transformations
    9. inspect rights, integrity, and provenance
    10. return confidence

  output:
    - video_resource
    - identifier
    - representations
    - duration
    - format
    - video_codec
    - audio_codec
    - frame_geometry
    - frame_rate
    - tracks
    - captions
    - integrity
    - provenance
    - confidence

# ---------- INFERENCE ----------
inference:
  IF parser validates video representation
  THEN identify VideoFormat
  WITH confidence = 0.99

  IF authoritative VideoIdentifier resolves uniquely
  THEN identify VideoResource
  WITH confidence = 1.00

  IF transformed representation references source video
  THEN infer derivation relationship

  IF caption track has automated generation method
  THEN classify caption as machine_generated
  AND preserve confidence

  IF metadata remains ambiguous
  THEN preserve candidate interpretations
  AND reduce confidence

# ---------- OUTPUT CONTRACT ----------
output:
  ontology_entity: VideoMetadata
  video_identity: machine_interpretable
  representations: format_and_codec_aware
  duration: explicit
  frame_metadata: preserved
  audiovisual_tracks: separately_addressable
  captions_and_subtitles: distinguishable
  recording_metadata: traceable
  generated_recorded_distinction: preserved
  integrity: verifiable
  transformations: traceable
  provenance: preserved
  uncertainty: explicit
  semantic_retrieval: enabled

end flow
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ