matmat / ClairMeta

Clairmeta is a python package for Digital Cinema Package (DCP) probing and checking.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status PyPI version Code coverage

Clairmeta

Clairmeta is a python package for Digital Cinema Package (DCP) probing and checking.

Features

  • DCP Probe : metadata extraction of the whole DCP, including all XML fields and MXF assets inspection.
  • DCP Checker : advanced DCP validation tool, including (non exhaustive) :
    • SMPTE / Interop standard convention (naming, …)
    • Integrity (MIME type, size, hash) of all assets
    • Foreign file identification
    • XSD Schema validation for XML files (VOLINDEX, ASSETMAP, CPL, PKL)
    • Digital signature validation (CPL, PKL)
    • Intra / Inter Reels integrity and coherence
    • Metadata match between CPL assets and MXF headers
    • Re-link VF / OV
    • Picture tests : FrameRate, BitRate, …
    • Sound tests : Channels, Sampling, …
    • Subtitle : Deep inspection of Interop and SMPTE subtitles
  • DSM / DCDM Checker : basic image file sequence validation with some specific rules.

Installation

Requirements :

  • Python :
    • Should work on python 2.7 and python 3.4+
    • Tested on : python 2.7, python 3.6
  • Platform :
    • Should work on Windows, macOS, Linux
    • Tested on : macOS 10.12
  • External (non-python) dependencies :
    • asdcplib
    • mediainfo (opt)
    • sox (opt)

Install from PyPI package (reminder : this does not install external dependencies):

pip install clairmeta

Install from Debian package (all requirements will be automatically installed):

# Optional : add Bintray public key
apt-get install dirmngr
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 379CE192D401AB61
gpg --export --armor 379CE192D401AB61 | apt-key add -

# Add Clairmeta repository to apt sources
# Replace <distro> appropriately
# Ubuntu 14.04 : use trusty
# Ubuntu 16.04 : use xenial
# Ubuntu 17.04 : use artful
# Ubuntu 18.04 : use bionic
echo "deb https://dl.bintray.com/ymagis/Clairmeta <distro> main" | sudo tee /etc/apt/sources.list.d/clairmeta.list

sudo apt-get update
sudo apt-get install python3-clairmeta

Usage

General

As a command line tool :

python3 -m clairmeta.cli probe -type dcp path/to/dcp
python3 -m clairmeta.cli probe -type dcp path/to/dcp -format json > dcp.json
python3 -m clairmeta.cli probe -type dcp path/to/dcp -format xml > dcp.xml
python3 -m clairmeta.cli check -type dcp path/to/dcp
python3 -m clairmeta.cli check -type dcp path/to/dcp -format json > check.json
python3 -m clairmeta.cli check -type dcp path/to/dcp -format xml > check.xml
python3 -m clairmeta.cli check -type dcp path/to/dcp -kdm /path/to/kdm -key /path/to/privatekey
python3 -m clairmeta.cli check -type dcp path/to/dcp -progress

As a python library :

from clairmeta import DCP

dcp = DCP("path/to/dcp")
# Parse DCP
dcp.parse()
# Check DCP
status, report = dcp.check()
# Check DCP VF against OV
status, report = dcp.check(ov_path="/path/to/dcp_ov")

# Check DCP with default console progression report
from clairmeta.utils.file import ConsoleProgress
status, report = dcp.check(hash_callback=ConsoleProgress())
# Alternatives
# - function matching utils.file.ConsoleProgress.__call__ signature
# - derived class from utils.file.ConsoleProgress

Profiles

Check profile allow custom configuration of the DCP check process such as bypassing some unwanted tests or criteria specification. To implement a check profile, simply write a JSON file derived from this template (actual content listed below is for demonstration purposes only) :

  • criticality key allow custom criteria level specification, check name can be incomplete to quickly ignore a bunch of tests, default is used if no other match where found.
  • bypass key allow specific test bypassing, incomplete names are not allowed.
{
    "criticality": {
        "default": "ERROR",
        "check_dcnc_": "WARNING",
        "check_cpl_reel_duration_picture_subtitles": "WARNING",
        "check_picture_cpl_avg_bitrate": "WARNING",
        "check_picture_cpl_resolution": "WARNING"
    },
    "bypass": ["check_assets_pkl_hash"]
}

Custom profile check :

python3 -m clairmeta.cli check -type dcp path/to/dcp -profile path/to/profile.json
from clairmeta import DCP
from clairmeta.profile import load_profile

dcp = DCP("path/to/dcp")
profile = load_profile("/path/to/profile.json")
status, report = dcp.check(profile=profile)

Logging

Logging is customizable, see settings.py file or below. By default Clairmeta logs to stdout and a rotated log file.

'level': 'INFO'  # Minimum log level
'enable_console': True  # Enable / Disable stdout logging
'enable_file': True  # Enable / Disable file logging
'file_name': '/log/path/clairmeta.log'  # Log file absolute path
'file_size': 1e6  # Individual log file maximum size
'file_count': 10  # Number of files to rotate on

Contributing

  • To setup your environment, use pipenv :
pip install pipenv
git clone https://github.com/Ymagis/ClairMeta.git
cd clairmeta
pipenv install --dev [--two]
pipenv check
# Enter virtual environment
pipenv shell
# Code...
# Get tests resources
git clone https://github.com/Ymagis/ClairMeta_Data tests/resources
# Run tests
nosetests --nocapture --with-doctest --doctest-options=+ELLIPSIS --with-coverage --cover-package=clairmeta
# Leave virtual environment
exit
  • Open a Pull Request
  • Open an Issue

Changes

The release changes are available on Github: https://github.com/Ymagis/ClairMeta/releases

References

The following sources / software were used :

About

http://www.ymagis.com/

About

Clairmeta is a python package for Digital Cinema Package (DCP) probing and checking.

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Python 97.9%Language:Shell 1.9%Language:Makefile 0.3%