Carnet Wiki

VideoSPIP

Version 2 — Novembre 2008 Aurélie

Vidéos.SPIP.org, par Kent1 et BoOz

BoOZ

Principe

Sur Videos.spip.org, les vidéos sont publiées sur le principe du contenu généré par les utilisateurs, à la façon de Daily Motion ou de YouTube, sauf qu’on le fait nous-mêmes. Videos.spip.org est justement un petit Daily Motion en SPIP.

Ce qui intéressait Kent1 quand il a décidé de lancer Videos.spip.org, c’est de gérer toute la post-production vidéo à travers SPIP, c’est-à-dire, après l’étape de montage, gérer l’encodage des vidéos au format souhaité, tagger les images et les gérer dans le site Web. Comme il n’avait pas besoin de le faire pour lui, il a décidé de le faire pour SPIP en créant un site de tutoriels. Maintenant, trois ou quatre personnes travaillent sur ce projet, font des squelettes, des plugins...

L’idée est de proposer un dispositif de squelettes et de plugins aux gens et à d’autres hébergeurs éventuels, qui leur permette d’héberger eux-mêmes leurs vidéos, de les compresser dans différents formats, et aussi de gérer des sons.

Fonctionnement

Videos.spip.org est installé sur un serveur dédié sur lequel la limite d’upload est fixée à 300M. Pour l’instant, seuls certains formats sont acceptés : .mp4, .mov, .mpg... mais il ne devrait pas y avoir de problème pour en intégrer d’autres.

La chaîne se déroule passe comme suit ça .
-  Il y aura une page intermédiaire d’explication et de login qui amènera ici :  ?page=ajouter_video. Cette page permet d’uploader la vidéo par HTTP.
-  La page ajouter_video comporte un texte d’introduction. Le bouton bleu en Flash permet de sélectionner le fichier.
-  Lorsqu’on a sélectionné le fichier, le script le vérifie, le texte d’introduction disparaît et la barre de progression (qu’Izo va faire ;-) apparaîtra, affichera le pourcentage et une image au bout du processus.
-  On indique le titre et la catégorie, un texte facultatif et quand on validera, l’upload de la vidéo se poursuit.
-  L’upload peut durer une heure, trois heures, cinq heures... ça dépend de la taille de la vidéo.
-  Lorsque c’est terminé, un article SPIP est automatiquement créé, qui comporte la vidéo originale (au poids original) et la vidéo encodée dans le format définit dans la configuration.

Ici, nous avons choisi l’encodage des vidéos en MP4, pour qu’elles soient téléchargeables sur les iPhones ; en FLV, pour qu’elles soient lisibles directement sur le Web et en OGG Theora. Le OGG ne s’affiche pas pour l’instant et ne s’affichera que lorsque le navigateur du client sera Firefox 3.1, grâce à la balise <video> [1].

Ces trois encodages sont gérés par le plugin SPIPmotion [2]. Cela nécessite un serveur dédié parce qu’on a besoin de puissance derrière. Le serveur doit disposer d’FFmpeg [3], un logiciel d’encodage de vidéo. Si l’extension ffmpeg-php [4] est installée, lorsqu’une vidéo est ajoutée, le script récupère la 214e frame (il s’agit d’un réglage) qui deviendra le logo du document, la durée de la vidéo, sa taille (largeur et hauteur) et, si la vidéo est bien taggée (c’est rare), le titre, le texte et le copyright. Le script récupère donc les méta-données de la vidéo.

Concernant les formats, FFmpeg gère la plupart des formats vidéo [5]. Le seul problème qui peut se poser concerne certains codecs. FFmpeg est un logiciel libre, mais certains codecs sont soumis à des licences propriétaires. Parmi ceux-ci, certains permettent néanmoins un usage gratuit (ex. h264, FLV 1....), mais d’autres obligent à payer une redevance (ex. codecs Sorenson pour le FLV 1.1). Ces derniers ne sont donc pas utilisés ici. Mais avec le FLV 1., on obtient néanmoins une qualité correcte, selon les réglages utilisés. Son désavantage est de ne pas contenir de méta-données ; elles doivent alors être ajoutées avec FLVTool [6]. FLVTool lit le fichier et reconstruit des méta-données telles que la durée de la vidéo. Ceci est nécessaire, en gros, pour permettre l’avance et le recul rapides dans la vidéo.

Le formulaire d’upload pourrait facilement être adapté au son et utiliser le plugin getID3 [7]. Celui-ci récupère tous les tags ID3 d’un fichier son. Kent1 l’a déjà utilisé pour un site dans lequel il se basait sur ces tags pour créer des auteurs, une rubrique selon le titre de l’album, etc. Mais cela pourrait être configurable à souhait, par exemple via des filtres. De cette manière, il a pu importer 5.000 sons en l’espace de 20 minutes. Ceux-ci étaient déjà uploadés par FTP, il n’y avait plus qu’à les importer et toutes les données sont récupérées automatiquement.

Lorsque l’upload est terminé, la page affiche :
-  le logo du document (la 214e frame de la vidéo extraite automatiquement) ;
-  le type MIME du fichier (ex. application/mp4) ;
-  le format (largeur et hauteur en pixels) ;
-  le poids du fichier ;
-  la durée en secondes ;
-  le nombre de frames ; etc.

Toutes ces infos sont récupérées automatiquement.

Le script ajoute alors cette vidéo dans une file d’attente chargée par spip_cron. D’ailleurs ceci devrait changer parce que spip_cron ne cron pas quand il n’y a pas de visite, ce qui est souvent le cas quand on teste un site.

Le script définit la taille (largeur x hauteur) de la vidéo finale, mais celle-ci n’est redimensionnée que si la largeur originale est supérieure. Une vidéo de largeur inférieure aux paramètres par défaut sera laissée à ses dimensions originales. Par défaut, la vidéo est recadrée à 480x360px.

Les trois encodages sont systématiquement réalisés, les uns à la suite des autres. C’est pourquoi les fichiers sont mis dans une file d’attente, pour ne pas surcharger le serveur. Mais le choix d’encoder dans trois formats correspond à un souci de pérennité et de simplification de la diffusion.

Tant que l’encodage n’est pas terminé, l’article n’est pas publiable mais son contenu peut être modifié et sauvegardé par l’auteur. Le titre, le texte, etc. peuvent être mis à jour même si la vidéo est encore dans la file d’attente, car on ne sait pas à l’avance quand l’upload sera terminé.

Quand l’encodage est terminé, l’auteur reçoit un mail contenant l’URL de la page d’upload (wouaw !). Sur cette page, la capture est remplacée par un player qui permet de visualiser le rendu.

La page permettra de réencoder la vidéo avec des paramètres différents. En effet, il est très difficile de définir ces paramètres en amont. On peut définir des paramètres par défaut, plus ou moins propices à tous les encodages, mais ils ne fonctionneront pas pour certaines vidéos. Par exemple, il arrive que le désentrelacement fonctionne mal avec certaines vidéos. Il est donc parfois nécessaire de relancer le processus d’encodage avec des options qu’on définit manuellement.

La page lui propose alors de publier l’article, de supprimer complètement la vidéo (si le rendu est trop pourri), d’uploader une autre vidéo, etc. En effet, la publication requiert une action de l’utilisateur, elle n’est pas automatique. Il ne peut pas non plus décider à l’avance que la vidéo soit publiée automatiquement à la fin de l’encodage, car il reviendrait alors aux administrateurs du site de vérifier la qualité de l’encodage. Ici, dans ce projet communautaire, on préfère que l’auteur soit responsable de vérifier la qualité de sa vidéo et de relancer éventuellement l’encodage. Un peu comme sur Spip-contrib, on ne corrige pas les fautes d’orthographe des auteurs, chacun est responsable de ce qu’il publie.

Conclusion

Pour conclure, et rejoindre l’exposé de Romy, les documents joints sont un enjeu qui devient assez important pour tous les CMS. Demain, la rencontre au cinéma Nova est également axée, non pas sur le contenu du site Web, mais directement sur la mise à disposition de formats vidéos. La question de la mise en ligne d’œuvres ou contenus artistiques, notamment vidéo, se pose pour beaucoup de monde .

Le lecteur multimédia, par BoOz