Le petit journal du pr0n: l'esclave des amazones numériques (et de marc dorcel..)
Le petit journal du pr0n
Informations et actualités cinématographiques
2013
19:04
Lire un film cinéma numérique avec des logiciels open-source comme VLC

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-&gt;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     = &amp;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 => 2048 )
A 1, c’est 1/2ème de la résolution initiale (2K/(1/2)) ( 50% du 2K => 1024 )
A 2, c’est 1/4ème de la résolution initiale (2K/(1/4)) ( 25% du 2K => 512 )
A 3, c’est 1/8ème de la résolution initiale (2K/(1/8)) ( 12.5% du 2K => 256 )

Suivant la puissance de votre ordinateur, calibrez le bon paramètre « lowres« .

(Note: ce sont les accès aux différentes « tiles » de résolution que permet le format JPEG2000. Notez que c’est idem si on est en 4K, où on a accès à la tile 2K, la tile 1K, la tile 1/2K etc…)

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 !

Vos commentaires
4 commentaire(s)

Comments

  • Tony dit :

    Faut que je teste ca ! :)

  • Tony dit :

    Au fait, comment on fait ca ? :
    « Pour tester, récupérez un film cinéma numérique (DCP) »

  • Michaël dit :

    plop juste pour signaler qu’une fraction se multiplie et pas divise ^^

    2k/1/8 en respectant les priorités des maths ça fait 2k : 0.125 = 16k

    signé l’emmerdeur qui compte sur vous pour signaler aussi ses erreurs :p

  • prae dit :

    Oui, j’ai été un peu rapide lors de la rédaction de l’article :)
    J’en ai profité pour simplifier l’explication :p

  • Laisser un commentaire