Lire un fichier DCP avec VLC

Ça fait un moment que j’avais ce sujet dans mes brouillons, et la dernière version de VLC permet enfin quelque chose de correct : il est possible de lire un DCP avec le logiciel open source.

MAJ : Suite à quelques remarques sur Twitter, 2/3 corrections (cf.).

Un DCP, c’est quoi ? Le DCP (Digital Cinema Package) est le standard utilisé dans le monde du cinéma pour diffuser un film. Quand vous allez dans une salle obscure pour regarder un film, il y a 99 % de chances (en 2018) que ce soit un DCP. La lecture de DCP sur un ordinateur n’est pas quelque chose de trivial pour plusieurs raisons. D’abord, les DCP prennent de la place. Beaucoup de place. Dans un DCP, la vidéo est généralement encodée en JPEG2000, image par image, à un débit maximal de 250 Mb/s (~31 Mo/s) et l’audio est en PCM sur 24 bits, en 48 ou 96 kHz (~1 Mb/s par canal). Ensuite, le décodage du JPEG2000 demande pas mal de puissance. Les définitions classiques en “2K” sont 1998 x 1080, 2048 x 1080 ou 2048 x 858 et 3996 x 2160, 4096 x 1716 ou 4096 x 2160 en 4K. Plus concrètement, l’appareil doit décoder 24 images (ou plus, 48 possibles en 3D ou en HFR) en 1 seconde, avec un codec notoirement lourd et rarement utilisé (donc sans accélération dans nos puces). A noter que le choix du JPEG2000 est important : en cas d’artefacts (et vu le débit, il y en a assez peu), on ne se retrouve pas avec des macroblocs comme en JPEG ou MPEG.

Petit aparté sur le JPEG2000 : ce successeur du JPEG annoncé en 2000 devait apporter une meilleure compression avec des artefacts moins visibles, mais il n’a jamais réussi à trouver sa place. Beaucoup de logiciels le supportent (macOS le gère parfaitement) mais aucun appareil photo (à ma connaissance) ne prend en charge le JPEG2000 nativement. En dehors de quelques caméras de surveillance, le JPEG2000 reste donc très rare… sauf dans le monde du cinéma. Si certains l’attendaient comme le messie, il souffre de deux problèmes : c’est assez lourd à manipuler (lecture et encodage) et le gain par rapport à du JPEG classique reste assez léger. Dans un appareil photo qui peut de toute façon déjà stocker des centaines ou des milliers de photos, le gain par rapport au JPEG ne se justifie pas au vu de la complexité, et le RAW le remplace bien pour les questions de qualité.

Lire et trouver des DCP

Trouver des lecteurs capables de prendre en charge le DCP en payant n’est pas très compliqué. Mais en open source (ou gratuit), ça reste assez rare. Depuis quelques version, VLC le propose et j’ai donc essayé. Première étape, avant même de passer à VLC, trouver des DCP. On trouve assez facilement des trailers sur le Net, dans les sections dédiées aux exploitants chez les distributeurs (une liste existe). J’ai pris des trucs chez Gaumont pour tester. Attention, ça peut être (très) gros, genre 2 ou 3 Go pour un fichier de quelques minutes. La majorité des DCP utilise du JPEG2000, certains (rares) utilisent encore la vieille norme MPEG2. En effet, comme pour les Blu-ray, les premiers DCP travaillaient en MPEG2 en haute définition (1080p, du coup) mais c’est visiblement très rare. Forcément, la qualité ne vaut pas le JPEG2000 mais ça se décode facilement avec n’importe quel PC un peu moderne. Un DCP est un ensemble de fichiers qui contient du XML (la description des données), de la vidéo et de l’audio dans un conteneur XMF et des fichiers pour les sous-titres (notamment).

Le contenu d’un DCP

Avant de parler de VLC, je vais évoquer DCP-o-Matic. Ce logiciel open source de qualité permet de créer des fichiers DCP depuis n’importe quelle source ou presque et il existe un logiciel de lecture (DCP-o-Matic Player). Je l’évoque rapidement parce qu’il a un (gros) problème : il n’utilise qu’un seul coeur. Même avec un Core i7 Kaby Lake (MacBook Pro 2017), du coup, impossible de lire un DCP de façon fluide. Même en réduisant fortement la qualité (1/4 de définition, donc un rendu en 51 x 224 pour du Scope 2K), ce n’est vraiment pas fluide. Iina peut aussi lire les DCP, mais comme VLC, il n’arrive pas à le faire en temps réel sur mon CPU.

Avec VLC, donc. Par défaut, VLC va essayer de lire le DCP en définition native. Sur mon MacBook Pro et ses quatre coeurs, c’est impossible. On a une image de temps en temps, l’audio, et c’est tout. Et au prix de l’utilisation des quatre coeurs et de l’Hyper Threading. Sur un Mac Pro ou un iMac Pro gavé de coeurs, ça passe peut-être, mais sur le MacBook Pro, non. La solution passe par la ligne de commande pour réduire la qualité. Techniquement, VLC le propose au moins depuis la version 2.2, mais c’était notoirement buggé, la version 3.0 sortie récemment amène un support très correct.

/Applications/VLC.app/Contents/MacOS/VLC -vv --avcodec-options="{lowres=1}" dcp:///LINK/TO/DCP/FOLDER/

La valeur qui suit lowres indique la définition de l’image. 0 pour la définition native, 1 pour une division par 2, 2 pour une division par quatre. Avec Le Core i7 7700HQ de mon Mac, la valeur 0 demande trop de ressources, la valeur 1 passe souvent mais pas toujours. Avec un décodage en 1 024 x 429 (en gros la définition d’un DVD…), le processeur utilise tous ses coeurs et un autre programme qui tourne ou le Turbo qui arrive ses limites font vite perdre des images. Avec la valeur 2, c’est forcément fluide, mais la qualité est extrêmement dégradée. Ici, quelques captures d’une bande annonce en format Flat.

Le rendu en 1/2 définition


Natif (1998 x 1080)


1/2 (999 x 540)


1/4 (500 x 270)

Dans les autres trucs à savoir, on peut noter le fait que les films sont parfois livrés sur des disques durs et que certains serveurs utilisent des racks pour les disques comme dans les années 90 (et ce n’est pas donné), même si la distribution passe a priori de plus en plus par des téléchargements (fibre, satellite, etc.). La gestion des DRM et des autorisations est liée à un système de clés (KDM). VLC semble gérer ça mais je ne suis pas allé plus loin : je n’ai pas accès à des fichiers liés à des clés et aucune légitimité pour en diffuser.

Le rack