Comme vous êtes demandeurs de howto/documentation, on pense à vous. Après l'invitation de RMS, héberger son propre 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.
Sommaire
- Le format PDF et les vidéos
- Générer un PDF avec vidéo(s) intégrée(s)
- Lire un PDF avec vidéo(s) intégrée(s)
- Bilan provisoire
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), 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), 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.
\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.
\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.
\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 :
<mediaobject>
<videoobject>
<videodata fileref="video.avi" />
</videoobject>
<imageobject>
<imagedata fileref="fallback.png" />
</imageobject>
<textobject>
<para>Si vous lisez ceci, quelque chose n’a pas fonctionné…</para>
</textobject>
</mediaobject>
Avec la chaîne de production que j’utilise pour les documents DocBook (source DocBook → traitement par DocBook XSL Stylesheets → source intermédiaire XSL-FO → traitement par Apache 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, 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 (3.3), il fallait probablement s’y attendre, ne supporte aucune des trois formes d’inclusion vidéo.
La bibliothèque poppler, 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 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 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 0.1.8 ne reconnait rien du tout.
L’excellentissime QPdfPresenterConsole 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 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 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.
Aller plus loin
- Journal à l'origine de la dépêche (341 clics)
# «Bref…
Posté par ariasuni . Évalué à 4. Dernière modification le 12 novembre 2013 à 19:10.
… la prochaine fois je ferais en trucmuchepouetpouet.js avec des gifs animés.»
Écrit en Bépo selon l’orthographe de 1990
# lien cassay
Posté par Krunch (site web personnel) . Évalué à 3.
Le lien https://linuxfr.org/moderation/news/how-to-inviter-richard-stallman-a-une-conference concernant l'invitation de RMS ne fonctionne pas. Quand on tente d'y accéder en étant déconnecté, ça demande de se connecter. Quand on tente d'y accéder quand on est connecté, ça boucle infiniment entre https://linuxfr.org/compte/connexion
et le lien original.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: lien cassay
Posté par Florent Zara (site web personnel, Mastodon) . Évalué à 3.
Corrigé, merci.
# Spoiler bordel !
Posté par O'neam Anne . Évalué à 7.
Ce n'est heureusement pas mon cas, mais il reste des gens qui n'ont pas encore lu le Seigneur des Anneaux. Pensez à eux, avant de dévoiler les rebondissements de l'intrigue comme ça.
Sinon, dépêche très intéressante !
Pour information, chez moi Evince ouvre la vidéo avec mplayer. Je pense qu'il se contente de faire un xdg-open sur le fichier, ce qui est à priori la méthode naturelle pour une application qui doit ouvrir un fichier qu'elle ne sait pas gérer elle-même. Mais c'est une application Gnome, et donc peut-être fait-il (elle ?) directement un gvfs-open.
LinuxFr, parfois c'est bien de la MERDE : https://linuxfr.org/users/c2462250/journaux/ecriture-inclusive-feministes-et-wikipedia#comment-1793140
# Et Impress!ve ?
Posté par Toff' . Évalué à 1. Dernière modification le 12 novembre 2013 à 23:02.
J'utilise régulièrement Impress!ve pour présenter mes pdf réalisés avec beamer.
Je suis très curieux de savoir si l'inclusion de vidéo fonctionne avec (même si j'ai un gros doute).
L'as-tu testé?
Toff'
[^] # Re: Et Impress!ve ?
Posté par gouttegd . Évalué à 7.
Non, mais vu que la page d’accueil annonce que le rendu est fait avec Xpdf ou Ghostscript, il est quasi-certain je pense que les vidéos ne sont pas supportées : Xpdf ne les gère pas et j’imagine mal Ghostscript (qui est un interpréteur de langage PostScript) le faire. Et si les développeurs avaient ajouté eux-mêmes le support des vidéos, ils en feraient certainement état parmi les features de leur logiciel.
Par ailleurs, quand je lis ça dans la FAQ, ça ne m’impress!onne pas beaucoup :
[^] # Re: Et Impress!ve ?
Posté par Altor . Évalué à 2.
Impressive permet d'insérer des vidéos entres deux pages pdf et de les lires automatiquement avec mplayer. J'ai pu le tester sur windows et linux et ça marche.
# Okular
Posté par Shuba . Évalué à 3.
Je viens de tester avec okular 0.15.5, il lit les movie annotations et les screen annotations, le support des screen annotations a du être rajouté récemment.
[^] # Re: Okular
Posté par claudex . Évalué à 3.
Je viens de tester avec Okular 0.16.5 et il ne me lit pas les screen annotation (mais bien les movie annotation, ce n'est donc pas un problème de codec).
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Okular
Posté par Shuba . Évalué à 3.
Étrange… Moi dans l'archive proposée, je lis le movie annotation (test-multimedia.pdf) et le screen annotation (test-movie15.pdf) et pas le rich media annotation (test-media9.pdf, mais ça ça me semble attendu). Du coup ça viendrait d'un packaging de KDE différent? Moi c'est celui de Kubuntu 12.10.
[^] # Re: Okular
Posté par claudex . Évalué à 4.
Je suis sur celui d'opensuse 12.3.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Okular
Posté par Altor . Évalué à 4.
@chez moi ça marche comme toi. slackware 14.1 et okular 0.17.0
# bref
Posté par fravashyo . Évalué à 7. Dernière modification le 13 novembre 2013 à 09:08.
En conclusion, vu que c'est mal supporté, mal intégré, et pas fait pour ça*, c'est une très mauvais idée de vouloir intégrer des vidéos dans un fichier pdf. Je sais que certains veulent l'utiliser pour tous les usages (musique, visualisation 3D, pourquoi pas rajouter un tableur tant qu'on y est ??), mais à un moment il faut s'arrêter de rendre ce format incompatible avec tout ce qui n'est pas adobe.
*rappel wikipedia :
« I approve of any development that makes it more difficult for governments and criminals to monopolize the use of force. » Eric Raymond
[^] # Re: bref
Posté par gouttegd . Évalué à 7.
En l’occurence, et malgré tout le plaisir que j’ai à cracher sur Adobe, les deux premières méthodes d’intégration sont standards (et étaient déjà parfaitement documentées avant d’être normalisées), donc si ça marche mal avec autre chose que Adobe Reader, ce n’est pas à Adobe qu’il faut s’en prendre.
Si j’ai une chose à reprocher à Adobe, c’est plutôt d’avoir ajouté une troisième méthode (à base de Flash qui plus est, argh), dont l’intérêt est plus que contestable.
Pour les méthodes standards, la bibliothèque Poppler supporte sans problèmes les annotations concernées, il appartient ensuite aux développeurs des visionneurs d’en tirer profit. Certains le font, d’autres non.
Je préfère utiliser un format standard qui existe maintenant qu’un hypothétique format spécialisé qui reste à inventer et qui sera standardisé (s’il l’est un jour) dans quinze ans.
[^] # Re: bref
Posté par Thomas Douillard . Évalué à 6.
Comme HTML ?
[^] # Re: bref
Posté par barmic . Évalué à 5.
Le mauvais support est plus la faute des lecteurs que de la norme qui décris bien le fonctionnement (dans le cas des 2 premières solutions).
Le fait que ce n'est pas fait pour ça à la base ne veut pas dire grand chose. HTML n'est pas fait pour être dynamique, wikipedia n'est pas fait pour être une source de définition (ce sont les références que l'on trouve dans wikipedia qui devraient l'être), etc
Il faut lutter par contre contre la troisième solution qui d'un point de vu éthique n'est pas normalisée, ni documentée et produit une incompatibilité importante et qui d'un point de vu technique est monstrueuse (intégrer une VM complète dans un langage de description de document).
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# De pire en pire
Posté par stopspam . Évalué à 5.
Du javascript et maintenant des vidéos, ce format devient de plus en plus poubelle. Après on s'étonne que Adobe pèse 180Mo et soit bourré de faille.
On pourrait faire un parallèle avec les navigateur qui veulent devenir des environnements de développement pour applications lourdes.
Si je zippe 2 fichiers odt et mp4 : j'obtiens la même chose, en moins merdique.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.