Lire un film cinéma numérique (DCP) avec un logiciel libre était pour l’instant assez complexe ou bien la colorimétrie n’était pas la bonne (XYZ), ou bien les performances étaient désastreuses sur un ordinateur sans puissance. Le problème vient d’être résolu récemment sur la mailing-list interne de ffmpeg, voici la procédure simplifiée :
Récupération du code FFMPEG (avec libav)
$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg-devel $ cd ffmpeg-devel $ patch -p1 < ffmpeg-dci.patch
Patch ffmpeg-dci (copie ici)
diff --git a/libavcodec/j2kdec.c b/libavcodec/j2kdec.c
index 683062d..3e78b0b 100644
--- a/libavcodec/j2kdec.c
+++ b/libavcodec/j2kdec.c
@@ -30,6 +30,7 @@
#include "avcodec.h"
#include "bytestream.h"
#include "internal.h"
+#include "thread.h"
#include "j2k.h"
#include "libavutil/common.h"
@@ -205,6 +206,7 @@ static int tag_tree_decode(J2kDecoderContext *s, J2kTgtNode *node, int threshold
static int get_siz(J2kDecoderContext *s)
{
int i, ret;
+ ThreadFrame frame = { .f = s->picture };
//
// COUPURE
// Intégralité ici: http://pastebin.com/r9Qw0sve
//
@@ -1330,6 +1328,7 @@ AVCodec ff_jpeg2000_decoder = {
.id = AV_CODEC_ID_JPEG2000,
.capabilities = CODEC_CAP_FRAME_THREADS,
.priv_data_size = sizeof(Jpeg2000DecoderContext),
+ .max_lowres = 31,
.decode = jpeg2000_decode_frame,
.priv_class = &class,
.pix_fmts = (enum PixelFormat[]) { AV_PIX_FMT_XYZ12,
(source: https://ffmpeg.org/trac/ffmpeg/ticket/1279)
Pour MacOSX :
$ port install openjpeg $ export CFLAGS="-I/opt/local/include/" $ export LDFLAGS="-L/opt//local/lib/"
Pour Linux
# n'installez pas la version 2.0 pour l'instant $ apt-get install libopenjpeg-dev libopenjpeg
Compilation
$ ./configure --enable-libopenjpeg $ make
Pour tester, récupérez un film cinéma numérique (DCP) :
./ffplay -lowres 2 ~/dcp/ts/1bf78c6d-7328-4363-ba5a-605b4ce275a6.mxf
Le paramètre important ici est « -lowres« .
A 0, vous aurez une qualité en pleine résolution (100% du 2K).
A 1, c’est 1/2ème de la résolution initiale (2K/(1/2)).
A 2, c’est 1/4ème de la résolution initiale (2K/(1/4)).
A 3, c’est 1/8ème de la résolution initiale (2K/(1/8)).
Suivant la puissance de votre ordinateur, calibrez le bon paramètre « lowres »
Et le résultat
VLC dépendant des librairies ffmpeg (libav), votre VLC (suivant quelques modifications bien entendu) pourra jouer un DCP avec la bonne colorimétrie et sur un ordinateur peu puissant.
Prochainement, la procédure pour l’intégrer sur ffmpeg/mplayer/VLC et avec le son.
EDIT
Pour tester avec un DCP : c’est par ici !







