Digital Cinema Package (DCP) probing and checking utility
Project description
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.3+
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 -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 :
asdcp-lib : http://www.cinecert.com/asdcplib/
mediainfo : https://mediaarea.net/
SMPTE Digital Cinema standards : https://www.smpte.org/
Interop Digital Cinema specifications : https://cinepedia.com/interop/
Digital Cinema Initiative specifications : http://www.dcimovies.com/specification/index.html
ISDCF Naming Convention : http://isdcf.com/dcnc/
Texas Instrument Digital Cinema Subtitles specifications
About
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for clairmeta-1.0.8-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf2b8f47a2644bdbca4c4089c3fa39d410492378a7db01360065ad0d2ddf1efc |
|
MD5 | bb46f94ac1d307bca168ad540c9ab665 |
|
BLAKE2b-256 | e8fd355b92d106ca7ac5e837a2414706396fd32852121097ad2d9c2604f8aad0 |