Metadata-Version: 2.1
Name: clairmeta
Version: 1.1.2
Summary: Digital Cinema Package (DCP) probing and checking utility
Home-page: https://github.com/Ymagis/ClairMeta
Author: Ymagis
Author-email: support.sol@ymagis.com
License: BSD
Keywords: digital cinema dcp dcdm dsm check probe smpte interop
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Topic :: Utilities
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
Requires-Dist: lxml
Requires-Dist: dicttoxml
Requires-Dist: xmltodict
Requires-Dist: python-dateutil
Requires-Dist: six
Requires-Dist: pyopenssl
Requires-Dist: pycountry
Requires-Dist: shutilwhich
Requires-Dist: freetype-py

|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 :

-  asdcp-lib : http://www.cinecert.com/asdcplib/
-  sox : http://sox.sourceforge.net/
-  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
-----

http://www.ymagis.com/

.. |Build Status| image:: https://travis-ci.org/Ymagis/ClairMeta.svg?branch=1.0.0b1
   :target: https://travis-ci.org/Ymagis/ClairMeta
.. |PyPI version| image:: https://badge.fury.io/py/clairmeta.svg
   :target: https://badge.fury.io/py/clairmeta
.. |Code coverage| image:: https://codecov.io/gh/Ymagis/ClairMeta/branch/develop/graph/badge.svg
  :target: https://codecov.io/gh/Ymagis/ClairMeta

