Cette documentation a pour but de décrire de façon la plus large possible - et dans la limite du raisonnable - le Digital Cinema Package (DCP).
Depuis les premières spécifications DCI et la publication de différents outils depuis 2004-2005, il a toujours été difficile d'obtenir des informations sur les entrailles d'un DCP (du fait surtout de normes non publiques). Chacun y allant de ses implémentations sans expliquer, à moindre expert, le fonctionnement. Les différentes informations techniques sont la compilation de mes études, codes et notes techniques à travers le temps.
Cette documentation est à destination autant de l'expert que du néophyte :
Un néophyte, comprendre rapidement et facilement ce qu'est un DCP.
Un expert pourra s'y reporter rapidement sans avoir à relire les milliers de pages de normes SMPTE sur le sujet (ou même y redécouvrir des choses ?)
Cette documentation ne prétend pas être parfaite, elle peut comporter des erreurs, des oublis, des manquements ou des incompréhensions :
Si vous avez un certain niveau technique et historique et que vous identifiez une erreur ou un oubli, ne pas hésiter à me prévenir.
Si vous êtes néophyte et que certains passages vous semblent incompréhensibles ou manquant de clarté, ne pas hésiter à me prévenir également.
Si vous pensez qu'il manque un sujet dans la documentation, ne pas hésiter à m'en faire part, elle peut faire l'objet d'une extension.
Cette documentation ne se veut pas une traduction des différentes normes SMPTE et spécifications DCI. Ces dernières sont tellement vastes qu'il serait illusoire et contreproductif de le faire, en sachant qu'elles évoluent.
Cette documentation a pour but d'être évolutive malgré tout, elle n'est pas figée dans le temps et sera donc mise à jour régulièrement, par exemple pour rajouter des évolutions aux normes ou des nouveaux codes sources. Ne pas hésiter à y revenir ou consulter le changelog.
Les codes sources et techniques données ne se veulent pas être des « best practices of coding », les codes sources seront les plus simplifiés - parfois jusqu'au ridicule - afin de permettre de bien comprendre chaque étape. Je ne supporte pas les documentations donnant des codes sources que seules les experts peuvent relire. C'est pour moi une façon détournée malvenue qu'a l'auteur de justifier son "expertise face aux autres". Si vous trouvez un code source ou une technique encore trop complexe, ne pas hésiter à m'en faire part, je simplifierai davantage encore.
Ces codes sources ont une vocation secondaire : A être intégré à d'autres codes ou projets : c'est comme une bibliothèque de codes prêt-à-emploi, piochez et intégrez dans vos projets pour aller plus vite.
Les outils et prototypes
Les outils & prototypes utilisés dans la documentation ont été développés en parallèle de celle-ci. Vous croiserez ces outils à travers les différents chapitres. En supplément, vous découvrirez des versions allégées et plus simples de ces outils pour mieux comprendre les mécanismes sous-jacents.
En complément des données d'exemples à travers le répertoire des assets (que vous pouvez fouiller à travers les chapitres), vous aurez des petits programmes et morceaux de codes sources (parties pouvant être intégrées à la documentation pour études).
Ci-dessous, une brève présentation sur les principaux outils.
Un analyseur et extracteur des métadonnées et données MXF.
$ mxf_analyzer.py --help
-h, --help show this help message and exit
-f FILENAME, --filename FILENAME = mxf filename
-x EXTRACT, --extract EXTRACT = extract each KLV into files
-k KEY, --key KEY AES Key, ex. --key 00000000000000000000000000000000
-v, --verbose increase output verbosity
-n, --no-resolv Do not resolv UL (speed)
--filter FILTER filter by name
--fuzzy Fuzzy mode only (very slow)
--limit LIMIT stop after x klv parsed
--slow Slowdown parse to avoid flood loadavg