URL: https://linuxfr.org/news/integrer-des-videos-dans-des-fichiers-pdf Title: Intégrer des vidéos dans des fichiers PDF Authors: gouttegd Florent Zara et rootix Date: 2013年11月12日T12:55:07+01:00 License: CC By-SA Tags: latex, richard_stallman et libreoffice Score: 39 Comme vous êtes [demandeurs de howto/documentation](http://linuxfr.org/sondages/quel-contenu-aimeriez-vous-voir-plus-souvent-sur-linuxfr-org), on pense à vous. Après l'[invitation de RMS](http://linuxfr.org/news/how-to-inviter-richard-stallman-a-une-conference), [héberger son propre courriel](http://linuxfr.org/news/heberger-son-courriel), voici l'intégration de vidéos dans un fichier PDF. Lorsque je présente mes travaux lors d’un meeting ou d’un séminaire, j’ai parfois (souvent, en fait) besoin de présenter des vidéos. N’étant pas grand fan de LibreOffice Impress (encore moins, tu t’en doutes, de PowerPoint), plutôt adepte de _Beamer_, je me suis penché sur l’art et la manière d’inclure une vidéo dans un PDF. Afin que ça ne se perde pas, je te confie le résultat de cette inclinaison. NdM : merci à gouttegd pour son journal. ---- [Journal à l'origine de la dépêche](http://linuxfr.org/users/gouttegd/journaux/integrer-des-videos-dans-des-fichiers-pdf) ---- # Le format PDF et les vidéos # Il existe trois façons d’intégrer une vidéo au sein d’un document PDF. ## Les _Movie annotations_ ## La première méthode a été introduite dans la version 1.2 du format PDF, sous la forme du type d’annotation « Movie » (une _annotation_, dans le jargon PDF, désigne toutes sortes d’objets avec lesquels l’utilisateur peut interagir). Il s’agit _a priori_ de la méthode la plus simple. Elle consiste en une seule annotation contenant un lien vers la vidéo (il peut s’agir d’un lien vers un fichier externe ou, à partir de PDF 1.3, d’un lien vers un fichier inclus directement dans le fichier PDF) et quelques paramètres contrôlant son affichage (taille, aspect, rotation, affichage ou non de boutons de lecture/pause, etc.). Voici un exemple d’une telle annotation : ``` 1 0 obj << /Type /Annot /Subtype /Movie /Rect [x1 y1 x2 y2] % emplacement de la vidéo sur la page /Movie << /F (video.avi)>> % lien vers le fichier /A << /ShowControls true>> % paramètres d’affichage (ici, on demande l’affichage des boutons de contrôle)>> endobj ``` ## Les _Screen annotations_ ## La seconde méthode repose sur les fonctionnalités multimédia introduites dans PDF 1.5, et plus particulièrement l’annotation de type « Screen ». Cette méthode est plus complexe et nécessite au moins quatre objets distincts. D’abord, l’annotation « Screen » proprement dite : ``` 1 0 obj << /Type /Annot /Subtype /Screen /Rect [x1 y1 x2 y2] % emplacement de l’annotation /P nn 0 R % référence à la page à laquelle l’annotation est rattachée /T (Titre du film) % indicatif uniquement /A 2 0 R % référence vers un « dictionnaire d’actions »>> endobj ``` Le « dictionnaire d’actions » indique le comportement à adopter lorsque l’utilisateur interagit avec l’annotation. Voici le plus simple exemple, où l’on demande un comportement élémentaire (cliquer sur l’annotation déclenche la lecture, cliquer à nouveau met en pause) : ``` 2 0 obj << /Type /Action /S /Rendition /R 3 0 R % référence vers un objet de type « Media Rendition » /AN 1 0 R % référence retour vers l’annotation « Screen » /OP 0 % comportement standard (cliquer pour lire/arrêter)>> endobj ``` Le dictionnaire d’actions peut être plus complexe et permet notamment l’utilisation de Javascript pour coder les actions de son choix. L’objet « MediaRendition », référencé dans le dictionnaire d’actions, indique au minimum le média à jouer, et optionnellement comment le jouer : ``` 3 0 obj << /Type /Rendition /S /MR /C 4 0 R % référence vers un objet « Media Clip Data » /P << /Type /MediaPlayParams ...>> % options de lecture /SP << /Type /MediaScreenParams ...>> % options d’affichage>> endobj ``` Enfin, l’objet « Media Clip Data » représente le média à jouer proprement dit (ici, sous la forme d’un lien vers un fichier externe, mais ça pourrait être une référence vers un fichier inclus dans le PDF) : ``` 4 0 obj << /Type /MediaClip /S /MCD /D (video.avi) % lien vers le fichier vidéo /CT (video/avi) % type MIME>> endobj ``` ## Les _Rich Media annotations_ ## La troisième méthode a été introduite par Adobe Acrobat 9. C’est une méthode encore plus complexe que la précédente (raison pour laquelle je ne fournirai pas d’exemple), mais en résumé, le principe consiste à confier la lecture de la vidéo à un lecteur Flash qui sera lui-même inclus dans le fichier PDF. C’est grosso modo la transposition dans les visionneurs PDF de ce qui se fait déjà dans les navigateurs web, et comme pour les navigateurs, cela nécessite que les visionneurs PDF soient capables d’exécuter du Flash. (Vous pensiez être débarrassé du plugin Flash de votre navigateur avec HTML5 ? Tel Saruman qui chassé d’Isengard réapparait dans la Comté, le voici qui revient dans votre visionneur PDF...) Les deux premières méthodes (_Movie_ et _Screen annotations_) font partie de la version standardisée du format PDF ([PDF 1.7, aka ISO3200-1:2008](http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf)), bien que la première y soit officiellement déclarée comme dépréciée en faveur de la seconde. La troisième méthode (_Rich Media annotation_) est documentée dans une extension de Adobe à la norme ISO3200 ([PDF 1.7 Extension Level 3](http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/adobe_supplement_iso32000_1.pdf)), mais non standardisée. # Générer un PDF avec vidéo(s) intégrée(s) # Maintenant qu’on sait ce qu’offre le format PDF, comment fait-on, concrètement, pour produire un PDF contenant des vidéos ? Je parlerai essentiellement de LaTeX, parce que c’est ce que j’utilise et que ça fonctionne. Je dirai également deux mots de ce qui est supposé fonctionner avec DocBook. Si vous utilisez d’autres outils pour produire des PDF et qu’ils permettent l’inclusion de vidéos, manifestez-vous dans les commentaires. ## LaTeX ## Il existe au moins trois paquets LaTeX permettant d’inclure une vidéo, chacun supportant l’une des trois méthodes décrites ci-dessus. Le paquet *multimedia*, écrit par Till Tantau (aussi auteur de *beamer*, les deux paquets sont d’ailleurs distribués ensemble et la documentation de *multimedia* est incluse dans celle de *beamer*, même si chaque paquet peut être utilisé de façon indépendante), génère des _Movie annotations_ conformes au format PDF 1.2. ```latex \usepackage{multimedia} ... \movie[showcontrols,poster,width=4cm,height=2cm]{}{video.avi} ``` À noter que *multimedia* n’inclut pas physiquement le fichier vidéo dans le fichier PDF (ce qui n’est possible qu’à partir de PDF 1.3). Le fichier vidéo doit donc accompagner le fichier PDF pour que le visionneur PDF ait une chance de le trouver. Le paquet *movie15*, écrit par Alexander Grahn, génère des _Screen annotations_ conformes au format PDF 1.5. ```latex \usepackage{movie15} ... \includemovie[controls,poster]{4cm}{2cm}{video.avi} ``` Contrairement au paquet précédent, la vidéo est ici réellement incluse dans le fichier PDF. De plus, *movie15* génère aussi une _File Attachment annotation_ qui permet, dans les visionneurs PDF qui supportent ce type d’annotation, d’offrir à l’utilisateur la possibilité d’extraire facilement le fichier inclus (autrement qu’en ayant recours à des outils comme _pdfannotextract_ ou _poppler-glib-demo_). Enfin, le paquet *media9*, écrit par le même Alexander Grahn, génère des _Rich Media annotations_ compatibles avec Adobe Reader 9 et suivants. ```latex \usepackage{media9} ... \includemedia[% addresource=video.avi, flashvars={source=video.avi}]{}{VPlayer.swf} ``` (Avec tout le respect que j’ai pour Alexander Grahn, ne l’écoutez pas quand il dit que *movie15* est obsolète et devrait être remplacé par *media9*. Vous l’aurez compris, les deux paquets ne sont pas _du tout_ équivalents et le second ne peut pas être considéré comme une simple évolution du premier, puisqu’ils sont basés sur des méthodes d’inclusion complètement différentes — l’une standardisée, l’autre non.) ## DocBook ## Voici un exemple sorti tout droit du [DocBook: The Definitive Guide](http://www.docbook.org/tdg/en/html/docbook.html) : ```xml Si vous lisez ceci, quelque chose n’a pas fonctionné... ``` Avec la chaîne de production que j’utilise pour les documents DocBook (source DocBook → traitement par [DocBook XSL Stylesheets](http://wiki.docbook.org/DocBookXslStylesheets) → source intermédiaire XSL-FO → traitement par [Apache FOP](http://xmlgraphics.apache.org/fop/) → document PDF), ben... ça ne fonctionne pas. :( Le document résultant contient l’image de secours, mais aucune trace de la vidéo. Il semble s’agir d’une limitation du format intermédiaire XSL-FO, qui apparemment ne permet pas l’inclusion de vidéos — en tout cas rien n’indique que la directive _fo:external-graphic_ puisse être utilisée pour autre chose que des images fixes. # Lire un PDF avec vidéo(s) intégrée(s) # Maintenant qu’on sait produire un PDF contenant des vidéos, où peut-on le lire et avec quoi ? La réponse n’est malheureusement pas « sur n’importe quelle machine avec n’importe quel visionneur PDF. » ## Adobe Reader (oui, je sais) ## Adobe Reader sur Windows supporte les _Screen annotations_ et, à condition d’avoir le plugin Flash installé, les _Rich Media annotations_. Les _Movie annotations_ ne sont apparemment plus supportées. Adobe Reader sous Mac OS X supporte les deux annotations standardisées, bien que la vidéo que j’ai testée s’est avérée illisible car dans un format « non-reconnu par QuickTime ». Du MPEG-4 Part 2 dans un conteneur AVI, ça ne me paraît pourtant pas très exotique comme format, mais bon... Quoi qu’il en soit, le problème n’est pas imputable au visionneur PDF lui-même, qui ne fait que se reposer sur les décodeurs vidéos de la plate-forme. Et les spécifications du format PDF ne disent rien du tout sur les formats vidéos supportés, chaque implémentation supportant ce qu’elle veut. (À noter qu’avec la méthode des _Screen annotations_, il devrait être possible d’inclure plusieurs versions d’une même vidéo dans des formats différents et laisser le visionneur choisir celle qu’il peut lire, mais le paquet *movie15* ne permet pas cela.) Adobe Reader sous Mac OS X devrait en principe supporter les _Rich Media annotations_, mais la version que j’ai testée plante irrémédiablement dès qu’on ouvre une page contenant une telle annotation. Adobe Reader sous GNU/Linux ressemble à une plaisanterie (je ne parlerai même pas du fait que nous n’ayons droit qu’à une version 9.1 et quelques en 32 bits...). La lecture des _Movie_ et _Screen annotations_ nécessite de télécharger un « player multimédia » qui n’est pas inclus d’office. Pourquoi pas, mais là où ça devient amusant, c’est lorsque Reader tente effectivement de télécharger ledit player [à cette adresse](http://cgi.adobe.com/special/acrobat/mediaplayerfinder/mediaplayerfinder.cgi?os=Unix&lang=FRA&prod=Reader&ver=9.1026&mime=video/avi), et que le serveur de Adobe répond par un 403 Forbidden « Sorry, browsing is not allowed in this directory ». Traduction : « Utilisateurs de GNU/Linux, allez vous faire mettre. Cordialement, Adobe. » Les _Rich media_ annotations ne sont pas davantage supportées, mais ça c’était attendu, le support de Flash dans les versions GNU/Linux de Reader ayant été explicitement laissé de côté (non pas que je le regrette). Mais chez Adobe, même le non-support est source de bug : l’ouverture d’une page contenant une _Rich Media annotation_ fait planter le lecteur avec une « erreur d’analyse des données 3D ». ## Les visionneurs libres ## Le vénérable [xpdf](http://www.foolabs.com/xpdf/) (3.3), il fallait probablement s’y attendre, ne supporte aucune des trois formes d’inclusion vidéo. La bibliothèque [poppler](http://poppler.freedesktop.org/), dans sa version 0.24.2, reconnaît correctement les _Movie annotations_ et les _Screen annotations_, soit les deux formes standardisées. Les _Rich Media annotations_ ne sont pas supportées. Mais le support par _poppler_ ne suffit pas, il appartient ensuite aux visionneurs basés sur _poppler_ de savoir quoi faire des annotations que leur renvoie la bibliothèque. À ce niveau, les fortunes sont variables : * [Okular](http://okular.kde.org/) 0.4.13, le visionneur de KDE, lit les _Movies annotations_ mais pas les _Screen annotations_. En revanche, il reconnait les _File attachment annotations_ générées par *movie15*, ce qui fournit au moins une solution de repli (à défaut de pouvoir lire la vidéo, l’utilisateur se voit offrir la possibilité d’enregistrer le fichier vidéo vers son disque dur, où il peut ensuite le lire avec le lecteur de son choix). * [Evince](https://projects.gnome.org/evince/) 3.4.0, le visionneur de Gnome, reconnait les _Screen annotations_. Il ne permet pas de les lire directement dans le PDF, mais lance un VLC externe pour cela (je n’ai pas regardé si on pouvait remplacer VLC par un autre lecteur). Il ne reconnait pas les _Movie annotations_. * [Epdfview](http://freecode.com/projects/epdfview) 0.1.8 ne reconnait rien du tout. * L’excellentissime [QPdfPresenterConsole](http://sourceforge.net/projects/qpdfpresenter/) 2.5.13, spécialisé dans l’affichage de présentations, reconnait les _Screen annotations_. Il repose sur libvlc pour les lire, et la vidéo jouée s’affiche à son emplacement prévu sur la page, et non dans une fenêtre externe comme avec Evince. Incidemment, le seul défaut de _QPdfPresenterConsole_ est d’être assez peu connu. [MuPDF](http://mupdf.com/) 1.2, un visionneur PDF non-basé sur _poppler_, ne reconnait aucune annotation — bien que la bibliothèque sous-jacente, développée expressément pour ce logiciel, semble capable de le faire. Pour récapituler : | Visionneur | Movie (PDF 1.2) | Screen (PDF 1.5) | Rich Media (PDF 1.7 ext.lev.3) | |------------------------|------------------|-------------------|---------------------------------| | Adobe Reader (Windows) | non | oui | oui (avec plugin Flash) | | Adobe Reader (Mac OS) | oui | oui | peut-être, quand ça plante pas | | Adobe Reader (GNU) | non | non | non | | Xpdf | non | non | non | | Okular | oui | non | non | | Evince | non | oui (externe) | non | | Epdfview | non | non | non | | QPdfPresenterConsole | non | oui | non | | MuPDF | non | non | non | # Bilan provisoire # Au vu de ces constatations, j’ai pour l’instant choisi le paquet *movie15*. La sortie qu’il produit est standard et semble être la plus largement supportée, même si le problème du format de la vidéo (trouver un format visionnable partout) reste posé. Si vous souhaitez tester la lecture de vidéo avec d’autres visionneurs, d’autres versions, sur d’autres plate-formes, je fournis [une archive](http://www.incenp.org/files/misc/2013/pdf-video-samples.zip) contenant trois fichiers PDF générés avec chacun des trois paquets LaTeX sus-mentionnés et utilisant donc les trois formes possibles d’inclusion. L’archive contient aussi le document DocBook, pour ceux qui voudraient tester une autre chaîne de production que celle passant par XSL-FO.

AltStyle によって変換されたページ (->オリジナル) /